private $_master;
/**
+ * The factory for generating additional resources.
+ *
+ * @var Horde_Kolab_Storage_Factory
+ */
+ private $_factory;
+
+ /**
* Constructor.
*
- * @param Horde_Kolab_Storage_Driver $master The primary connection driver.
- * @param string $driver The driver used for the primary storage connection.
- * @param array $params Additional connection parameters.
+ * @param Horde_Kolab_Storage_Driver $master The primary connection driver.
+ * @param Horde_Kolab_Storage_Factory $factory The factory.
+.
*/
- public function __construct(Horde_Kolab_Storage_Driver $master)
- {
- $this->_master = $master;
+ public function __construct(
+ Horde_Kolab_Storage_Driver $master,
+ Horde_Kolab_Storage_Factory $factory
+ ) {
+ $this->_master = $master;
+ $this->_factory = $factory;
}
/**
public function getList()
{
return new Horde_Kolab_Storage_List_Base(
- $this->_master
+ $this->_master,
+ $this->_factory
);
}
class Horde_Kolab_Storage_Factory
{
/**
+ * Folder type instances.
+ *
+ * @var array
+ */
+ private $_folder_types;
+
+ /**
* Create the storage handler.
*
* @param Horde_Kolab_Storage_Driver $driver The required driver for access
*/
public function create(Horde_Kolab_Storage_Driver $driver)
{
- return new Horde_Kolab_Storage_Base($driver);
+ return new Horde_Kolab_Storage_Base($driver, $this);
}
/**
public function createFromParams(array $params)
{
$storage = new Horde_Kolab_Storage_Base(
- $this->createDriverFromParams($params)
+ $this->createDriverFromParams($params),
+ $this
);
if (!empty($params['logger'])) {
$storage = new Horde_Kolab_Storage_Decorator_Log(
}
return new $class($params);
}
+
+ /**
+ * Create a folder type handler.
+ *
+ * @param string $annotation The folder type annotation value.
+ *
+ * @return Horde_Kolab_Storage_Folder_Type The folder type handler.
+ */
+ public function createFoldertype($annotation)
+ {
+ if (!isset($this->_folder_types[$annotation])) {
+ $this->_folder_types[$annotation] = new Horde_Kolab_Storage_Folder_Type($annotation);
+ }
+ return $this->_folder_types[$annotation];
+ }
}
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * Handles folder types.
+ *
+ * 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
+ */
+
+/**
+ * Handles folder types.
+ *
+ * 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
+ */
+class Horde_Kolab_Storage_Folder_Type
+{
+ /**
+ * Folder type.
+ *
+ * @var string
+ */
+ private $_type;
+
+ /**
+ * Default folder?
+ *
+ * @var boolean
+ */
+ private $_default;
+
+ /**
+ * Constructor.
+ *
+ * @param string $annotation The folder type annotation value.
+ */
+ public function __construct($annotation)
+ {
+ $elements = explode('.', $annotation);
+ $this->_type = $elements[0];
+ $this->_default = isset($elements[1]) && $elements[1] == 'default';
+ }
+
+ /**
+ * Return the folder type.
+ *
+ * @return string The folder type.
+ */
+ public function getType()
+ {
+ return $this->_type;
+ }
+
+ /**
+ * Indicates if this is a default folder.
+ *
+ * @return boolean True if it is a default folder.
+ */
+ public function isDefault()
+ {
+ return $this->_default;
+ }
+}
\ No newline at end of file
* @link http://pear.horde.org/index.php?package=Kolab_Storage
*/
interface Horde_Kolab_Storage_List
+extends Horde_Kolab_Storage_Queriable
{
/**
* Returns the list of folders visible to the current user.
* type as values.
*/
public function listTypes();
+
+ /**
+ * Returns the folder type annotation as associative array.
+ *
+ * @return array The list folder types with the folder names as key and the
+ * type handler as values.
+ */
+ public function listFolderTypeAnnotations();
}
private $_driver;
/**
+ * The factory for generating additional resources.
+ *
+ * @var Horde_Kolab_Storage_Factory
+ */
+ private $_factory;
+
+ /**
* Constructor.
*
- * @param Horde_Kolab_Storage_Driver $driver The primary connection driver.
+ * @param Horde_Kolab_Storage_Driver $driver The primary connection driver.
+ * @param Horde_Kolab_Storage_Factory $factory The factory.
*/
- public function __construct(Horde_Kolab_Storage_Driver $driver)
- {
- $this->_driver = $driver;
+ public function __construct(
+ Horde_Kolab_Storage_Driver $driver,
+ Horde_Kolab_Storage_Factory $factory
+ ) {
+ $this->_driver = $driver;
+ $this->_factory = $factory;
}
/**
*/
public function listTypes()
{
- return $this->_driver->listAnnotation(
+ $result = array();
+ $list = $this->listFolderTypeAnnotations();
+ foreach ($list as $folder => $annotation) {
+ $result[$folder] = $annotation->getType();
+ }
+ return $result;
+ }
+
+ /**
+ * Returns the folder type annotation as associative array.
+ *
+ * @return array The list folder types with the folder names as key and the
+ * type handler as values.
+ */
+ public function listFolderTypeAnnotations()
+ {
+ $result = array();
+ $list = $this->_driver->listAnnotation(
'/shared/vendor/kolab/folder-type'
);
+ foreach ($list as $folder => $annotation) {
+ $result[$folder] = $this->_factory->createFolderType($annotation);
+ }
+ return $result;
+ }
+
+ /**
+ * Return the specified query type.
+ *
+ * @param string $name The query name.
+ *
+ * @return Horde_Kolab_Storage_Query A query handler.
+ *
+ * @throws Horde_Kolab_Storage_Exception In case the requested query is not supported.
+ */
+ public function getQuery($name)
+ {
+ $class = 'Horde_Kolab_Storage_List_Query_' . $name;
+ if (class_exists($class)) {
+ return new $class($this);
+ }
+ throw new Horde_Kolab_Storage_Exception(sprintf('No such query "%s"!', $name));
}
}
\ No newline at end of file
);
return $result;
}
+
+ /**
+ * Returns the folder type annotation as associative array.
+ *
+ * @return array The list folder types with the folder names as key and the
+ * type handler as values.
+ */
+ public function listFolderTypeAnnotations()
+ {
+ $this->_logger->info('Listing folder type annotations.');
+ $result = $this->_list->listFolderTypeAnnotations();
+ $this->_logger->info(
+ sprintf('List contained %s folders and annotations.', count($result))
+ );
+ return $result;
+ }
+
+ /**
+ * Return the specified query type.
+ *
+ * @param string $name The query name.
+ *
+ * @return Horde_Kolab_Storage_Query A query handler.
+ *
+ * @throws Horde_Kolab_Storage_Exception In case the requested query is not supported.
+ */
+ public function getQuery($name)
+ {
+ return $this->_list->getQuery($name);
+ }
+
}
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * The basic list query.
+ *
+ * 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 list query.
+ *
+ * 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
+ */
+class Horde_Kolab_Storage_List_Query_Base
+implements Horde_Kolab_Storage_Query
+{
+ /**
+ * The queriable list.
+ *
+ * @var Horde_Kolab_Storage_Queriable
+ */
+ private $_queriable;
+
+ /**
+ * Constructor.
+ *
+ * @param Horde_Kolab_Storage_Queriable $queriable The queriable list.
+ */
+ public function __construct(Horde_Kolab_Storage_Queriable $queriable)
+ {
+ $this->_queriable = $queriable;
+ }
+
+ /**
+ * List all folders of a specific type.
+ *
+ * @param string $type The folder type the listing should be limited to.
+ *
+ * @return array The list of folders.
+ */
+ public function listByType($type)
+ {
+ $result = array();
+ foreach ($this->_queriable->listTypes() as $folder => $folder_type) {
+ if ($folder_type == $type) {
+ $result[] = $folder;
+ }
+ }
+ return $result;
+ }
+}
\ No newline at end of file
--- /dev/null
+<?php
+/**
+ * Marks a queriable class.
+ *
+ * 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
+ */
+
+/**
+ * Marks a queriable class.
+ *
+ * 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_Queriable
+{
+ /**
+ * Return the specified query type.
+ *
+ * @param string $name The query name.
+ *
+ * @return Horde_Kolab_Storage_Query A query handler.
+ *
+ * @throws Horde_Kolab_Storage_Exception In case the requested query is not supported.
+ */
+ public function getQuery($name);
+}
+
--- /dev/null
+<?php
+/**
+ * Represents a query 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
+ */
+
+/**
+ * Represents a query 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
+ * @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_Query
+{
+ /**
+ * Constructor.
+ *
+ * @param Horde_Kolab_Storage_Queriable $queriable The queriable object.
+ */
+ public function __construct(Horde_Kolab_Storage_Queriable $queriable);
+}
+
<email>jan@horde.org</email>
<active>yes</active>
</lead>
- <date>2010-12-22</date>
- <time>06:20:15</time>
+ <date>2010-12-28</date>
+ <time>22:52:37</time>
<version>
<release>0.4.0</release>
<api>0.1.0</api>
<file name="Cached.php" role="php" />
<file name="Namespace.php" role="php" />
<file name="Permission.php" role="php" />
+ <file name="Type.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 -->
+ <dir name="Query">
+ <file name="Base.php" role="php" />
+ </dir> <!-- /lib/Horde/Kolab/Storage/List/Query -->
<file name="Base.php" role="php" />
</dir> <!-- /lib/Horde/Kolab/Storage/List -->
- <file name="#Factory.php#" role="php" />
<file name="Base.php" role="php" />
<file name="Cache.php" role="php" />
<file name="Data.php" role="php" />
<file name="Factory.php" role="php" />
<file name="Folder.php" role="php" />
<file name="List.php" role="php" />
+ <file name="Queriable.php" role="php" />
+ <file name="Query.php" role="php" />
<file name="Translation.php" role="php">
<tasks:replace from="@data_dir@" to="data_dir" type="pear-config" />
</file>
<dir name="Driver">
<dir name="Decorator">
<file name="LogTest.php" role="test" />
+ <file name="TimerTest.php" role="test" />
</dir> <!-- /test/Horde/Kolab/Storage/Unit/Driver/Decorator -->
<file name="CclientTest.php" role="test" />
<file name="ImapTest.php" role="test" />
</dir> <!-- /test/Horde/Kolab/Storage/Unit/Driver -->
<dir name="Folder">
<file name="NamespaceTest.php" role="test" />
+ <file name="TypeTest.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 -->
+ <dir name="Query">
+ <file name="BaseTest.php" role="test" />
+ </dir> <!-- /test/Horde/Kolab/Storage/Unit/List/Query -->
<file name="BaseTest.php" role="test" />
</dir> <!-- /test/Horde/Kolab/Storage/Unit/List -->
<file name="BaseTest.php" role="test" />
<install as="Horde/Kolab/Storage/list.php" name="examples/Horde/Kolab/Storage/list.php" />
<install as="Horde/Kolab/Storage.php" name="lib/Horde/Kolab/Storage.php" />
<install as="Horde/Kolab/Storage_Old.php" name="lib/Horde/Kolab/Storage_Old.php" />
- <install as="Horde/Kolab/Storage/#Factory.php#" name="lib/Horde/Kolab/Storage/#Factory.php#" />
<install as="Horde/Kolab/Storage/Base.php" name="lib/Horde/Kolab/Storage/Base.php" />
<install as="Horde/Kolab/Storage/Cache.php" name="lib/Horde/Kolab/Storage/Cache.php" />
<install as="Horde/Kolab/Storage/Data.php" name="lib/Horde/Kolab/Storage/Data.php" />
<install as="Horde/Kolab/Storage/Factory.php" name="lib/Horde/Kolab/Storage/Factory.php" />
<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/Queriable.php" name="lib/Horde/Kolab/Storage/Queriable.php" />
+ <install as="Horde/Kolab/Storage/Query.php" name="lib/Horde/Kolab/Storage/Query.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/Folder/Cached.php" name="lib/Horde/Kolab/Storage/Folder/Cached.php" />
<install as="Horde/Kolab/Storage/Folder/Namespace.php" name="lib/Horde/Kolab/Storage/Folder/Namespace.php" />
<install as="Horde/Kolab/Storage/Folder/Permission.php" name="lib/Horde/Kolab/Storage/Folder/Permission.php" />
+ <install as="Horde/Kolab/Storage/Folder/Type.php" name="lib/Horde/Kolab/Storage/Folder/Type.php" />
<install as="Horde/Kolab/Storage/Folder/Decorator/Base.php" name="lib/Horde/Kolab/Storage/Folder/Decorator/Base.php" />
<install as="Horde/Kolab/Storage/Folder/Decorator/Trigger.php" name="lib/Horde/Kolab/Storage/Folder/Decorator/Trigger.php" />
<install as="Horde/Kolab/Storage/Folder/Namespace/Config.php" name="lib/Horde/Kolab/Storage/Folder/Namespace/Config.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="Horde/Kolab/Storage/List/Query/Base.php" name="lib/Horde/Kolab/Storage/List/Query/Base.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/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/Driver/Decorator/LogTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/Decorator/LogTest.php" />
+ <install as="Horde/Kolab/Storage/Unit/Driver/Decorator/TimerTest.php" name="test/Horde/Kolab/Storage/Unit/Driver/Decorator/TimerTest.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/Folder/TypeTest.php" name="test/Horde/Kolab/Storage/Unit/Folder/TypeTest.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="Horde/Kolab/Storage/Unit/List/Query/BaseTest.php" name="test/Horde/Kolab/Storage/Unit/List/Query/BaseTest.php" />
<install as="TODO" name="TODO" />
</filelist>
</phprelease>
<release>alpha</release>
<api>alpha</api>
</stability>
- <date>2010-12-22</date>
+ <date>2010-12-28</date>
<license uri="http://www.gnu.org/copyleft/lesser.html">LGPL</license>
<notes>
* Added namespace support (Bug #6691).
class Horde_Kolab_Storage_TestCase
extends PHPUnit_Framework_TestCase
{
- protected function getNullMock()
+ protected function completeFactory($factory)
{
+ if ($factory === null) {
+ return new Horde_Kolab_Storage_Factory();
+ }
+ return $factory;
+ }
+
+ protected function getNullMock($factory = null)
+ {
+ $factory = $this->completeFactory($factory);
return new Horde_Kolab_Storage_Driver_Mock(
- new Horde_Kolab_Storage_Factory()
+ $factory
+ );
+ }
+
+ protected function getNullList()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ return new Horde_Kolab_Storage_List_Base(
+ $this->getNullMock($factory),
+ $factory
);
}
);
}
- protected function getTwoFolderMock()
- {
- return new Horde_Kolab_Storage_Driver_Mock(
- new Horde_Kolab_Storage_Factory(),
- $this->getTwoFolderAccount()
- );
- }
-
protected function getTwoFolderAccount()
{
return array(
);
}
- protected function getAnnotatedMock()
+ protected function getTwoFolderMock($factory = null)
{
+ $factory = $this->completeFactory($factory);
return new Horde_Kolab_Storage_Driver_Mock(
- new Horde_Kolab_Storage_Factory(),
- $this->getAnnotatedAccount()
+ $factory,
+ $this->getTwoFolderAccount()
+ );
+ }
+
+ protected function getTwoFolderList()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ return new Horde_Kolab_Storage_List_Base(
+ $this->getTwoFolderMock($factory),
+ $factory
);
}
);
}
- protected function getGermanAnnotatedMock()
+ protected function getAnnotatedMock($factory = null)
{
+ $factory = $this->completeFactory($factory);
return new Horde_Kolab_Storage_Driver_Mock(
- new Horde_Kolab_Storage_Factory(),
- $this->getGermanAnnotatedAccount()
+ $factory,
+ $this->getAnnotatedAccount()
+ );
+ }
+
+ protected function getAnnotatedList()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ return new Horde_Kolab_Storage_List_Base(
+ $this->getAnnotatedMock($factory),
+ $factory
);
}
);
}
+ protected function getGermanAnnotatedMock()
+ {
+ return new Horde_Kolab_Storage_Driver_Mock(
+ new Horde_Kolab_Storage_Factory(),
+ $this->getGermanAnnotatedAccount()
+ );
+ }
+
protected function getMockLogger()
{
$this->logHandler = new Horde_Log_Handler_Mock();
{
public function testConstruction()
{
- new Horde_Kolab_Storage_Base(new Horde_Kolab_Storage_Driver_Mock(new Horde_Kolab_Storage_Factory()));
+ $factory = new Horde_Kolab_Storage_Factory();
+ new Horde_Kolab_Storage_Base(
+ new Horde_Kolab_Storage_Driver_Mock($factory),
+ $factory
+ );
}
}
public function testListLogsEntry()
{
$storage = new Horde_Kolab_Storage_Decorator_Log(
- new Horde_Kolab_Storage_Base($this->getNullMock()),
+ new Horde_Kolab_Storage_Base(
+ $this->getNullMock(),
+ new Horde_Kolab_Storage_Factory()
+ ),
$this->getMockLogger()
);
$this->assertInstanceOf(
$this->assertLogRegExp('/REQUEST OUT IMAP:.*construct.*/');
}
-
+ public function testCreateTypeReturnsType()
+ {
+ $factory = new Horde_Kolab_Storage_Factory();
+ $this->assertInstanceOf(
+ 'Horde_Kolab_Storage_Folder_Type',
+ $factory->createFolderType(
+ 'event'
+ )
+ );
+ }
}
--- /dev/null
+<?php
+/**
+ * Test the folder type 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 folder type 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_Folder_TypeTest
+extends Horde_Kolab_Storage_TestCase
+{
+ public function testConstruction()
+ {
+ new Horde_Kolab_Storage_Folder_Type('event');
+ }
+
+ public function testTypeEvent()
+ {
+ $type = new Horde_Kolab_Storage_Folder_Type('event');
+ $this->assertEquals('event', $type->getType());
+ }
+
+ public function testTypeContact()
+ {
+ $type = new Horde_Kolab_Storage_Folder_Type('contact');
+ $this->assertEquals('contact', $type->getType());
+ }
+
+ public function testTypeDefaultEvent()
+ {
+ $type = new Horde_Kolab_Storage_Folder_Type('event.default');
+ $this->assertEquals('event', $type->getType());
+ }
+
+ public function testTypeDefaultIsDefault()
+ {
+ $type = new Horde_Kolab_Storage_Folder_Type('contact.default');
+ $this->assertTrue($type->isDefault());
+ }
+
+ public function testNoDefault()
+ {
+ $type = new Horde_Kolab_Storage_Folder_Type('contact');
+ $this->assertFalse($type->isDefault());
+ }
+
+}
{
public function testListReturnsArray()
{
- $list = new Horde_Kolab_Storage_List_Base($this->getNullMock());
+ $list = new Horde_Kolab_Storage_List_Base(
+ $this->getNullMock(),
+ new Horde_Kolab_Storage_Factory()
+ );
$this->assertType('array', $list->listFolders());
}
public function testListReturnsFolders()
{
- $list = new Horde_Kolab_Storage_List_Base($this->getTwoFolderMock());
+ $list = new Horde_Kolab_Storage_List_Base(
+ $this->getTwoFolderMock(),
+ new Horde_Kolab_Storage_Factory()
+ );
$this->assertEquals(
array('INBOX', 'INBOX/a'),
$list->listFolders()
public function testTypeReturnsArray()
{
- $list = new Horde_Kolab_Storage_List_Base($this->getNullMock());
+ $list = new Horde_Kolab_Storage_List_Base(
+ $this->getNullMock(),
+ new Horde_Kolab_Storage_Factory()
+ );
$this->assertType('array', $list->listTypes());
}
public function testTypeReturnsAnnotations()
{
- $list = new Horde_Kolab_Storage_List_Base($this->getAnnotatedMock());
+ $list = new Horde_Kolab_Storage_List_Base(
+ $this->getAnnotatedMock(),
+ new Horde_Kolab_Storage_Factory()
+ );
$this->assertEquals(
array(
- 'INBOX/Calendar' => 'event.default',
- 'INBOX/Contacts' => 'contact.default',
- 'INBOX/Notes' => 'note.default',
- 'INBOX/Tasks' => 'task.default',
+ 'INBOX/Calendar' => 'event',
+ 'INBOX/Contacts' => 'contact',
+ 'INBOX/Notes' => 'note',
+ 'INBOX/Tasks' => 'task',
),
$list->listTypes()
);
}
+ public function testAnnotationsReturnsHandlers()
+ {
+ $list = new Horde_Kolab_Storage_List_Base(
+ $this->getAnnotatedMock(),
+ new Horde_Kolab_Storage_Factory()
+ );
+ foreach ($list->listFolderTypeAnnotations() as $folder => $type) {
+ $this->assertInstanceOf('Horde_Kolab_Storage_Folder_Type', $type);
+ };
+ }
+
+ public function testListQueriable()
+ {
+ $list = new Horde_Kolab_Storage_List_Base(
+ $this->getNullMock(),
+ new Horde_Kolab_Storage_Factory()
+ );
+ $this->assertTrue($list instanceOf Horde_Kolab_Storage_Queriable);
+ }
+
+ /**
+ * @expectedException Horde_Kolab_Storage_Exception
+ */
+ public function testGetQueryForUnsupported()
+ {
+ $list = new Horde_Kolab_Storage_List_Base(
+ $this->getNullMock(),
+ new Horde_Kolab_Storage_Factory()
+ );
+ $list->getQuery('NO_SUCH_QUERY');
+ }
+
+ public function testQueryReturnsQuery()
+ {
+ $list = new Horde_Kolab_Storage_List_Base(
+ $this->getNullMock(),
+ new Horde_Kolab_Storage_Factory()
+ );
+ $this->assertInstanceOf('Horde_Kolab_Storage_Query', $list->getQuery('Base'));
+ }
}
public function testListFolderCount()
{
$list = new Horde_Kolab_Storage_List_Decorator_Log(
- new Horde_Kolab_Storage_List_Base($this->getNullMock()),
+ $this->getNullList(),
$this->getMockLogger()
);
$list->listFolders();
public function testListLogsEntry()
{
$list = new Horde_Kolab_Storage_List_Decorator_Log(
- new Horde_Kolab_Storage_List_Base($this->getTwoFolderMock()),
+ $this->getTwoFolderList(),
$this->getMockLogger()
);
$list->listFolders();
public function testListTypesFolderCount()
{
$list = new Horde_Kolab_Storage_List_Decorator_Log(
- new Horde_Kolab_Storage_List_Base($this->getNullMock()),
+ $this->getNullList(),
$this->getMockLogger()
);
$list->listTypes();
public function testListTypesLogsEntry()
{
$list = new Horde_Kolab_Storage_List_Decorator_Log(
- new Horde_Kolab_Storage_List_Base($this->getAnnotatedMock()),
+ $this->getAnnotatedList(),
$this->getMockLogger()
);
- $list->listtypes();
+ $list->listTypes();
$this->assertLogContains('List contained 4 folders and types.');
}
+
+ public function testListAnnotationsLogsEntry()
+ {
+ $list = new Horde_Kolab_Storage_List_Decorator_Log(
+ $this->getAnnotatedList(),
+ $this->getMockLogger()
+ );
+ $list->listFolderTypeAnnotations();
+ $this->assertLogContains('List contained 4 folders and annotations.');
+ }
+
+ public function testGetQueryReturnsQuery()
+ {
+ $list = new Horde_Kolab_Storage_List_Decorator_Log(
+ $this->getNullList(),
+ $this->getMockLogger()
+ );
+ $this->assertInstanceOf(
+ 'Horde_Kolab_Storage_Query',
+ $list->getQuery('Base')
+ );
+ }
}
--- /dev/null
+<?php
+/**
+ * Test the basic list query.
+ *
+ * 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 list query.
+ *
+ * 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_Query_BaseTest
+extends Horde_Kolab_Storage_TestCase
+{
+ public function testByTypeReturnsArray()
+ {
+ $list = new Horde_Kolab_Storage_List_Base(
+ $this->getNullMock(),
+ new Horde_Kolab_Storage_Factory()
+ );
+ $query = $list->getQuery('Base');
+ $this->assertType('array', $query->listByType('test'));
+ }
+
+ public function testListCalendarsListsCalendars()
+ {
+ $list = new Horde_Kolab_Storage_List_Base(
+ $this->getAnnotatedMock(),
+ new Horde_Kolab_Storage_Factory()
+ );
+ $query = $list->getQuery('Base');
+ $this->assertEquals(array('INBOX/Calendar'), $query->listByType('event'));
+ }
+
+ public function testListTasklistsListsTasklists()
+ {
+ $list = new Horde_Kolab_Storage_List_Base(
+ $this->getAnnotatedMock(),
+ new Horde_Kolab_Storage_Factory()
+ );
+ $query = $list->getQuery('Base');
+ $this->assertEquals(array('INBOX/Tasks'), $query->listByType('task'));
+ }
+}