icingaweb2-module-director/test/php/library/Director/Objects/IcingaTimePeriodTest.php

185 lines
5.4 KiB
PHP
Raw Normal View History

<?php
namespace Tests\Icinga\Module\Director\Objects;
2016-02-25 18:56:39 +01:00
use Icinga\Module\Director\Objects\IcingaTimePeriod;
2016-02-25 18:56:39 +01:00
use Icinga\Module\Director\Test\BaseTestCase;
2016-03-17 23:05:16 +01:00
class IcingaTimePeriodTest extends BaseTestCase
{
2016-03-17 23:05:16 +01:00
protected $testPeriodName = '___TEST___timeperiod';
protected $createdNames = [];
2016-03-17 23:05:16 +01:00
public function testWhetherUpdatedTimeperiodsAreCorrectlyStored()
{
if ($this->skipForMissingDb()) {
return;
}
2016-02-25 18:56:39 +01:00
$period = $this->createTestPeriod();
$newRanges = array(
'monday' => '00:00-24:00',
2016-02-25 18:56:39 +01:00
'tuesday' => '18:00-24:00',
'wednesday' => '00:00-24:00',
);
2016-03-17 23:05:16 +01:00
$period->ranges = $newRanges;
$this->assertEquals(
'18:00-24:00',
$period->toPlainObject()->ranges->tuesday
);
$period->store();
2016-02-25 18:56:39 +01:00
$period = $this->loadTestPeriod();
$this->assertEquals(
'18:00-24:00',
$period->ranges()->get('tuesday')->range_value
2016-02-25 18:56:39 +01:00
);
2016-03-17 23:05:16 +01:00
$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;
2016-02-25 18:56:39 +01:00
$object = IcingaTimePeriod::create(
array(
'object_name' => $name,
2016-02-25 18:56:39 +01:00
'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',
);
}
2016-02-25 18:56:39 +01:00
$ranges->set($testRanges);
$object->store();
2016-02-25 18:56:39 +01:00
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 = '')
2016-02-25 18:56:39 +01:00
{
return IcingaTimePeriod::load($this->testPeriodName . $suffix, $this->getDb());
2016-02-25 18:56:39 +01:00
}
2016-02-25 18:56:39 +01:00
public function tearDown()
{
$db = $this->getDb();
foreach ($this->createdNames as $name) {
if (IcingaTimePeriod::exists($name, $db)) {
IcingaTimePeriod::load($name, $db)->delete();
}
2016-02-25 18:56:39 +01:00
}
}
}