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')); + } +}