Improve testing and fix the test of the person class.
authorGunnar Wrobel <p@rdus.de>
Mon, 13 Apr 2009 06:21:41 +0000 (08:21 +0200)
committerGunnar Wrobel <p@rdus.de>
Mon, 13 Apr 2009 07:55:43 +0000 (09:55 +0200)
framework/Kolab_Server/lib/Horde/Kolab/Test/Server.php
framework/Kolab_Server/test/Horde/Kolab/Server/PersonTest.php

index 65abd87..4f7e3bb 100644 (file)
@@ -35,6 +35,13 @@ require_once 'Horde/Autoloader.php';
 class Horde_Kolab_Test_Server extends PHPUnit_Extensions_Story_TestCase
 {
     /**
+     * Uid of added objects. Should be removed on tearDown.
+     *
+     * @var array
+     */
+    public $added;
+
+    /**
      * Handle a "given" step.
      *
      * @param array  &$world    Joined "world" of variables.
@@ -792,4 +799,102 @@ class Horde_Kolab_Test_Server extends PHPUnit_Extensions_Story_TestCase
             }
         }
     }
+
+    protected function fetchByCn($server, $cn)
+    {
+        $cn_result = $server->uidForCn($cn);
+        $this->assertNoError($cn_result);
+
+        $object = $server->fetch($cn_result);
+        $this->assertNoError($object);
+
+        return $object;
+    }
+
+    /**
+     * Assert that creating a new object operation yields some predictable
+     * attribute results.
+     *
+     * @param Horde_Kolab_Server         $server The server the object resides on.
+     * @param array                      $store  The information to save.
+     * @param array                      $fetch  The expected results.
+     *
+     * @return NULL.
+     */
+    protected function assertAdd(Horde_Kolab_Server &$server,
+                                 array $store, array $fetch)
+    {
+        $object = $server->add($store);
+        $this->assertNoError($object);
+
+        $this->added[] = array(&$server, $object->getUid());
+
+        $object = $server->fetch($object->getUid());
+
+        foreach ($fetch as $attribute => $expect) {
+            $this->assertEquals($expect, $object->get($attribute));
+        }
+        return $object;
+    }
+
+    /**
+     * Assert that a save() operation yields some predictable attribute results.
+     *
+     * @param Horde_Kolab_Server_Object $object    The object to work on.
+     * @param Horde_Kolab_Server        $server    The server the object resides on.
+     * @param string                    $attribute The attribute to work on.
+     * @param array                     $sequence  The sequence of values to set and expect.
+     *
+     * @return NULL.
+     */
+    protected function assertSimpleSequence(Horde_Kolab_Server_Object &$object,
+                                            Horde_Kolab_Server &$server,
+                                            $attribute, array $sequence)
+    {
+        foreach ($sequence as $value) {
+            $this->assertStoreFetch($object, $server,
+                                    array($attribute => $step),
+                                    array($attribute => $step));
+        }
+    }
+
+    /**
+     * Assert that a save() operation yields some predictable attribute results.
+     *
+     * @param Horde_Kolab_Server_Object  $object The object to work on.
+     * @param Horde_Kolab_Server         $server The server the object resides on.
+     * @param array                      $store  The information to save.
+     * @param array                      $fetch  The expected results.
+     *
+     * @return NULL.
+     */
+    protected function assertStoreFetch(Horde_Kolab_Server_Object &$object,
+                                        Horde_Kolab_Server &$server,
+                                        array $store, array $fetch)
+    {
+        $result = $object->save($store);
+        $this->assertNoError($result);
+
+        $object = $server->fetch($object->getUid());
+
+        foreach ($fetch as $attribute => $expect) {
+            $this->assertEquals($expect,
+                                $object->get($attribute));
+        }
+    }
+
+    /**
+     * Cleanup function.
+     *
+     * @return NULL.
+     */
+    public function tearDown()
+    {
+        if (isset($this->added)) {
+            foreach ($this->added as $add) {
+                $result = $add[0]->delete($add[1]);
+                $this->assertNoError($result);
+            }
+        }
+    }
 }
