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]);
 }
 public function testGetsDailySummaryForResource()
 {
     $targetTimezone = 'America/Chicago';
     $date = Date::Parse('2009-09-02', $targetTimezone);
     $start = $date->SetTime(Time::Parse('04:00'));
     $end = $date->SetTime(Time::Parse('05:00'));
     $resourceId = 1;
     $scheduleLayout = new ScheduleLayout($targetTimezone);
     $scheduleLayout->AppendPeriod(new Time(4, 0, 0, $targetTimezone), new Time(5, 0, 0, $targetTimezone));
     $listing = $this->getMock('IReservationListing');
     $firstReservation = new TestReservationListItem($start, $end, $resourceId);
     $reservations = array($firstReservation, new TestReservationListItem($start, $end, $resourceId), new TestBlackoutListItem($start, $end, $resourceId));
     $listing->expects($this->once())->method('OnDateForResource')->with($this->equalTo($date), $this->equalTo($resourceId))->will($this->returnValue($reservations));
     $layout = new DailyLayout($listing, $scheduleLayout);
     $summary = $layout->GetSummary($date, $resourceId);
     $this->assertEquals(2, $summary->NumberOfReservations());
     $this->assertEquals($firstReservation, $summary->FirstReservation());
 }
 public function testFullDayPeriod()
 {
     $utc = 'UTC';
     $sunday = Date::Parse('2013-01-06 00:00', 'America/Chicago');
     $utcDate = $sunday->ToUtc();
     $midnight = Time::Parse('00:00', $utc);
     $layout = new ScheduleLayout($utc);
     $layout->AppendPeriod($midnight, $midnight);
     $periods = $layout->GetLayout($sunday);
     $this->assertEquals(1, count($periods));
     $period1 = new SchedulePeriod($utcDate->SetTime($midnight), $utcDate->SetTime($midnight, true));
     $this->assertEquals($period1, $periods[0], 'Expected ' . $period1 . ' Actual ' . $periods[0]);
 }