summaryrefslogtreecommitdiffstats
path: root/test/php/library/Director/IcingaConfig/ExtensibleSetTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'test/php/library/Director/IcingaConfig/ExtensibleSetTest.php')
-rw-r--r--test/php/library/Director/IcingaConfig/ExtensibleSetTest.php162
1 files changed, 162 insertions, 0 deletions
diff --git a/test/php/library/Director/IcingaConfig/ExtensibleSetTest.php b/test/php/library/Director/IcingaConfig/ExtensibleSetTest.php
new file mode 100644
index 0000000..34bd83a
--- /dev/null
+++ b/test/php/library/Director/IcingaConfig/ExtensibleSetTest.php
@@ -0,0 +1,162 @@
+<?php
+
+namespace Tests\Icinga\Module\Director\IcingaConfig;
+
+use Icinga\Module\Director\IcingaConfig\ExtensibleSet;
+use Icinga\Module\Director\Objects\IcingaUser;
+use Icinga\Module\Director\Test\BaseTestCase;
+
+class ExtensibleSetTest extends BaseTestCase
+{
+ public function testNoValuesResultInEmptySet()
+ {
+ $set = new ExtensibleSet();
+
+ $this->assertEquals(
+ array(),
+ $set->getResolvedValues()
+ );
+ }
+
+ public function testValuesPassedToConstructorAreAccepted()
+ {
+ $values = array('Val1', 'Val2', 'Val4');
+ $set = new ExtensibleSet($values);
+
+ $this->assertEquals(
+ $values,
+ $set->getResolvedValues()
+ );
+ }
+
+ public function testConstructorAcceptsSingleValues()
+ {
+ $set = new ExtensibleSet('Bla');
+
+ $this->assertEquals(
+ array('Bla'),
+ $set->getResolvedValues()
+ );
+ }
+
+ public function testSingleValuesCanBeBlacklisted()
+ {
+ $values = array('Val1', 'Val2', 'Val4');
+ $set = new ExtensibleSet($values);
+ $set->blacklist('Val2');
+
+ $this->assertEquals(
+ array('Val1', 'Val4'),
+ $set->getResolvedValues()
+ );
+ }
+
+ public function testMultipleValuesCanBeBlacklisted()
+ {
+ $values = array('Val1', 'Val2', 'Val4');
+ $set = new ExtensibleSet($values);
+ $set->blacklist(array('Val4', 'Val1'));
+
+ $this->assertEquals(
+ array('Val2'),
+ $set->getResolvedValues()
+ );
+ }
+
+ public function testSimpleInheritanceWorksFine()
+ {
+ $values = array('Val1', 'Val2', 'Val4');
+ $parent = new ExtensibleSet($values);
+ $child = new ExtensibleSet();
+ $child->inheritFrom($parent);
+
+ $this->assertEquals(
+ $values,
+ $child->getResolvedValues()
+ );
+ }
+
+ public function testWeCanInheritFromMultipleParents()
+ {
+ $p1set = array('p1a', 'p1c');
+ $p2set = array('p2a', 'p2d');
+ $parent1 = new ExtensibleSet($p1set);
+ $parent2 = new ExtensibleSet($p2set);
+ $child = new ExtensibleSet();
+ $child->inheritFrom($parent1)->inheritFrom($parent2);
+
+ $this->assertEquals(
+ $p2set,
+ $child->getResolvedValues()
+ );
+ }
+
+ public function testOwnValuesOverrideParents()
+ {
+ $cset = array('p1a', 'p1c');
+ $pset = array('p2a', 'p2d');
+ $child = new ExtensibleSet($cset);
+ $parent = new ExtensibleSet($pset);
+ $child->inheritFrom($parent);
+
+ $this->assertEquals(
+ $cset,
+ $child->getResolvedValues()
+ );
+ }
+
+ public function testInheritedValuesCanBeBlacklisted()
+ {
+ $child = new ExtensibleSet();
+ $child->blacklist('p2');
+
+ $pset = array('p1', 'p2', 'p3');
+ $parent = new ExtensibleSet($pset);
+
+ $child->inheritFrom($parent);
+ $child->blacklist(array('not', 'yet', 'p1'));
+
+ $this->assertEquals(
+ array('p3'),
+ $child->getResolvedValues()
+ );
+
+ $child->blacklist(array('p3'));
+ $this->assertEquals(
+ array(),
+ $child->getResolvedValues()
+ );
+ }
+
+ public function testInheritedValuesCanBeExtended()
+ {
+ $pset = array('p1', 'p2', 'p3');
+
+ $child = new ExtensibleSet();
+ $child->extend('p5');
+
+ $parent = new ExtensibleSet($pset);
+ $child->inheritFrom($parent);
+
+ $this->assertEquals(
+ array('p1', 'p2', 'p3', 'p5'),
+ $child->getResolvedValues()
+ );
+ }
+
+ public function testCombinedDefinitionRendersCorrectly()
+ {
+ $set = new ExtensibleSet(array('Pre', 'Def', 'Ined'));
+ $set->blacklist(array('And', 'Not', 'Those'));
+ $set->extend('PlusThis');
+
+ $out = ' key_name = [ Pre, Def, Ined ]' . "\n"
+ . ' key_name += [ PlusThis ]' . "\n"
+ . ' key_name -= [ And, Not, Those ]' . "\n";
+
+ $this->assertEquals(
+ $out,
+ $set->renderAs('key_name')
+ );
+ }
+}