/** * Test to Constraints Base functionality. */ public function testConstraintsBaseFunctions() { $u1 = new Unit(1, 10, array()); $u2 = new Unit(2, 10, array()); $units = array($u1, $u2); $sd = new \DateTime('2016-01-01 15:10'); $ed = new \DateTime('2016-06-30 18:00'); $sd1 = new \DateTime('2016-01-07 02:12'); $ed1 = new \DateTime('2016-01-13 13:12'); // Create some events for units 1,2 $e1u1 = new Event($sd1, $ed1, $u1, 11); $e1u2 = new Event($sd1, $ed1, $u2, 13); $store = new SqlLiteDBStore($this->pdo, 'availability_event', SqlDBStore::BAT_STATE); $calendar = new Calendar($units, $store); // Add the events. $calendar->addEvents(array($e1u1, $e1u2), Event::BAT_HOURLY); $response = $calendar->getMatchingUnits($sd, $ed, array(10, 11, 13), array()); // Add the constraint with Start and End dates. $constraint = new MinMaxDaysConstraint(array($u1, $u2), 3, 0, $sd, $ed); $constraint->setStartDate($sd1); $this->assertEquals($constraint->getStartDate(), $sd1); $constraint->setEndDate($ed1); $this->assertEquals($constraint->getEndDate(), $ed1); $constraint->getAffectedUnits(); }
public function testCalendarCalendarResponseFunctions() { $u1 = new Unit(1, 10, array()); $u2 = new Unit(2, 10, array()); $u3 = new Unit(3, 10, array()); $units = array($u1, $u2); $sd = new \DateTime('2016-01-01 15:10'); $ed = new \DateTime('2016-06-30 18:00'); $sd1 = new \DateTime('2016-01-07 02:12'); $ed1 = new \DateTime('2016-01-13 13:12'); // Create some events for units 1,2,3 $e1u1 = new Event($sd1, $ed1, $u1, 11); $e1u2 = new Event($sd1, $ed1, $u2, 13); $store = new SqlLiteDBStore($this->pdo, 'availability_event', SqlDBStore::BAT_STATE); $calendar = new Calendar($units, $store); // Add the events. $calendar->addEvents(array($e1u1, $e1u2), Event::BAT_HOURLY); $response = $calendar->getMatchingUnits($sd, $ed, array(10, 11, 13), array()); $this->assertEquals($response->getStartDate()->format('Y-m-d H:i'), '2016-01-01 15:10'); $this->assertEquals($response->getEndDate()->format('Y-m-d H:i'), '2016-06-30 18:00'); $valid_unit_ids = array_keys($response->getIncluded()); $invalid_unit_ids = array_keys($response->getExcluded()); // Remove the unit 2 from valid unit ids. $response->removeFromMatched($u2, $reason = 'Just for testing.'); $valid_unit_ids = array_keys($response->getIncluded()); $invalid_unit_ids = array_keys($response->getExcluded()); // Now the unit 2 should be invalid. $this->assertEquals($invalid_unit_ids[0], 2); // Try to remove an a nonexistent unit from response. $response->removeFromMatched($u3, $reason = 'Just for testing.'); }
public function testGetMatchingUnitsWithoutReset() { $u1 = new Unit(1, 10, array()); $u2 = new Unit(2, 10, array()); $u3 = new Unit(3, 10, array()); $u4 = new Unit(4, 10, array()); $units = array($u1, $u2, $u3, $u4); $sd = new \DateTime('2016-05-01 00:00'); $ed = new \DateTime('2016-05-01 23:59'); $sd1 = new \DateTime('2016-05-01 10:00'); $ed1 = new \DateTime('2016-05-01 10:59'); $sd2 = new \DateTime('2016-05-01 14:00'); $ed2 = new \DateTime('2016-05-01 14:29'); $sd3 = new \DateTime('2016-05-01 09:45'); $ed3 = new \DateTime('2016-05-01 10:14'); $sd4 = new \DateTime('2016-05-01 10:45'); $ed4 = new \DateTime('2016-05-01 10:59'); $e1u1 = new Event($sd1, $ed1, $u1, 11); $e1u2 = new Event($sd1, $ed1, $u2, 11); $e1u3 = new Event($sd1, $ed1, $u3, 11); $e2u1 = new Event($sd2, $ed2, $u1, 11); $e2u2 = new Event($sd2, $ed2, $u2, 11); $e2u3 = new Event($sd2, $ed2, $u3, 11); $e2u4 = new Event($sd2, $ed2, $u3, 11); $e3u4 = new Event($sd3, $ed3, $u4, 11); $e4u4 = new Event($sd4, $ed4, $u4, 11); $store = new SqlLiteDBStore($this->pdo, 'availability_event', SqlDBStore::BAT_STATE); $calendar = new Calendar($units, $store); $calendar->addEvents(array($e1u1, $e1u2, $e1u3, $e2u1, $e2u2, $e2u3, $e2u4, $e3u4, $e4u4), Event::BAT_HOURLY); $event_ids = $calendar->getEvents($sd, $ed); foreach ($event_ids as $unit_id => $unit_events) { foreach ($unit_events as $key => $event) { $event_start_date = $event->getStartDate(); $dates[$event_start_date->getTimestamp()] = $event_start_date; } } ksort($dates); $dates = array_values($dates); for ($i = 0; $i < count($dates) - 1; $i++) { $sd = $dates[$i]; $ed = clone $dates[$i + 1]; $ed->sub(new \DateInterval('PT1M')); $response = $calendar->getMatchingUnits($sd, $ed, array(10), array(), FALSE, FALSE); if (count(array_keys($response->getIncluded()))) { if ($i == 0) { $this->assertEquals($sd->format('Y-m-d H:i'), '2016-05-01 00:00'); $this->assertEquals($ed->format('Y-m-d H:i'), '2016-05-01 09:44'); } elseif ($i == 1) { $this->assertEquals($sd->format('Y-m-d H:i'), '2016-05-01 09:45'); $this->assertEquals($ed->format('Y-m-d H:i'), '2016-05-01 09:59'); } elseif ($i == 3) { $this->assertEquals($sd->format('Y-m-d H:i'), '2016-05-01 10:15'); $this->assertEquals($ed->format('Y-m-d H:i'), '2016-05-01 10:44'); } elseif ($i == 5) { $this->assertEquals($sd->format('Y-m-d H:i'), '2016-05-01 11:00'); $this->assertEquals($ed->format('Y-m-d H:i'), '2016-05-01 13:59'); } elseif ($i == 7) { $this->assertEquals($sd->format('Y-m-d H:i'), '2016-05-01 14:30'); $this->assertEquals($ed->format('Y-m-d H:i'), '2016-05-01 23:59'); } } else { if ($i == 2) { $this->assertEquals($sd->format('Y-m-d H:i'), '2016-05-01 10:00'); $this->assertEquals($ed->format('Y-m-d H:i'), '2016-05-01 10:14'); } elseif ($i == 4) { $this->assertEquals($sd->format('Y-m-d H:i'), '2016-05-01 10:45'); $this->assertEquals($ed->format('Y-m-d H:i'), '2016-05-01 10:59'); } elseif ($i == 6) { $this->assertEquals($sd->format('Y-m-d H:i'), '2016-05-01 14:00'); $this->assertEquals($ed->format('Y-m-d H:i'), '2016-05-01 14:29'); } } } }