summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--lib/public/contacts.php15
-rw-r--r--tests/lib/public/contacts.php80
2 files changed, 91 insertions, 4 deletions
diff --git a/lib/public/contacts.php b/lib/public/contacts.php
index 36195ef9c24..d14806bd0c4 100644
--- a/lib/public/contacts.php
+++ b/lib/public/contacts.php
@@ -67,7 +67,7 @@ namespace OC {
/**
* @return mixed
*/
- public function isReadOnly();
+ public function getPermissions();
/**
* @param $id
@@ -129,7 +129,7 @@ namespace OCP {
return null;
$address_book = self::$address_books[$address_book_key];
- if ($address_book->isReadOnly())
+ if ($address_book->getPermissions() & \OCP\PERMISSION_DELETE)
return null;
return $address_book->delete($id);
@@ -149,7 +149,7 @@ namespace OCP {
return null;
$address_book = self::$address_books[$address_book_key];
- if ($address_book->isReadOnly())
+ if ($address_book->getPermissions() & \OCP\PERMISSION_CREATE)
return null;
return $address_book->createOrUpdate($properties);
@@ -191,8 +191,15 @@ namespace OCP {
}
/**
+ * removes all registered address book instances
+ */
+ public static function clear() {
+ self::$address_books = array();
+ }
+
+ /**
* @var \OC\IAddressBook[] which holds all registered address books
*/
private static $address_books = array();
}
-} \ No newline at end of file
+}
diff --git a/tests/lib/public/contacts.php b/tests/lib/public/contacts.php
new file mode 100644
index 00000000000..abe0e1f6250
--- /dev/null
+++ b/tests/lib/public/contacts.php
@@ -0,0 +1,80 @@
+<?php
+/**
+ * ownCloud
+ *
+ * @author Thomas Müller
+ * @copyright 2012 Thomas Müller thomas.mueller@tmit.eu
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
+ * License as published by the Free Software Foundation; either
+ * version 3 of the License, or any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU AFFERO GENERAL PUBLIC LICENSE for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+OC::autoload('OCP\Contacts');
+
+class Test_Contacts extends PHPUnit_Framework_TestCase
+{
+
+ public function setUp() {
+
+ OCP\Contacts::clear();
+ }
+
+ public function tearDown() {
+ }
+
+ public function testDisabledIfEmpty() {
+ // pretty simple
+ $this->assertFalse(OCP\Contacts::isEnabled());
+ }
+
+ public function testEnabledAfterRegister() {
+ // create mock for the addressbook
+ $stub = $this->getMock("SimpleAddressBook", array('getKey'));
+
+ // we expect getKey to be called once
+ $stub->expects($this->once())
+ ->method('getKey');
+
+ // not enabled before register
+ $this->assertFalse(OCP\Contacts::isEnabled());
+
+ // register the address book
+ OCP\Contacts::registerAddressBook($stub);
+
+ // contacts api shall be enabled
+ $this->assertTrue(OCP\Contacts::isEnabled());
+ }
+
+ //
+ // TODO: test unregister
+ //
+
+ public function testAddressBookEnumeration() {
+ // create mock for the addressbook
+ $stub = $this->getMock("SimpleAddressBook", array('getKey', 'getDisplayName'));
+
+ // setup return for method calls
+ $stub->expects($this->any())
+ ->method('getKey')
+ ->will($this->returnValue('SIMPLE_ADDRESS_BOOK'));
+ $stub->expects($this->any())
+ ->method('getDisplayName')
+ ->will($this->returnValue('A very simple Addressbook'));
+
+ // register the address book
+ OCP\Contacts::registerAddressBook($stub);
+ $all_books = OCP\Contacts::getAddressBooks();
+
+ $this->assertEquals(1, count($all_books));
+ }
+}