]> source.dussan.org Git - nextcloud-server.git/commitdiff
No duplicate address book if shared with user and group and the user is part of the...
authorThomas Müller <thomas.mueller@tmit.eu>
Thu, 28 Jan 2016 16:40:59 +0000 (17:40 +0100)
committerThomas Müller <thomas.mueller@tmit.eu>
Wed, 3 Feb 2016 16:18:22 +0000 (17:18 +0100)
apps/dav/lib/carddav/carddavbackend.php
apps/dav/tests/unit/carddav/carddavbackendtest.php

index 025d46ecdeeb4dac0311cba275c6e3c322e2035d..d490bdb91ec8f0840f8714735a387e729d5c2d18 100644 (file)
@@ -103,7 +103,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
 
                $result = $query->execute();
                while($row = $result->fetch()) {
-                       $addressBooks[] = [
+                       $addressBooks[$row['id']] = [
                                'id'  => $row['id'],
                                'uri' => $row['uri'],
                                'principaluri' => $row['principaluri'],
@@ -133,7 +133,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
                        list(, $name) = URLUtil::splitPath($row['principaluri']);
                        $uri = $row['uri'] . '_shared_by_' . $name;
                        $displayName = $row['displayname'] . "($name)";
-                       $addressBooks[] = [
+                       $addressBooks[$row['id']] = [
                                'id'  => $row['id'],
                                'uri' => $uri,
                                'principaluri' => $principalUri,
@@ -147,7 +147,7 @@ class CardDavBackend implements BackendInterface, SyncSupport {
                }
                $result->closeCursor();
 
-               return $addressBooks;
+               return array_values($addressBooks);
        }
 
        /**
index 0158330a1944736cc0cb5a27fdca95233619ce4f..86bc26b4c0d0c27d2c5ea0af7fdd6919e2f49adb 100644 (file)
@@ -27,7 +27,6 @@ use OCA\DAV\CardDAV\AddressBook;
 use OCA\DAV\CardDAV\CardDavBackend;
 use OCA\DAV\Connector\Sabre\Principal;
 use OCP\IDBConnection;
-use OCP\ILogger;
 use Sabre\DAV\PropPatch;
 use Sabre\VObject\Component\VCard;
 use Sabre\VObject\Property\Text;
@@ -57,19 +56,24 @@ class CardDavBackendTest extends TestCase {
        /** @var string */
        private $dbCardsPropertiesTable = 'cards_properties';
 
-       const UNIT_TEST_USER = 'carddav-unit-test';
+       const UNIT_TEST_USER = 'principals/users/carddav-unit-test';
+       const UNIT_TEST_USER1 = 'principals/users/carddav-unit-test1';
+       const UNIT_TEST_GROUP = 'principals/groups/carddav-unit-test-group';
 
        public function setUp() {
                parent::setUp();
 
                $this->principal = $this->getMockBuilder('OCA\DAV\Connector\Sabre\Principal')
                        ->disableOriginalConstructor()
-                       ->setMethods(['getPrincipalByPath'])
+                       ->setMethods(['getPrincipalByPath', 'getGroupMembership'])
                        ->getMock();
                $this->principal->method('getPrincipalByPath')
                        ->willReturn([
                                'uri' => 'principals/best-friend'
                        ]);
+               $this->principal->method('getGroupMembership')
+                       ->withAnyParameters()
+                       ->willReturn([self::UNIT_TEST_GROUP]);
 
                $this->db = \OC::$server->getDatabaseConnection();
 
@@ -124,6 +128,29 @@ class CardDavBackendTest extends TestCase {
                $this->assertEquals(0, count($books));
        }
 
+       public function testAddressBookSharing() {
+
+               $this->backend->createAddressBook(self::UNIT_TEST_USER, 'Example', []);
+               $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER);
+               $this->assertEquals(1, count($books));
+               $addressBook = new AddressBook($this->backend, $books[0]);
+               $this->backend->updateShares($addressBook, [
+                       [
+                               'href' => 'principal:' . self::UNIT_TEST_USER1,
+                       ],
+                       [
+                               'href' => 'principal:' . self::UNIT_TEST_GROUP,
+                       ]
+               ], []);
+               $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER1);
+               $this->assertEquals(1, count($books));
+
+               // delete the address book
+               $this->backend->deleteAddressBook($books[0]['id']);
+               $books = $this->backend->getAddressBooksForUser(self::UNIT_TEST_USER);
+               $this->assertEquals(0, count($books));
+       }
+
        public function testCardOperations() {
 
                /** @var CardDavBackend | \PHPUnit_Framework_MockObject_MockObject $backend */