From: Gunnar Wrobel
Date: Wed, 29 Dec 2010 09:39:08 +0000 (+0100)
Subject: Add the query infrastructure.
X-Git-Url: https://git.internetallee.de/?a=commitdiff_plain;h=56d55a46ffd1bf487afc61a0708a2a3ce791d5f7;p=horde.git
Add the query infrastructure.
---
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Base.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Base.php
index 859f76016..217e8e51e 100644
--- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Base.php
+++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Base.php
@@ -36,15 +36,25 @@ implements Horde_Kolab_Storage
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;
}
/**
@@ -56,7 +66,8 @@ implements Horde_Kolab_Storage
public function getList()
{
return new Horde_Kolab_Storage_List_Base(
- $this->_master
+ $this->_master,
+ $this->_factory
);
}
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php
index 323496aef..a56a3c6b6 100644
--- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php
+++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Factory.php
@@ -28,6 +28,13 @@
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
@@ -37,7 +44,7 @@ class Horde_Kolab_Storage_Factory
*/
public function create(Horde_Kolab_Storage_Driver $driver)
{
- return new Horde_Kolab_Storage_Base($driver);
+ return new Horde_Kolab_Storage_Base($driver, $this);
}
/**
@@ -57,7 +64,8 @@ class Horde_Kolab_Storage_Factory
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(
@@ -206,4 +214,19 @@ class Horde_Kolab_Storage_Factory
}
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
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder/Type.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder/Type.php
new file mode 100644
index 000000000..2ea37eac4
--- /dev/null
+++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Folder/Type.php
@@ -0,0 +1,75 @@
+
+ * @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
+ * @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
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List.php
index d2eb68bed..a670999f7 100644
--- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List.php
+++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List.php
@@ -26,6 +26,7 @@
* @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.
@@ -41,4 +42,12 @@ interface Horde_Kolab_Storage_List
* 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();
}
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php
index 43eb0b947..82cf680c3 100644
--- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php
+++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Base.php
@@ -36,13 +36,24 @@ implements Horde_Kolab_Storage_List
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;
}
/**
@@ -63,8 +74,47 @@ implements Horde_Kolab_Storage_List
*/
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
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
index 5bcc65b75..074d10d64 100644
--- a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php
+++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Decorator/Log.php
@@ -87,4 +87,35 @@ implements Horde_Kolab_Storage_List
);
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
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Base.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Base.php
new file mode 100644
index 000000000..82125a94b
--- /dev/null
+++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/List/Query/Base.php
@@ -0,0 +1,65 @@
+
+ * @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
+ * @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
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Queriable.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Queriable.php
new file mode 100644
index 000000000..4cf5d450c
--- /dev/null
+++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Queriable.php
@@ -0,0 +1,41 @@
+
+ * @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
+ * @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);
+}
+
diff --git a/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Query.php b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Query.php
new file mode 100644
index 000000000..c353350de
--- /dev/null
+++ b/framework/Kolab_Storage/lib/Horde/Kolab/Storage/Query.php
@@ -0,0 +1,37 @@
+
+ * @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
+ * @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);
+}
+
diff --git a/framework/Kolab_Storage/package.xml b/framework/Kolab_Storage/package.xml
index 8dc40a2d2..c43be12ad 100644
--- a/framework/Kolab_Storage/package.xml
+++ b/framework/Kolab_Storage/package.xml
@@ -31,8 +31,8 @@
jan@horde.org
yes
- 2010-12-22
-
+ 2010-12-28
+
0.4.0
0.1.0
@@ -133,14 +133,17 @@
+
+
+
+
-
@@ -149,6 +152,8 @@
+
+
@@ -433,6 +438,7 @@
+
@@ -441,11 +447,15 @@
+
+
+
+
@@ -551,7 +561,6 @@
-
@@ -560,6 +569,8 @@
+
+
@@ -576,6 +587,7 @@
+
@@ -602,6 +614,7 @@
+
@@ -712,9 +725,12 @@
+
+
+
@@ -786,7 +802,7 @@
alpha
alpha
- 2010-12-22
+ 2010-12-28
LGPL
* Added namespace support (Bug #6691).
diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/TestCase.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/TestCase.php
index 08e0c7490..d70c05686 100644
--- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/TestCase.php
+++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/TestCase.php
@@ -30,10 +30,28 @@
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
);
}
@@ -53,14 +71,6 @@ extends PHPUnit_Framework_TestCase
);
}
- protected function getTwoFolderMock()
- {
- return new Horde_Kolab_Storage_Driver_Mock(
- new Horde_Kolab_Storage_Factory(),
- $this->getTwoFolderAccount()
- );
- }
-
protected function getTwoFolderAccount()
{
return array(
@@ -72,11 +82,21 @@ extends PHPUnit_Framework_TestCase
);
}
- 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
);
}
@@ -111,11 +131,21 @@ extends PHPUnit_Framework_TestCase
);
}
- 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
);
}
@@ -150,6 +180,14 @@ extends PHPUnit_Framework_TestCase
);
}
+ 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();
diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/BaseTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/BaseTest.php
index 438e2a023..d75304b15 100644
--- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/BaseTest.php
+++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/BaseTest.php
@@ -37,6 +37,10 @@ extends Horde_Kolab_Storage_TestCase
{
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
+ );
}
}
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
index de9e136fe..ebec7eff1 100644
--- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Decorator/LogTest.php
+++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Decorator/LogTest.php
@@ -38,7 +38,10 @@ extends Horde_Kolab_Storage_TestCase
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(
diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php
index d3cfd70bf..ecbb3fddc 100644
--- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php
+++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/FactoryTest.php
@@ -152,5 +152,14 @@ extends Horde_Kolab_Storage_TestCase
$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'
+ )
+ );
+ }
}
diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Folder/TypeTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Folder/TypeTest.php
new file mode 100644
index 000000000..ff1722cb9
--- /dev/null
+++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/Folder/TypeTest.php
@@ -0,0 +1,73 @@
+
+ * @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
+ * @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());
+ }
+
+}
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
index 693829a72..efc9a4d8d 100644
--- a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php
+++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/BaseTest.php
@@ -37,13 +37,19 @@ extends Horde_Kolab_Storage_TestCase
{
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()
@@ -52,22 +58,68 @@ extends Horde_Kolab_Storage_TestCase
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'));
+ }
}
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
index 71f3eb8ef..d41762a8d 100644
--- 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
@@ -38,7 +38,7 @@ extends Horde_Kolab_Storage_TestCase
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();
@@ -48,7 +48,7 @@ extends Horde_Kolab_Storage_TestCase
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();
@@ -58,7 +58,7 @@ extends Horde_Kolab_Storage_TestCase
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();
@@ -68,10 +68,32 @@ extends Horde_Kolab_Storage_TestCase
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')
+ );
+ }
}
diff --git a/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Query/BaseTest.php b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Query/BaseTest.php
new file mode 100644
index 000000000..76e389bf2
--- /dev/null
+++ b/framework/Kolab_Storage/test/Horde/Kolab/Storage/Unit/List/Query/BaseTest.php
@@ -0,0 +1,67 @@
+
+ * @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
+ * @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'));
+ }
+}