From 33ceceaa796f609f7a8f047982e1f558c9129471 Mon Sep 17 00:00:00 2001
From: Olav Morken <olav.morken@uninett.no>
Date: Tue, 26 May 2015 13:24:14 +0200
Subject: [PATCH] Add test for core:AttributeAdd.

---
 tests/modules/core/AttributeAddTest.php | 138 ++++++++++++++++++++++++
 1 file changed, 138 insertions(+)
 create mode 100644 tests/modules/core/AttributeAddTest.php

diff --git a/tests/modules/core/AttributeAddTest.php b/tests/modules/core/AttributeAddTest.php
new file mode 100644
index 000000000..20748fafe
--- /dev/null
+++ b/tests/modules/core/AttributeAddTest.php
@@ -0,0 +1,138 @@
+<?php
+
+/**
+ * Test for the core:AttributeAdd filter.
+ */
+class Test_Core_Auth_Process_AttributeAdd extends PHPUnit_Framework_TestCase
+{
+
+    /*
+     * Helper function to run the filter with a given configuration.
+     *
+     * @param array $config  The filter configuration.
+     * @param array $request  The request state.
+     * @return array  The state array after processing.
+     */
+    private static function processFilter(array $config, array $request)
+    {
+        $filter = new sspmod_core_Auth_Process_AttributeAdd($config, NULL);
+        $filter->process($request);
+        return $request;
+    }
+
+    /*
+     * Test the most basic functionality.
+     */
+    public function testBasic()
+    {
+        $config = array(
+            'test' => array('value1', 'value2'),
+        );
+        $request = array(
+            'Attributes' => array(),
+        );
+        $result = self::processFilter($config, $request);
+        $attributes = $result['Attributes'];
+        $this->assertArrayHasKey('test', $attributes);
+        $this->assertEquals($attributes['test'], array('value1', 'value2'));
+    }
+
+    /*
+     * Test that existing attributes are left unmodified.
+     */
+    public function testExistingNotModified()
+    {
+        $config = array(
+            'test' => array('value1', 'value2'),
+        );
+        $request = array(
+            'Attributes' => array(
+                'original1' => array('original_value1'),
+                'original2' => array('original_value2'),
+            ),
+        );
+        $result = self::processFilter($config, $request);
+        $attributes = $result['Attributes'];
+        $this->assertArrayHasKey('test', $attributes);
+        $this->assertEquals($attributes['test'], array('value1', 'value2'));
+        $this->assertArrayHasKey('original1', $attributes);
+        $this->assertEquals($attributes['original1'], array('original_value1'));
+        $this->assertArrayHasKey('original2', $attributes);
+        $this->assertEquals($attributes['original2'], array('original_value2'));
+    }
+
+    /*
+     * Test single string as attribute value.
+     */
+    public function testStringValue()
+    {
+        $config = array(
+            'test' => 'value',
+        );
+        $request = array(
+            'Attributes' => array(),
+        );
+        $result = self::processFilter($config, $request);
+        $attributes = $result['Attributes'];
+        $this->assertArrayHasKey('test', $attributes);
+        $this->assertEquals($attributes['test'], array('value'));
+    }
+
+    /*
+     * Test the most basic functionality.
+     */
+    public function testAddMultiple()
+    {
+        $config = array(
+            'test1' => array('value1'),
+            'test2' => array('value2'),
+        );
+        $request = array(
+            'Attributes' => array(),
+        );
+        $result = self::processFilter($config, $request);
+        $attributes = $result['Attributes'];
+        $this->assertArrayHasKey('test1', $attributes);
+        $this->assertEquals($attributes['test1'], array('value1'));
+        $this->assertArrayHasKey('test2', $attributes);
+        $this->assertEquals($attributes['test2'], array('value2'));
+    }
+
+    /*
+     * Test behavior when appending attribute values.
+     */
+    public function testAppend()
+    {
+        $config = array(
+            'test' => array('value2'),
+        );
+        $request = array(
+            'Attributes' => array(
+                'test' => array('value1'),
+            ),
+        );
+        $result = self::processFilter($config, $request);
+        $attributes = $result['Attributes'];
+        $this->assertEquals($attributes['test'], array('value1', 'value2'));
+    }
+
+    /*
+     * Test replacing attribute values.
+     */
+    public function testReplace()
+    {
+        $config = array(
+            '%replace',
+            'test' => array('value2'),
+        );
+        $request = array(
+            'Attributes' => array(
+                'test' => array('value1'),
+            ),
+        );
+        $result = self::processFilter($config, $request);
+        $attributes = $result['Attributes'];
+        $this->assertEquals($attributes['test'], array('value2'));
+    }
+
+}
-- 
GitLab