index db3c77d..0210872 100644 (file)
@@ -32,6 +32,9 @@ require_once 'Horde/Autoloader.php';
  */
 class Horde_Kolab_Server_PersonTest extends Horde_Kolab_Test_Server
 {
+
+    public $cn = 'Kolab_Server_PersonTest';
+
     /**
      * Objects used within this test
      *
@@ -88,6 +91,14 @@ class Horde_Kolab_Server_PersonTest extends Horde_Kolab_Test_Server
             Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX     => 'Kolab_Server_PersonTest_suffix',
             Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_PersonTest_123',
         ),
+        /* Person for telephone number handling*/
+        array(
+            'type' => 'Horde_Kolab_Server_Object_Person',
+            Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN           => 'Kolab_Server_PersonTest_123456',
+            Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN           => 'Kolab_Server_PersonTest_123456',
+            Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX     => 'Kolab_Server_PersonTest_suffix',
+            Horde_Kolab_Server_Object_Person::ATTRIBUTE_USERPASSWORD => 'Kolab_Server_PersonTest_123456',
+        ),
     );
 
     /**
@@ -180,21 +191,11 @@ class Horde_Kolab_Server_PersonTest extends Horde_Kolab_Test_Server
      */
     public function testModifyPersonSn($server)
     {
-        $result = $server->add($this->objects[2]);
-        $this->assertNoError($result);
-        $cn_result = $server->uidForCn($this->objects[2][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
-        $person = $server->fetch($cn_result);
-        $this->assertEquals($person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN),
-                            $this->objects[2][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
-        $result = $person->save(array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_modified'));
-        $person = $server->fetch($cn_result);
-        $this->assertEquals($person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN),
-                            'Kolab_Server_PersonTest_modified');
-        $result = $server->delete($cn_result);
-        $this->assertNoError($result);
-        $cn_result = $server->uidForCn($this->objects[$add][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
-        $this->assertNoError($cn_result);
-        $this->assertFalse($server->uidForCn($this->objects[$add][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]));
+        $person = $this->assertAdd($server, $this->objects[2],
+                                   array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => $this->objects[2][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]));
+        $this->assertSimpleSequence($person, $server,
+                                    Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN,
+                                    array('modified', 'modified_again'));
     }
 
     /**
@@ -207,12 +208,14 @@ class Horde_Kolab_Server_PersonTest extends Horde_Kolab_Test_Server
      */
     public function testModifyPersonCn($server)
     {
-        $result = $server->add($this->objects[2]);
-        $this->assertNoError($result);
-        $cn_result = $server->uidForCn($this->objects[2][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
-        $person = $server->fetch($cn_result);
-        $this->assertEquals($person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN),
-                            $this->objects[2][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
+        $person = $server->add($this->objects[2]);
+        $this->assertNoError($person);
+
+        $person = $server->fetch($person->getUid());
+
+        $this->assertEquals($this->objects[2][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN],
+                            $person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN));
+
         $result = $person->save(array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN => 'Kolab_Server_PersonTest_äö'));
         $cn_result = $server->uidForCn('Kolab_Server_PersonTest_äö');
         $person = $server->fetch($cn_result);
@@ -220,9 +223,9 @@ class Horde_Kolab_Server_PersonTest extends Horde_Kolab_Test_Server
                             'Kolab_Server_PersonTest_äö');
         $result = $server->delete($cn_result);
         $this->assertNoError($result);
-        $cn_result = $server->uidForCn($this->objects[$add][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
+        $cn_result = $server->uidForCn('Kolab_Server_PersonTest_äö');
         $this->assertNoError($cn_result);
-        $this->assertFalse($server->uidForCn($this->objects[$add][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]));
+        $this->assertFalse($cn_result);
     }
 
     /**
@@ -234,19 +237,15 @@ class Horde_Kolab_Server_PersonTest extends Horde_Kolab_Test_Server
      */
     public function testAddDoubleCnPerson($server)
     {
-        $result = $server->add($this->objects[5]);
-        $this->assertNoError($result);
+        $person = $this->assertAdd($server, $this->objects[5],
+                                   array());
+
         $cn_result = $server->uidForCn($this->objects[5][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN][0]);
         $this->assertNoError($cn_result);
         $dn_parts = Net_LDAP2_Util::ldap_explode_dn($cn_result, array('casefold' => 'lower'));
         $dnpart = Net_LDAP2_Util::unescape_dn_value($dn_parts[0]);
         $this->assertContains(Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN . '=' . $this->objects[5][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN][0],
                               $dnpart[0]);
-        $result = $server->delete($cn_result);
-        $this->assertNoError($result);
-        $cn_result = $server->uidForCn($this->objects[5][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
-        $this->assertNoError($cn_result);
-        $this->assertFalse($server->uidForCn($this->objects[5][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]));
     }
 
     /**
@@ -258,38 +257,25 @@ class Horde_Kolab_Server_PersonTest extends Horde_Kolab_Test_Server
      */
     public function testHandlePersonWithSuffix($server)
     {
-        $result = $server->add($this->objects[6]);
-        $this->assertNoError($result);
-
-        $cn_result = $server->uidForCn($this->objects[6][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
-        $this->assertNoError($cn_result);
-        $person = $server->fetch($cn_result);
-        $this->assertEquals($this->objects[6][Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN],
-                           $person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN));
-        $this->assertEquals($this->objects[6][Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX],
-                           $person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX));
-
-        $person->save(array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_123$123',
-                            Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX => 'Kolab_Server_PersonTest_123$123'));
-
-        $cn_result = $server->uidForCn($this->objects[6][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
-        $this->assertNoError($cn_result);
-        $person = $server->fetch($cn_result);
-        $this->assertEquals('Kolab_Server_PersonTest_123$123',
-                           $person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN));
-        $this->assertEquals('Kolab_Server_PersonTest_123$123',
-                           $person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX));
-
-        $person->save(array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_123$456',
-                            Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX => ''));
-
-        $cn_result = $server->uidForCn($this->objects[6][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
-        $this->assertNoError($cn_result);
-        $person = $server->fetch($cn_result);
-        $this->assertEquals('Kolab_Server_PersonTest_123$456',
-                           $person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN));
-        $this->assertEquals('',
-                           $person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX));
+        $person = $this->assertAdd($server, $this->objects[6],
+                                   array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => $this->objects[6][Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN],
+                                         Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX => $this->objects[6][Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX]));
+        $this->assertStoreFetch($person, $server,
+                                array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_123$123',
+                                      Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX => 'Kolab_Server_PersonTest_123$123'),
+                                array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_123$123',
+                                      Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX => 'Kolab_Server_PersonTest_123$123'));
+
+        $this->assertStoreFetch($person, $server,
+                                array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_123$456',
+                                      Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX => ''),
+                                array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_123$456',
+                                      Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX => ''));
+
+        $this->assertStoreFetch($person, $server,
+                                array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX => 'Kolab_Server_PersonTest_789'),
+                                array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => 'Kolab_Server_PersonTest_123$456',
+                                      Horde_Kolab_Server_Object_Person::ATTRIBUTE_SNSUFFIX => 'Kolab_Server_PersonTest_789'));
 
         try {
             $person->save(array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_SN => '',
@@ -297,12 +283,6 @@ class Horde_Kolab_Server_PersonTest extends Horde_Kolab_Test_Server
         } catch (Horde_Kolab_Server_Object_Exception $e) {
             $this->assertError($e);
         }
-
-        $result = $server->delete($cn_result);
-        $this->assertNoError($result);
-        $cn_result = $server->uidForCn($this->objects[6][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
-        $this->assertNoError($cn_result);
-        $this->assertFalse($server->uidForCn($this->objects[6][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]));
     }
 
     /**
@@ -314,58 +294,10 @@ class Horde_Kolab_Server_PersonTest extends Horde_Kolab_Test_Server
      */
     public function testHandlingAPhoneNumaber($server)
     {
-        $result = $server->add($this->objects[6]);
-        $this->assertNoError($result);
-
-        $cn = $this->objects[6][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN];
-
-        $cn_result = $server->uidForCn($cn);
-        $this->assertNoError($cn_result);
-
-        $person = $server->fetch($cn_result);
-        $this->assertNoError($person);
-
-        $this->assertEquals($person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_TELNO),
-                            '');
-
-        $person->save(array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_TELNO => '123456789'));
-
-        $cn_result = $server->uidForCn($cn);
-        $this->assertNoError($cn_result);
-
-        $person = $server->fetch($cn_result);
-        $this->assertNoError($person);
-
-        $this->assertEquals($person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_TELNO),
-                            '123456789');
-
-        $person->save(array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_TELNO => '1234567890'));
-
-        $cn_result = $server->uidForCn($cn);
-        $this->assertNoError($cn_result);
-
-        $person = $server->fetch($cn_result);
-        $this->assertNoError($person);
-
-        $this->assertEquals($person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_TELNO),
-                            '1234567890');
-
-
-        $person->save(array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_TELNO => ''));
-
-        $cn_result = $server->uidForCn($cn);
-        $this->assertNoError($cn_result);
-
-        $person = $server->fetch($cn_result);
-        $this->assertNoError($person);
-
-        $this->assertEquals($person->get(Horde_Kolab_Server_Object_Person::ATTRIBUTE_TELNO),
-                            '');
-
-        $result = $server->delete($cn_result);
-        $this->assertNoError($result);
-        $cn_result = $server->uidForCn($this->objects[6][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]);
-        $this->assertNoError($cn_result);
-        $this->assertFalse($server->uidForCn($this->objects[6][Horde_Kolab_Server_Object_Person::ATTRIBUTE_CN]));
+        $person = $this->assertAdd($server, $this->objects[7],
+                                   array(Horde_Kolab_Server_Object_Person::ATTRIBUTE_TELNO => ''));
+        $this->assertSimpleSequence($person, $server,
+                                    Horde_Kolab_Server_Object_Person::ATTRIBUTE_TELNO,
+                                    array('123456789', '1234567890', '0'));
     }
 }