public function testApplicationAdminsAreExcludedFromBufferConstraints() { $startDate = Date::Parse('2010-04-04 06:00', 'UTC'); $endDate = Date::Parse('2010-04-04 07:00', 'UTC'); $bufferTime = 60 * 60; $reservation = new TestReservationSeries(); $resource1 = new FakeBookableResource(100, null); $resource1->SetBufferTime($bufferTime); $reservation->WithDuration(new DateRange($startDate, $endDate)); $reservation->WithResource($resource1); $reservation->WithBookedBy(new FakeUserSession(true)); $conflict1 = new TestReservationItemView(2, Date::Parse('2010-04-04 04:00', 'UTC'), Date::Parse('2010-04-04 06:00', 'UTC'), $resource1->GetId()); $conflict1->WithBufferTime($bufferTime); $strategy = $this->getMock('IResourceAvailabilityStrategy'); $strategy->expects($this->once())->method('GetItemsBetween')->with($this->equalTo($startDate), $this->equalTo($endDate))->will($this->returnValue(array($conflict1))); $rule = new ResourceAvailabilityRule($strategy, 'UTC'); $result = $rule->Validate($reservation); $this->assertTrue($result->IsValid()); }
public function testGetsConflictingReservationTimesForSingleDateSingleResourceWithBufferTimes() { $startDate = Date::Parse('2010-04-04 06:00', 'UTC'); $endDate = Date::Parse('2010-04-04 07:00', 'UTC'); $bufferTime = 60 * 60; $reservation = new TestReservationSeries(); $resource1 = new FakeBookableResource(100, null); $resource1->SetBufferTime($bufferTime); $reservation->WithDuration(new DateRange($startDate, $endDate)); $reservation->WithResource($resource1); $conflict1 = new TestReservationItemView(2, Date::Parse('2010-04-04 04:00', 'UTC'), Date::Parse('2010-04-04 05:30', 'UTC'), $resource1->GetId()); $conflict1->WithBufferTime($bufferTime); $conflict2 = new TestReservationItemView(3, Date::Parse('2010-04-04 07:30', 'UTC'), Date::Parse('2010-04-04 08:00', 'UTC'), $resource1->GetId()); $conflict2->WithBufferTime($bufferTime); $nonConflict1 = new TestReservationItemView(4, Date::Parse('2010-04-04 06:00', 'UTC'), Date::Parse('2010-04-04 07:30', 'UTC'), 2); $nonConflict1->WithBufferTime($bufferTime); $nonConflict2 = new TestReservationItemView(5, Date::Parse('2010-04-04 02:30', 'UTC'), Date::Parse('2010-04-04 05:00', 'UTC'), $resource1->GetId()); $nonConflict2->WithBufferTime($bufferTime); $nonConflict3 = new TestReservationItemView(6, Date::Parse('2010-04-04 08:00', 'UTC'), Date::Parse('2010-04-04 09:00', 'UTC'), $resource1->GetId()); $nonConflict3->WithBufferTime($bufferTime); $strategy = $this->getMock('IResourceAvailabilityStrategy'); $strategy->expects($this->once())->method('GetItemsBetween')->with($this->equalTo($startDate->AddMinutes(-60)), $this->equalTo($endDate->AddMinutes(60)))->will($this->returnValue(array($conflict1, $conflict2, $nonConflict1, $nonConflict2, $nonConflict3))); $rule = new ExistingResourceAvailabilityRule($strategy, 'UTC'); $result = $rule->Validate($reservation); $this->assertFalse($result->IsValid()); }
public function testSkipsAddingBufferSlotsIfThereIsAnotherItemAtThatTime() { $tz = 'America/Chicago'; $listDate = Date::Parse('2011-02-08', $tz); $layout = new ScheduleLayout($tz); $layout->AppendPeriod(Time::Parse('0:00', $tz), Time::Parse('0:30', $tz)); $layout->AppendPeriod(Time::Parse('0:30', $tz), Time::Parse('1:00', $tz)); $layout->AppendPeriod(Time::Parse('1:00', $tz), Time::Parse('1:30', $tz)); $layout->AppendPeriod(Time::Parse('1:30', $tz), Time::Parse('2:00', $tz)); $layout->AppendPeriod(Time::Parse('2:00', $tz), Time::Parse('6:00', $tz)); $layout->AppendPeriod(Time::Parse('6:00', $tz), Time::Parse('0:00', $tz)); $item1 = new TestReservationItemView(1, Date::Parse('2011-02-08 0:30', $tz)->ToUtc(), Date::Parse('2011-02-08 1:00', $tz)->ToUtc(), 1); $item2 = new TestReservationItemView(2, Date::Parse('2011-02-08 1:30', $tz)->ToUtc(), Date::Parse('2011-02-08 2:00', $tz)->ToUtc(), 1); $item1->WithBufferTime(60 * 60); $item2->WithBufferTime(60 * 60); $r1 = new ReservationListItem($item1); $r2 = new ReservationListItem($item2); $list = new ScheduleReservationList(array($r1, $r2), $layout, $listDate, false); /** @var IReservationSlot[] $slots */ $slots = $list->BuildSlots(); $this->assertTrue($slots[0]->Begin()->Equals(Time::Parse('0:00', $tz))); $this->assertTrue($slots[0]->End()->Equals(Time::Parse('0:30', $tz))); $this->assertInstanceOf('BufferSlot', $slots[0]); $this->assertTrue($slots[1]->Begin()->Equals(Time::Parse('0:30', $tz))); $this->assertTrue($slots[1]->End()->Equals(Time::Parse('1:00', $tz))); $this->assertInstanceOf('ReservationSlot', $slots[1]); $this->assertTrue($slots[2]->Begin()->Equals(Time::Parse('1:00', $tz))); $this->assertTrue($slots[2]->End()->Equals(Time::Parse('1:30', $tz))); $this->assertInstanceOf('EmptyReservationSlot', $slots[2]); $this->assertTrue($slots[3]->Begin()->Equals(Time::Parse('1:30', $tz))); $this->assertTrue($slots[3]->End()->Equals(Time::Parse('2:00', $tz))); $this->assertInstanceOf('ReservationSlot', $slots[3]); $this->assertTrue($slots[4]->Begin()->Equals(Time::Parse('2:00', $tz))); $this->assertTrue($slots[4]->End()->Equals(Time::Parse('6:00', $tz))); $this->assertInstanceOf('BufferSlot', $slots[0]); }