Start a log decorator for the list handler.
authorGunnar Wrobel <p@rdus.de>
Tue, 21 Dec 2010 20:08:13 +0000 (21:08 +0100)
committerGunnar Wrobel <p@rdus.de>
Tue, 4 Jan 2011 07:54:12 +0000 (08:54 +0100)
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Base.php
framework/Kolab_Storage/lib/Horde/Kolab/Storage/Decorator/Log.php [new file with mode: 0644]
framework/Kolab_Storage/lib/Horde/Kolab/Storage/List.php [new file with mode: 0644]
framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php [new file with mode: 0644]
framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php [new file with mode: 0644]
framework/Kolab_Storage/package.xml
framework/Kolab_Storage/test/Horde/Kolab/Storage/TestCase.php
framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Decorator/LogTest.php [new file with mode: 0644]
framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php [new file with mode: 0644]
framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Decorator/LogTest.php [new file with mode: 0644]

index e427b84..859f760 100644 (file)
@@ -26,6 +26,7 @@
  * @link     http://pear.horde.org/index.php?package=Kolab_Storage
  */
 class Horde_Kolab_Storage_Base
+implements Horde_Kolab_Storage
 {
     /**
      * The master Kolab storage system.
@@ -47,14 +48,44 @@ class Horde_Kolab_Storage_Base
     }
 
     /**
-     * Returns the list of folders visible to the current user.
+     * Get the folder list object.
      *
-     * @return array The list of IMAP folders, represented as
-     *               a list of strings.
+     * @return Horde_Kolab_Storage_List The handler for the list of folders
+     *                                  present in the Kolab backend.
      */
-    public function listFolders()
+    public function getList()
+    {
+        return new Horde_Kolab_Storage_List_Base(
+            $this->_master
+        );
+    }
+
+    /**
+     * Get a Folder object.
+     *
+     * @param string $folder The folder name.
+     *
+     * @return Horde_Kolab_Storage_Folder The Kolab folder object.
+     */
+    public function getFolder($folder)
+    {
+        return new Horde_Kolab_Storage_Folder_Base(
+            $this, $this->_master, $folder
+        );
+    }
+
+    /**
+     * Return a data handler for accessing data in the specified
+     * folder.
+     *
+     * @param string $folder The name of the folder.
+     * @param string $type   The type of data we want to
+     *                       access in the folder.
+     *
+     * @return Horde_Kolab_Data The data object.
+     */
+    public function getData($folder, $type)
     {
-        return $this->_master->getMailboxes();
     }
 
 }
