Source of file EventTicketTest.php
Size: 3,990 Bytes - Last Modified: 2021-12-23T10:25:27+00:00
/var/www/docs.ssmods.com/process/src/tests/EventTicketTest.php
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131 | <?php /** * Contains tests for the {@link EventTicket} class. * * @package silverstripe-eventmanagement * @subpackage tests */ class EventTicketTest extends SapphireTest { /** * @covers EventTicket::getAvailableForDateTime() */ public function testGetAvailableForDatetimeWithDates() { $ticket = new EventTicket(); $time = new RegistrableDateTime(); // First test making the ticket unavailable with a fixed start date in // the past. $ticket->StartType = 'Date'; $ticket->StartDate = $startDate = date('Y-m-d H:i:s', time() + 60); $avail = $ticket->getAvailableForDateTime($time); $this->assertFalse($avail['available']); $this->assertEquals(strtotime($startDate), $avail['available_at']); // Then test making it unavailable with a date to start set relative // to the datetime start date. $ticket->StartType = 'TimeBefore'; $ticket->StartDays = 2; $time->StartDate = date('Y-m-d', time() + 3 * 3600 * 24); $time->StartTime = date('H:i:s', time()); $avail = $ticket->getAvailableForDateTime($time); $this->assertFalse($avail['available']); $this->assertEquals(time() + 1 * 3600 * 24, $avail['available_at']); // Then set it to a valid time and check it's valid. $time->StartDate = date('Y-m-d', time() + 1 * 3600 * 24); $avail = $ticket->getAvailableForDateTime($time); $this->assertTrue($avail['available']); // Make it beyond the end date. $ticket->EndType = 'Date'; $ticket->EndDate = date('Y-m-d H:i:s'); $avail = $ticket->getAvailableForDateTime($time); $this->assertFalse($avail['available']); // Then set the end date to be relative. $ticket->EndType = 'TimeBefore'; $ticket->EndDays = 1; $avail = $ticket->getAvailableForDateTime($time); $this->assertFalse($avail['available']); // Then make it valid and check it works. $ticket->EndDays = 0; $ticket->EndHours = 6; $avail = $ticket->getAvailableForDateTime($time); $this->assertTrue($avail['available']); } /** * @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 EventTicket::getSaleEndForDateTime() */ public function testGetSaleEndForDateTime() { $ticket = new EventTicket(); $time = new RegistrableDateTime(); $now = time(); $ticket->EndType = 'Date'; $ticket->EndDate = date('Y-m-d H:i:s', $now); $this->assertEquals( $now, $ticket->getSaleEndForDateTime($time), 'The correct end time is returned with a fixed date.' ); $ticket->EndType = 'TimeBefore'; $ticket->EndDays = 1; $ticket->EndHours = 12; $time->StartDate = date('Y-m-d', $now); $time->StartTime = date('H:i:s', $now); $this->assertEquals( $now - 1.5 * 3600 * 24, $ticket->getSaleEndForDateTime($time), 'The correct end time is returned with a relative end date.' ); } } |