/**
  * @covers EventTicket::getAvailableForDateTime()
  */
 public function testGetAvailableForDatetimeWithQuantity()
 {
     $ticket = new EventTicket();
     $ticket->StartType = 'Date';
     $ticket->StartDate = date('Y-m-d', time() - 3600 * 24);
     $ticket->EndType = 'Date';
     $ticket->EndDate = date('Y-m-d', time() + 3600 * 24);
     $ticket->write();
     $time = new RegistrableDateTime();
     $time->write();
     $ticket->Available = 50;
     $avail = $ticket->getAvailableForDateTime($time);
     $this->assertEquals(50, $avail['available']);
     // Create a registration that consumes some of the tickets.
     $rego = new EventRegistration();
     $rego->Status = 'Valid';
     $rego->TimeID = $time->ID;
     $rego->write();
     $rego->Tickets()->add($ticket, array('Quantity' => 49));
     $avail = $ticket->getAvailableForDateTime($time);
     $this->assertEquals(1, $avail['available']);
     // Then check we can exclude it.
     $avail = $ticket->getAvailableForDateTime($time, $rego->ID);
     $this->assertEquals(50, $avail['available']);
     // Then bump up the quantity so there are no more available.
     $rego->Tickets()->remove($ticket);
     $rego->Tickets()->add($ticket, array('Quantity' => 50));
     $avail = $ticket->getAvailableForDateTime($time);
     $this->assertFalse($avail['available']);
 }
 /**
  * @covers EventInvitationField::doInvite()
  */
 public function testDoInvite()
 {
     $event = new RegistrableEvent();
     $event->write();
     $datetime = new RegistrableDateTime();
     $datetime->StartDate = date('Y-m-d');
     $datetime->EventID = $event->ID;
     $datetime->write();
     $field = new EventInvitationField($datetime, 'Invitations');
     $form = new Form(new EventInvitationFieldTest_Controller(), 'Form', new FieldList($field), new FieldList());
     $form->loadDataFrom($event);
     $invite = $field->InviteForm();
     $invite->dataFieldByName('Emails')->setValue(array('new' => array('Name' => array('First Test', 'Second Test'), 'Email' => array('*****@*****.**', '*****@*****.**'))));
     $invite->dataFieldByName('TimeID')->setValue($datetime->ID);
     $field->doInvite(array(), $invite);
     $this->assertEmailSent('*****@*****.**');
     $this->assertEmailSent('*****@*****.**');
     $this->clearEmails();
     $invite->dataFieldByName('Emails')->setValue(array('new' => array('Name' => array('First Test', 'Second Test', 'Third Test'), 'Email' => array('*****@*****.**', '*****@*****.**', '*****@*****.**'))));
     $field->doInvite(array(), $invite);
     $this->assertNull($this->findEmail('*****@*****.**'));
     $this->assertNull($this->findEmail('*****@*****.**'));
     $this->assertEmailSent('*****@*****.**');
 }