\ No newline at end of file
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Decorator/Log.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Decorator/Log.php
new file mode 100644 (file)
index 0000000..29b9c82
--- /dev/null
@@ -0,0 +1,99 @@
+<?php
+/**
+ * A log decorator for the Kolab storage handler.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package  Kolab_Storage
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+
+/**
+ * A log decorator for the Kolab storage handler.
+ *
+ * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package  Kolab_Storage
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+class Horde_Kolab_Storage_Decorator_Log
+implements Horde_Kolab_Storage
+{
+    /**
+     * The decorated storage handler.
+     *
+     * @var Horde_Kolab_Storage
+     */
+    private $_storage;
+
+    /**
+     * A log handler.
+     *
+     * @var mixed
+     */
+    private $_logger;
+
+    /**
+     * Constructor.
+     *
+     * @param Horde_Kolab_Storage $storage The storage handler.
+     * @param mixed               $logger  The log handler. This instance
+     *                                     must provide the info() method.
+     */
+    public function __construct(Horde_Kolab_Storage $storage, $logger)
+    {
+        $this->_storage = $storage;
+        $this->_logger = $logger;
+    }
+
+    /**
+     * Get the folder list object.
+     *
+     * @return Horde_Kolab_Storage_List The handler for the list of folders
+     *                                  present in the Kolab backend.
+     */
+    public function getList()
+    {
+        return new Horde_Kolab_Storage_List_Decorator_Log(
+            $this->_storage->getList(),
+            $this->_logger
+        );
+    }
+
+    /**
+     * Get a Folder object.
+     *
+     * @param string $folder The folder name.
+     *
+     * @return Horde_Kolab_Storage_Folder The Kolab folder object.
+     */
+    public function getFolder($folder)
+    {
+        return $this->_storage->getFolder();
+    }
+
+    /**
+     * Return a data handler for accessing data in the specified
+     * folder.
+     *
+     * @param string $folder The name of the folder.
+     * @param string $type   The type of data we want to
+     *                       access in the folder.
+     *
+     * @return Horde_Kolab_Data The data object.
+     */
+    public function getData($folder, $type)
+    {
+        return $this->_storage->getData();
+    }
+
+}
\ No newline at end of file
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List.php
new file mode 100644 (file)
index 0000000..fa6f0fd
--- /dev/null
@@ -0,0 +1,37 @@
+<?php
+/**
+ * The interface describing a list of Kolab folders.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package  Kolab_Storage
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+
+/**
+ * The interface describing a list of Kolab folders.
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package  Kolab_Storage
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+interface Horde_Kolab_Storage_List
+{
+    /**
+     * Returns the list of folders visible to the current user.
+     *
+     * @return array The list of folders, represented as strings.
+     */
+    public function listFolders();
+
+}
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php
new file mode 100644 (file)
index 0000000..805e4df
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * The basic handler for accessing folder lists from Kolab storage.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package  Kolab_Storage
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+
+/**
+ * The basic handler for accessing folder lists from Kolab storage.
+ *
+ * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package  Kolab_Storage
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+class Horde_Kolab_Storage_List_Base
+implements Horde_Kolab_Storage_List
+{
+    /**
+     * The driver for accessing the Kolab storage system.
+     *
+     * @var Horde_Kolab_Storage_Driver
+     */
+    private $_driver;
+
+    /**
+     * Constructor.
+     *
+     * @param Horde_Kolab_Storage_Driver $driver The primary connection driver.
+     */
+    public function __construct(Horde_Kolab_Storage_Driver $driver)
+    {
+        $this->_driver = $driver;
+    }
+
+    /**
+     * Returns the list of folders visible to the current user.
+     *
+     * @return array The list of folders, represented as a list of strings.
+     */
+    public function listFolders()
+    {
+        return $this->_driver->getMailboxes();
+    }
+}
\ No newline at end of file
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php
new file mode 100644 (file)
index 0000000..cfd77bb
--- /dev/null
@@ -0,0 +1,74 @@
+<?php
+/**
+ * The log decorator for folder lists from Kolab storage.
+ *
+ * PHP version 5
+ *
+ * @category Kolab
+ * @package  Kolab_Storage
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+
+/**
+ * The log decorator for folder lists from Kolab storage.
+ *
+ * Copyright 2004-2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category Kolab
+ * @package  Kolab_Storage
+ * @author   Gunnar Wrobel <wrobel@pardus.de>
+ * @license  http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link     http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+class Horde_Kolab_Storage_List_Decorator_Log
+implements Horde_Kolab_Storage_List
+{
+    /**
+     * Decorated list handler.
+     *
+     * @var Horde_Kolab_Storage_List
+     */
+    private $_list;
+
+    /**
+     * A log handler.
+     *
+     * @var mixed
+     */
+    private $_logger;
+
+    /**
+     * Constructor.
+     *
+     * @param Horde_Kolab_Storage_List $list   The original list handler.
+     * @param mixed                    $logger The log handler. This instance
+     *                                         must provide the info() method.
+     */
+    public function __construct(
+        Horde_Kolab_Storage_List $list,
+        $logger
+    ) {
+        $this->_list = $list;
+        $this->_logger = $logger;
+    }
+
+    /**
+     * Returns the list of folders visible to the current user.
+     *
+     * @return array The list of folders, represented as a list of strings.
+     */
+    public function listFolders()
+    {
+        $this->_logger->info('Listing folders.');
+        $result = $this->_list->listFolders();
+        $this->_logger->info(
+            sprintf('List contained %s folders.', count($result))
+        );
+        return $result;
+    }
+}
\ No newline at end of file
index e266280..a3a74c0 100644 (file)
@@ -31,8 +31,8 @@
   <email>jan@horde.org</email>
   <active>yes</active>
  </lead>
- <date>2010-12-16</date>
- <time>17:00:56</time>
+ <date>2010-12-21</date>
+ <time>20:59:39</time>
  <version>
   <release>0.4.0</release>
   <api>0.1.0</api>
@@ -73,6 +73,9 @@
     <dir name="Horde">
      <dir name="Kolab">
       <dir name="Storage">
+       <dir name="Decorator">
+        <file name="Log.php" role="php" />
+       </dir> <!-- /lib/Horde/Kolab/Storage/Decorator -->
        <dir name="Driver">
         <dir name="Decorator">
          <file name="Base.php" role="php" />
         <file name="Permission.php" role="php" />
        </dir> <!-- /lib/Horde/Kolab/Storage/Folder -->
        <dir name="List">
