diff --git a/test/php/library/Director/Objects/IcingaTimePeriodTest.php b/test/php/library/Director/Objects/IcingaTimePeriodTest.php index 2e70faeb..84496d32 100644 --- a/test/php/library/Director/Objects/IcingaTimePeriodTest.php +++ b/test/php/library/Director/Objects/IcingaTimePeriodTest.php @@ -9,6 +9,8 @@ class IcingaTimePeriodTest extends BaseTestCase { protected $testPeriodName = '___TEST___timeperiod'; + protected $createdNames = []; + public function testWhetherUpdatedTimeperiodsAreCorrectlyStored() { if ($this->skipForMissingDb()) { @@ -54,12 +56,15 @@ class IcingaTimePeriodTest extends BaseTestCase ); } - protected function createTestPeriod() + protected function createTestPeriod($suffix = '', $testRanges = []) { $db = $this->getDb(); + $name = $this->testPeriodName . $suffix; + + $this->createdNames[] = $name; $object = IcingaTimePeriod::create( array( - 'object_name' => $this->testPeriodName, + 'object_name' => $name, 'object_type' => 'object' ), $db @@ -67,11 +72,13 @@ class IcingaTimePeriodTest extends BaseTestCase $object->store(); $ranges = $object->ranges(); - $testRanges = array( - 'monday' => '00:00-24:00', - 'tuesday' => '00:00-24:00', - 'wednesday' => '00:00-24:00', - ); + 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(); @@ -98,16 +105,80 @@ class IcingaTimePeriodTest extends BaseTestCase $this->assertFalse($period->isActive(strtotime('2016-05-19 10:00:00'))); } - protected function loadTestPeriod() + public function testPeriodWithIncludes() { - return IcingaTimePeriod::load($this->testPeriodName, $this->getDb()); + $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(); - if (IcingaTimePeriod::exists($this->testPeriodName, $db)) { - IcingaTimePeriod::load($this->testPeriodName, $db)->delete(); + + foreach ($this->createdNames as $name) { + if (IcingaTimePeriod::exists($name, $db)) { + IcingaTimePeriod::load($name, $db)->delete(); + } } } }