summaryrefslogtreecommitdiffstats
path: root/test/php/library/Director/PropertyModifier/PropertyModifierListToObjectTest.php
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--test/php/library/Director/PropertyModifier/PropertyModifierListToObjectTest.php104
1 files changed, 104 insertions, 0 deletions
diff --git a/test/php/library/Director/PropertyModifier/PropertyModifierListToObjectTest.php b/test/php/library/Director/PropertyModifier/PropertyModifierListToObjectTest.php
new file mode 100644
index 0000000..93d498c
--- /dev/null
+++ b/test/php/library/Director/PropertyModifier/PropertyModifierListToObjectTest.php
@@ -0,0 +1,104 @@
+<?php
+
+namespace Tests\Icinga\Module\Director\Objects;
+
+use Icinga\Module\Director\PropertyModifier\PropertyModifierListToObject;
+use Icinga\Module\Director\Test\BaseTestCase;
+
+class PropertyModifierListToObjectTest extends BaseTestCase
+{
+ public function testConvertsAListOfArrays()
+ {
+ $this->assertEquals(
+ $this->getOutput(),
+ $this->getNewModifier()->transform($this->getInputArrays())
+ );
+ }
+
+ public function testConvertsAListOfObjects()
+ {
+ $this->assertEquals(
+ $this->getOutput(),
+ $this->getNewModifier()->transform($this->getInputObjects())
+ );
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testFailsOnMissingKey()
+ {
+ $input = $this->getInputArrays();
+ unset($input[0]['name']);
+ $this->getNewModifier()->transform($input);
+ }
+
+ /**
+ * @expectedException \InvalidArgumentException
+ */
+ public function testFailsWithDuplicateRows()
+ {
+ $input = $this->getInputArrays();
+ $input[1]['name'] = 'row1';
+ $this->getNewModifier()->transform($input);
+ }
+
+ public function testKeepsFirstRowOnDuplicate()
+ {
+ $input = $this->getInputArrays();
+ $input[1]['name'] = 'row1';
+ $modifier = $this->getNewModifier()->setSetting('on_duplicate', 'keep_first');
+ $result = $modifier->transform($input);
+ $this->assertEquals(
+ (object) ['some' => 'property'],
+ $result->row1->props
+ );
+ }
+
+ public function testKeepsLastRowOnDuplicate()
+ {
+ $input = $this->getInputArrays();
+ $input[1]['name'] = 'row1';
+ $modifier = $this->getNewModifier()->setSetting('on_duplicate', 'keep_last');
+ $result = $modifier->transform($input);
+ $this->assertEquals(
+ (object) ['other' => 'property'],
+ $result->row1->props
+ );
+ }
+
+ protected function getNewModifier()
+ {
+ $modifier = new PropertyModifierListToObject();
+ $modifier->setSettings([
+ 'key_property' => 'name',
+ 'on_duplicate' => 'fail'
+ ]);
+
+ return $modifier;
+ }
+
+ protected function getInputArrays()
+ {
+ return [
+ ['name' => 'row1', 'props' => (object) ['some' => 'property']],
+ ['name' => 'row2', 'props' => (object) ['other' => 'property']],
+ ];
+ }
+
+ protected function getInputObjects()
+ {
+ return [
+ (object) ['name' => 'row1', 'props' => (object) ['some' => 'property']],
+ (object) ['name' => 'row2', 'props' => (object) ['other' => 'property']],
+ ];
+ }
+
+ protected function getOutput()
+ {
+ return (object) [
+ 'row1' => (object) ['name' => 'row1', 'props' => (object) ['some' => 'property']],
+ 'row2' => (object) ['name' => 'row2', 'props' => (object) ['other' => 'property']],
+ ];
+ }
+}