+        <dir name="Decorator">
+         <file name="Log.php" role="php" />
+        </dir> <!-- /lib/Horde/Kolab/Storage/List/Decorator -->
         <file name="Base.php" role="php" />
        </dir> <!-- /lib/Horde/Kolab/Storage/List -->
        <file name="Base.php" role="php" />
        <file name="List.php" role="php" />
        <file name="Translation.php" role="php">
         <tasks:replace from="@data_dir@" to="data_dir" type="pear-config" />
-        <tasks:replace from="@data_dir@" to="data_dir" type="pear-config" />
        </file>
       </dir> <!-- /lib/Horde/Kolab/Storage -->
       <file name="Storage.php" role="php" />
         <file name="DriverTest.php" role="test" />
        </dir> <!-- /test/Horde/Kolab/Storage/Server -->
        <dir name="Unit">
+        <dir name="Decorator">
+         <file name="LogTest.php" role="test" />
+        </dir> <!-- /test/Horde/Kolab/Storage/Unit/Decorator -->
         <dir name="Driver">
          <file name="CclientTest.php" role="test" />
          <file name="ImapTest.php" role="test" />
          <file name="MockTest.php" role="test" />
          <file name="PearTest.php" role="test" />
         </dir> <!-- /test/Horde/Kolab/Storage/Unit/Driver -->
+        <dir name="Folder">
+         <file name="NamespaceTest.php" role="test" />
+        </dir> <!-- /test/Horde/Kolab/Storage/Unit/Folder -->
+        <dir name="List">
+         <dir name="Decorator">
+          <file name="LogTest.php" role="test" />
+         </dir> <!-- /test/Horde/Kolab/Storage/Unit/List/Decorator -->
+         <file name="BaseTest.php" role="test" />
+        </dir> <!-- /test/Horde/Kolab/Storage/Unit/List -->
         <file name="BaseTest.php" role="test" />
         <file name="FactoryTest.php" role="test" />
        </dir> <!-- /test/Horde/Kolab/Storage/Unit -->
        <file name="conf.php.dist" role="test" />
        <file name="DataTest.php" role="test" />
        <file name="FolderTest.php" role="test" />
-       <file name="NamespaceTest.php" role="test" />
        <file name="PermissionTest.php" role="test" />
        <file name="phpunit.xml" role="test" />
        <file name="Scenario.php" role="test" />
    <install as="Horde/Kolab/Storage/Folder.php" name="lib/Horde/Kolab/Storage/Folder.php" />
    <install as="Horde/Kolab/Storage/List.php" name="lib/Horde/Kolab/Storage/List.php" />
    <install as="Horde/Kolab/Storage/Translation.php" name="lib/Horde/Kolab/Storage/Translation.php" />
+   <install as="Horde/Kolab/Storage/Decorator/Log.php" name="lib/Horde/Kolab/Storage/Decorator/Log.php" />
    <install as="Horde/Kolab/Storage/Driver/Base.php" name="lib/Horde/Kolab/Storage/Driver/Base.php" />
    <install as="Horde/Kolab/Storage/Driver/Cclient.php" name="lib/Horde/Kolab/Storage/Driver/Cclient.php" />
    <install as="Horde/Kolab/Storage/Driver/Imap.php" name="lib/Horde/Kolab/Storage/Driver/Imap.php" />
    <install as="Horde/Kolab/Storage/Folder/Permission/Element/Guest.php" name="lib/Horde/Kolab/Storage/Folder/Permission/Element/Guest.php" />
    <install as="Horde/Kolab/Storage/Folder/Permission/Element/User.php" name="lib/Horde/Kolab/Storage/Folder/Permission/Element/User.php" />
    <install as="Horde/Kolab/Storage/List/Base.php" name="lib/Horde/Kolab/Storage/List/Base.php" />
+   <install as="Horde/Kolab/Storage/List/Decorator/Log.php" name="lib/Horde/Kolab/Storage/List/Decorator/Log.php" />
    <install as="locale/Horde_Kolab_Storage.pot" name="locale/Horde_Kolab_Storage.pot" />
    <install as="locale/ar/LC_MESSAGES/Horde_Kolab_Storage.mo" name="locale/ar/LC_MESSAGES/Horde_Kolab_Storage.mo" />
    <install as="locale/ar/LC_MESSAGES/Horde_Kolab_Storage.po" name="locale/ar/LC_MESSAGES/Horde_Kolab_Storage.po" />
    <install as="Horde/Kolab/Storage/conf.php.dist" name="test/Horde/Kolab/Storage/conf.php.dist" />
    <install as="Horde/Kolab/Storage/DataTest.php" name="test/Horde/Kolab/Storage/DataTest.php" />
    <install as="Horde/Kolab/Storage/FolderTest.php" name="test/Horde/Kolab/Storage/FolderTest.php" />
