diff options
Diffstat (limited to '')
-rw-r--r-- | test/php/library/Director/Objects/IcingaTimePeriodTest.php | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/test/php/library/Director/Objects/IcingaTimePeriodTest.php b/test/php/library/Director/Objects/IcingaTimePeriodTest.php new file mode 100644 index 0000000..84496d3 --- /dev/null +++ b/test/php/library/Director/Objects/IcingaTimePeriodTest.php @@ -0,0 +1,184 @@ +<?php + +namespace Tests\Icinga\Module\Director\Objects; + +use Icinga\Module\Director\Objects\IcingaTimePeriod; +use Icinga\Module\Director\Test\BaseTestCase; + +class IcingaTimePeriodTest extends BaseTestCase +{ + protected $testPeriodName = '___TEST___timeperiod'; + + protected $createdNames = []; + + public function testWhetherUpdatedTimeperiodsAreCorrectlyStored() + { + if ($this->skipForMissingDb()) { + return; + } + + $period = $this->createTestPeriod(); + + $newRanges = array( + 'monday' => '00:00-24:00', + 'tuesday' => '18:00-24:00', + 'wednesday' => '00:00-24:00', + ); + $period->ranges = $newRanges; + $this->assertEquals( + '18:00-24:00', + $period->toPlainObject()->ranges->tuesday + ); + + $period->store(); + + $period = $this->loadTestPeriod(); + $this->assertEquals( + '18:00-24:00', + $period->ranges()->get('tuesday')->range_value + ); + + $this->assertEquals( + '00:00-24:00', + $period->toPlainObject()->ranges->wednesday + ); + + $period->ranges()->setRange('wednesday', '09:00-17:00'); + + $this->assertEquals( + '09:00-17:00', + $period->toPlainObject()->ranges->wednesday + ); + + $this->assertEquals( + '00:00-24:00', + $period->getPlainUnmodifiedObject()->ranges->wednesday + ); + } + + protected function createTestPeriod($suffix = '', $testRanges = []) + { + $db = $this->getDb(); + $name = $this->testPeriodName . $suffix; + + $this->createdNames[] = $name; + $object = IcingaTimePeriod::create( + array( + 'object_name' => $name, + 'object_type' => 'object' + ), + $db + ); + $object->store(); + $ranges = $object->ranges(); + + if (empty($testRanges)) { + $testRanges = array( + 'monday' => '00:00-24:00', + 'tuesday' => '00:00-24:00', + 'wednesday' => '00:00-24:00', + ); + } + + $ranges->set($testRanges); + $object->store(); + + return $object; + } + + public function testIsActiveWorksForWeekdayRanges() + { + $period = $this->createTestPeriod(); + + $newRanges = array( + 'monday' => '00:00-24:00', + 'tuesday' => '18:00-24:00', + 'wednesday' => '00:00-24:00', + ); + $period->ranges = $newRanges; + + // Tuesday: + $this->assertFalse($period->isActive(strtotime('2016-05-17 10:00:00'))); + // Wednesday: + $this->assertTrue($period->isActive(strtotime('2016-05-18 10:00:00'))); + // Thursday: + $this->assertFalse($period->isActive(strtotime('2016-05-19 10:00:00'))); + } + + public function testPeriodWithIncludes() + { + $period = $this->createTestPeriod(); + $include = $this->createTestPeriod('include', ['thursday' => '00:00-24:00']); + + $period->set('includes', $include->object_name); + $period->store(); + + // Wednesday: + $this->assertTrue($period->isActive(strtotime('2016-05-18 10:00:00'))); + // Thursday: + $this->assertTrue($period->isActive(strtotime('2016-05-19 10:00:00'))); + } + + public function testPeriodWithExcludes() + { + $period = $this->createTestPeriod(); + $exclude = $this->createTestPeriod('exclude', ['wednesday' => '00:00-24:00']); + + $period->set('excludes', $exclude->object_name); + $period->store(); + + // Wednesday: + $this->assertFalse($period->isActive(strtotime('2016-05-18 10:00:00'))); + // Thursday: + $this->assertFalse($period->isActive(strtotime('2016-05-19 10:00:00'))); + } + + public function testPeriodPreferingIncludes() + { + $period = $this->createTestPeriod(); + $include = $this->createTestPeriod('include', ['thursday' => '00:00-24:00']); + $exclude = $this->createTestPeriod('exclude', ['thursday' => '00:00-24:00']); + + $period->set('includes', $include->object_name); + $period->set('excludes', $exclude->object_name); + $period->store(); + + // Wednesday: + $this->assertTrue($period->isActive(strtotime('2016-05-18 10:00:00'))); + // Thursday: + $this->assertTrue($period->isActive(strtotime('2016-05-19 10:00:00'))); + } + + public function testPeriodPreferingExcludes() + { + $period = $this->createTestPeriod(); + $include = $this->createTestPeriod('include', ['thursday' => '00:00-24:00']); + $exclude = $this->createTestPeriod('exclude', ['thursday' => '00:00-24:00']); + + $period->set('prefer_includes', false); + $period->set('includes', $include->object_name); + $period->set('excludes', $exclude->object_name); + $period->store(); + + // Wednesday: + $this->assertTrue($period->isActive(strtotime('2016-05-18 10:00:00'))); + // Thursday: + $this->assertFalse($period->isActive(strtotime('2016-05-19 10:00:00'))); + } + + protected function loadTestPeriod($suffix = '') + { + return IcingaTimePeriod::load($this->testPeriodName . $suffix, $this->getDb()); + } + + public function tearDown() + { + $db = $this->getDb(); + + foreach ($this->createdNames as $name) { + if (IcingaTimePeriod::exists($name, $db)) { + IcingaTimePeriod::load($name, $db)->delete(); + } + } + } +} |