/**
  * @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 RegisterableDateTime();
     $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 RegisterableDateTime::getRemainingCapacity()
  */
 public function testGetRemainingCapacity()
 {
     $event = $this->objFromFixture('RegisterableEvent', 'event');
     $datetime = $this->objFromFixture('RegisterableDateTime', 'datetime');
     $ticket = $this->objFromFixture('EventTicket', 'ticket');
     $datetime->Capacity = 0;
     $datetime->write();
     $this->assertEquals(true, $datetime->getRemainingCapacity());
     $datetime->Capacity = 50;
     $datetime->write();
     $this->assertEquals(50, $datetime->getRemainingCapacity());
     $rego = new EventRegistration();
     $rego->TimeID = $datetime->ID;
     $rego->write();
     $rego->Tickets()->add($ticket, array('Quantity' => 49));
     $this->assertEquals(1, $datetime->getRemainingCapacity());
     $this->assertEquals(50, $datetime->getRemainingCapacity($rego->ID));
     $rego->Tickets()->remove($ticket);
     $rego->Tickets()->add($ticket, array('Quantity' => 50));
     $this->assertFalse(!!$datetime->getRemainingCapacity());
     $this->assertEquals(50, $datetime->getRemainingCapacity($rego->ID));
 }