-   <install as="Horde/Kolab/Storage/NamespaceTest.php" name="test/Horde/Kolab/Storage/NamespaceTest.php" />
    <install as="Horde/Kolab/Storage/PermissionTest.php" name="test/Horde/Kolab/Storage/PermissionTest.php" />
    <install as="Horde/Kolab/Storage/phpunit.xml" name="test/Horde/Kolab/Storage/phpunit.xml" />
    <install as="Horde/Kolab/Storage/Scenario.php" name="test/Horde/Kolab/Storage/Scenario.php" />
    <install as="Horde/Kolab/Storage/Server/DriverTest.php" name="test/Horde/Kolab/Storage/Server/DriverTest.php" />
    <install as="Horde/Kolab/Storage/Unit/BaseTest.php" name="test/Horde/Kolab/Storage/Unit/BaseTest.php" />
    <install as="Horde/Kolab/Storage/Unit/FactoryTest.php" name="test/Horde/Kolab/Storage/Unit/FactoryTest.php" />
+   <install as="Horde/Kolab/Storage/Unit/Decorator/LogTest.php" name="test/Horde/Kolab/Storage/Unit/Decorator/LogTest.php" />
    <install as="Horde/Kolab/Storage/Unit/Driver/CclientTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/CclientTest.php" />
    <install as="Horde/Kolab/Storage/Unit/Driver/ImapTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/ImapTest.php" />
    <install as="Horde/Kolab/Storage/Unit/Driver/MockTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/MockTest.php" />
    <install as="Horde/Kolab/Storage/Unit/Driver/PearTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/PearTest.php" />
+   <install as="Horde/Kolab/Storage/Unit/Folder/NamespaceTest.php" name="test/Horde/Kolab/Storage/Unit/Folder/NamespaceTest.php" />
+   <install as="Horde/Kolab/Storage/Unit/List/BaseTest.php" name="test/Horde/Kolab/Storage/Unit/List/BaseTest.php" />
+   <install as="Horde/Kolab/Storage/Unit/List/Decorator/LogTest.php" name="test/Horde/Kolab/Storage/Unit/List/Decorator/LogTest.php" />
    <install as="TODO" name="TODO" />
   </filelist>
  </phprelease>
     <release>alpha</release>
     <api>alpha</api>
    </stability>
-   <date>2010-12-16</date>
+   <date>2010-12-21</date>
    <license uri="http://www.gnu.org/copyleft/lesser.html">LGPL</license>
    <notes>
 * Added namespace support (Bug #6691).
index d890ce0..12ca1f2 100644 (file)
 class Horde_Kolab_Storage_TestCase
 extends PHPUnit_Framework_TestCase
 {
+    protected function getNullMock()
+    {
+        return new Horde_Kolab_Storage_Driver_Mock(
+            new Horde_Kolab_Storage_Factory()
+        );
+    }
+
+    protected function getEmptyMock()
+    {
+        return new Horde_Kolab_Storage_Driver_Mock(
+            new Horde_Kolab_Storage_Factory(),
+            $this->getEmptyAccount()
+        );
+    }
+
+    protected function getEmptyAccount()
+    {
+        return array(
+            'username' => 'test@example.com',
+            'data' => array()
+        );
+    }
+
+    protected function getTwoFolderMock()
+    {
+        return new Horde_Kolab_Storage_Driver_Mock(
+            new Horde_Kolab_Storage_Factory(),
+            $this->getTwoFolderAccount()
+        );
+    }
+
+    protected function getTwoFolderAccount()
+    {
+        return array(
+            'username' => 'test@example.com',
+            'data' => array(
+                'user/test' => null,
+                'user/test/a' => null
+            )
+        );
+    }
+
+    protected function getMockLogger()
+    {
+        $this->logHandler = new Horde_Log_Handler_Mock();
+        return new Horde_Log_Logger($this->logHandler);
+    }
+
+    protected function assertLogCount($count)
+    {
+        $this->assertEquals(count($this->logHandler->events), $count);
+    }
+
+    protected function assertLogContains($message)
+    {
+        $found = false;
+        foreach ($this->logHandler->events as $event) {
+            if (strstr($event['message'], $message) !== false) {
+                $found = true;
+                break;
+            }
+        }
+        $this->assertTrue($found);
+    }
 }
diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Decorator/LogTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Decorator/LogTest.php
new file mode 100644 (file)
index 0000000..de9e136
--- /dev/null
@@ -0,0 +1,49 @@
+<?php
+/**
+ * Test the log decorator for the storage handler.
+ *
+ * PHP version 5
+ *
+ * @category   Kolab
+ * @package    Kolab_Storage
+ * @subpackage UnitTests
+ * @author     Gunnar Wrobel <wrobel@pardus.de>
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link       http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../../Autoload.php';
+
+/**
+ * Test the log decorator for the storage handler.
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category   Kolab
+ * @package    Kolab_Storage
+ * @subpackage UnitTests
+ * @author     Gunnar Wrobel <wrobel@pardus.de>
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link       http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+class Horde_Kolab_Storage_Unit_Decorator_LogTest
+extends Horde_Kolab_Storage_TestCase
+{
+    public function testListLogsEntry()
+    {
+        $storage = new Horde_Kolab_Storage_Decorator_Log(
+            new Horde_Kolab_Storage_Base($this->getNullMock()),
+            $this->getMockLogger()
+        );
+        $this->assertInstanceOf(
+            'Horde_Kolab_Storage_List_Decorator_Log',
+            $storage->getList()
+        );
+    }
+}
diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php
new file mode 100644 (file)
index 0000000..dc27dbe
--- /dev/null
@@ -0,0 +1,52 @@
+<?php
+/**
+ * Test the basic folder list handler.
+ *
+ * PHP version 5
+ *
+ * @category   Kolab
+ * @package    Kolab_Storage
+ * @subpackage UnitTests
+ * @author     Gunnar Wrobel <wrobel@pardus.de>
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link       http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../../Autoload.php';
+
+/**
+ * Test the basic folder list handler.
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category   Kolab
+ * @package    Kolab_Storage
+ * @subpackage UnitTests
+ * @author     Gunnar Wrobel <wrobel@pardus.de>
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link       http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+class Horde_Kolab_Storage_Unit_List_BaseTest
+extends Horde_Kolab_Storage_TestCase
+{
+    public function testListReturnsArray()
+    {
+        $list = new Horde_Kolab_Storage_List_Base($this->getNullMock());
+        $this->assertType('array', $list->listFolders());
+    }
+
+    public function testListReturnsFolders()
+    {
+        $list = new Horde_Kolab_Storage_List_Base($this->getTwoFolderMock());
+        $this->assertEquals(
+            array('INBOX', 'INBOX/a'),
+            $list->listFolders()
+        );
+    }
+}
diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Decorator/LogTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Decorator/LogTest.php
new file mode 100644 (file)
index 0000000..ab26a02
--- /dev/null
@@ -0,0 +1,57 @@
+<?php
+/**
+ * Test the folder list log decorator.
+ *
+ * PHP version 5
+ *
+ * @category   Kolab
+ * @package    Kolab_Storage
+ * @subpackage UnitTests
+ * @author     Gunnar Wrobel <wrobel@pardus.de>
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link       http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+
+/**
+ * Prepare the test setup.
+ */
+require_once dirname(__FILE__) . '/../../../Autoload.php';
+
+/**
+ * Test the folder list log decorator.
+ *
+ * Copyright 2010 The Horde Project (http://www.horde.org/)
+ *
+ * See the enclosed file COPYING for license information (LGPL). If you
+ * did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
+ *
+ * @category   Kolab
+ * @package    Kolab_Storage
+ * @subpackage UnitTests
+ * @author     Gunnar Wrobel <wrobel@pardus.de>
+ * @license    http://www.fsf.org/copyleft/lgpl.html LGPL
+ * @link       http://pear.horde.org/index.php?package=Kolab_Storage
+ */
+class Horde_Kolab_Storage_Unit_List_Decorator_LogTest
+extends Horde_Kolab_Storage_TestCase
+{
+    public function testListLogsEntry()
+    {
+        $list = new Horde_Kolab_Storage_List_Decorator_Log(
+            new Horde_Kolab_Storage_List_Base($this->getNullMock()),
+            $this->getMockLogger()
+        );
+        $list->listFolders();
+        $this->assertLogCount(2);
+    }
+
+    public function testListFolderCount()
+    {
+        $list = new Horde_Kolab_Storage_List_Decorator_Log(
+            new Horde_Kolab_Storage_List_Base($this->getTwoFolderMock()),
+            $this->getMockLogger()
+        );
+        $list->listFolders();
+        $this->assertLogContains('List contained 2 folders.');
+    }
+}