]> source.dussan.org Git - nextcloud-server.git/commitdiff
unit tests updated and new added
authorBjoern Schiessle <bjoern@schiessle.org>
Thu, 27 Oct 2016 10:27:09 +0000 (12:27 +0200)
committerBjoern Schiessle <bjoern@schiessle.org>
Tue, 1 Nov 2016 18:54:41 +0000 (19:54 +0100)
Signed-off-by: Bjoern Schiessle <bjoern@schiessle.org>
apps/files_sharing/lib/Controller/ShareAPIController.php
apps/files_sharing/lib/Controller/ShareesAPIController.php
apps/files_sharing/tests/ApiTest.php
apps/files_sharing/tests/Controller/ShareesAPIControllerTest.php
build/integration/features/provisioning-v1.feature

index ae8165602a6fb35d872ec95e49e42c4f1043f0e1..4f80b8fc966349840e39fd2d1a5868aa55f56738 100644 (file)
@@ -502,7 +502,9 @@ class ShareAPIController extends OCSController {
                        $shares = array_merge($shares, $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_USER, $node, false, -1, 0));
                        $shares = array_merge($shares, $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_GROUP, $node, false, -1, 0));
                        $shares = array_merge($shares, $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_LINK, $node, false, -1, 0));
-                       $shares = array_merge($shares, $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_EMAIL, $node, false, -1, 0));
+                       if($this->shareManager->shareProviderExists(\OCP\Share::SHARE_TYPE_EMAIL)) {
+                               $shares = array_merge($shares, $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_EMAIL, $node, false, -1, 0));
+                       }
                        if ($this->shareManager->outgoingServer2ServerSharesAllowed()) {
                                $shares = array_merge($shares, $this->shareManager->getSharesBy($this->currentUser, \OCP\Share::SHARE_TYPE_REMOTE, $node, false, -1, 0));
                        }
@@ -822,15 +824,18 @@ class ShareAPIController extends OCSController {
                }
 
                try {
-                       $share = $this->shareManager->getShareById('ocMailShare:' . $id);
-                       return $share;
-               } catch (ShareNotFound $e) {
-                       if (!$this->shareManager->outgoingServer2ServerSharesAllowed()) {
-                               throw new ShareNotFound();
+                       if ($this->shareManager->shareProviderExists(\OCP\Share::SHARE_TYPE_EMAIL)) {
+                               $share = $this->shareManager->getShareById('ocMailShare:' . $id);
+                               return $share;
                        }
+               } catch (ShareNotFound $e) {
+                       // Do nothing, just try the other share type
+               }
 
-                       $share = $this->shareManager->getShareById('ocFederatedSharing:' . $id);
+               if (!$this->shareManager->outgoingServer2ServerSharesAllowed()) {
+                       throw new ShareNotFound();
                }
+               $share = $this->shareManager->getShareById('ocFederatedSharing:' . $id);
 
                return $share;
        }
index 06878f04c35fa2c6a33303192f02ffdd017a7c3b..8a9a59d88456d9a0b9f4d1e28b8751efb585d2e4 100644 (file)
@@ -427,8 +427,8 @@ class ShareesAPIController extends OCSController {
 
                $shareTypes = [
                        Share::SHARE_TYPE_USER,
-                       Share::SHARE_TYPE_EMAIL,
-                       Share::SHARE_TYPE_REMOTE
+                       Share::SHARE_TYPE_REMOTE,
+                       Share::SHARE_TYPE_EMAIL
                ];
 
                if ($this->shareManager->allowGroupSharing()) {
@@ -504,12 +504,12 @@ class ShareesAPIController extends OCSController {
                }
 
                // Get remote
-               $remoteResults = ['results' => [], 'exact' => []];
+               $remoteResults = ['results' => [], 'exact' => [], 'exactIdMatch' => false];
                if (in_array(Share::SHARE_TYPE_REMOTE, $shareTypes)) {
                        $remoteResults = $this->getRemote($search);
                }
 
-               $mailResults = ['results' => [], 'exact' => []];
+               $mailResults = ['results' => [], 'exact' => [], 'exactIdMatch' => false];
                if (in_array(Share::SHARE_TYPE_EMAIL, $shareTypes)) {
                        $mailResults = $this->getEmail($search);
                }
index 6ab0cb4e1a67f0a9c199a39f38879be987c96982..540905a7dc9067c646ffb29846cd7b353184365d 100644 (file)
@@ -234,6 +234,7 @@ class ApiTest extends TestCase {
 
        function testEnfoceLinkPassword() {
 
+               $password = md5(time());
                $appConfig = \OC::$server->getAppConfig();
                $appConfig->setValue('core', 'shareapi_enforce_links_password', 'yes');
 
@@ -257,14 +258,14 @@ class ApiTest extends TestCase {
 
                // share with password should succeed
                $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1);
-               $result = $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'false', 'bar');
+               $result = $ocs->createShare($this->folder, \OCP\Constants::PERMISSION_ALL, \OCP\Share::SHARE_TYPE_LINK, null, 'false', $password);
                $ocs->cleanup();
 
                $data = $result->getData();
 
                // setting new password should succeed
                $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1);
-               $ocs->updateShare($data['id'], null, 'bar');
+               $ocs->updateShare($data['id'], null, $password);
                $ocs->cleanup();
 
                // removing password should fail
@@ -887,6 +888,9 @@ class ApiTest extends TestCase {
         * @depends testCreateShareLink
         */
        function testUpdateShare() {
+
+               $password = md5(time());
+
                $node1 = $this->userFolder->get($this->filename);
                $share1 = $this->shareManager->newShare();
                $share1->setNode($node1)
@@ -915,7 +919,7 @@ class ApiTest extends TestCase {
                $this->assertNull($share2->getPassword());
 
                $ocs = $this->createOCS(self::TEST_FILES_SHARING_API_USER1);
-               $ocs->updateShare($share2->getId(), null, 'foo');
+               $ocs->updateShare($share2->getId(), null, $password);
                $ocs->cleanup();
 
                $share2 = $this->shareManager->getShareById('ocinternal:' . $share2->getId());
index 6ee1ff596e4b98709886db40cf272785cd7b3b23..e8ee55d184546f8c62a0def67be7505f0001c6b8 100644 (file)
@@ -771,28 +771,44 @@ class ShareesAPIControllerTest extends TestCase {
                $this->assertCount((int) $reachedEnd, $this->invokePrivate($this->sharees, 'reachedEndFor'));
        }
 
+       /**
+        * @dataProvider dataGetRemote
+        *
+        * @param string $searchTerm
+        * @param array $contacts
+        * @param bool $shareeEnumeration
+        * @param array $expected
+        * @param bool $reachedEnd
+        */
+       public function testGetRemote($searchTerm, $contacts, $shareeEnumeration, $expected, $reachedEnd) {
+               $this->invokePrivate($this->sharees, 'shareeEnumeration', [$shareeEnumeration]);
+               $this->contactsManager->expects($this->any())
+                       ->method('search')
+                       ->with($searchTerm, ['CLOUD', 'FN'])
+                       ->willReturn($contacts);
+
+               $result = $this->invokePrivate($this->sharees, 'getRemote', [$searchTerm]);
+
+               $this->assertEquals($expected, $result);
+               $this->assertCount((int) $reachedEnd, $this->invokePrivate($this->sharees, 'reachedEndFor'));
+       }
+
        public function dataGetRemote() {
                return [
-                       ['test', [], true, [], [], true],
-                       ['test', [], false, [], [], true],
+                       ['test', [], true, ['results' => [], 'exact' => [], 'exactIdMatch' => false], true],
+                       ['test', [], false, ['results' => [], 'exact' => [], 'exactIdMatch' => false], true],
                        [
                                'test@remote',
                                [],
                                true,
-                               [
-                                       ['label' => 'test@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']],
-                               ],
-                               [],
+                               ['results' => [], 'exact' => [['label' => 'test@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']]], 'exactIdMatch' => false],
                                true,
                        ],
                        [
                                'test@remote',
                                [],
                                false,
-                               [
-                                       ['label' => 'test@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']],
-                               ],
-                               [],
+                               ['results' => [], 'exact' => [['label' => 'test@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']]], 'exactIdMatch' => false],
                                true,
                        ],
                        [
@@ -814,10 +830,7 @@ class ShareesAPIControllerTest extends TestCase {
                                        ],
                                ],
                                true,
-                               [],
-                               [
-                                       ['label' => 'User @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']],
-                               ],
+                               ['results' => [['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']]], 'exact' => [], 'exactIdMatch' => false],
                                true,
                        ],
                        [
@@ -839,8 +852,7 @@ class ShareesAPIControllerTest extends TestCase {
                                        ],
                                ],
                                false,
-                               [],
-                               [],
+                               ['results' => [], 'exact' => [], 'exactIdMatch' => false],
                                true,
                        ],
                        [
@@ -862,12 +874,7 @@ class ShareesAPIControllerTest extends TestCase {
                                        ],
                                ],
                                true,
-                               [
-                                       ['label' => 'test@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']],
-                               ],
-                               [
-                                       ['label' => 'User @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']],
-                               ],
+                               ['results' => [['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']]], 'exact' => [['label' => 'test@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']]], 'exactIdMatch' => false],
                                true,
                        ],
                        [
@@ -889,10 +896,7 @@ class ShareesAPIControllerTest extends TestCase {
                                        ],
                                ],
                                false,
-                               [
-                                       ['label' => 'test@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']],
-                               ],
-                               [],
+                               ['results' => [], 'exact' => [['label' => 'test@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'test@remote']]], 'exactIdMatch' => false],
                                true,
                        ],
                        [
@@ -914,10 +918,7 @@ class ShareesAPIControllerTest extends TestCase {
                                        ],
                                ],
                                true,
-                               [
-                                       ['label' => 'User @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']],
-                               ],
-                               [],
+                               ['results' => [], 'exact' => [['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']]], 'exactIdMatch' => true],
                                true,
                        ],
                        [
@@ -939,10 +940,7 @@ class ShareesAPIControllerTest extends TestCase {
                                        ],
                                ],
                                false,
-                               [
-                                       ['label' => 'User @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']],
-                               ],
-                               [],
+                               ['results' => [], 'exact' => [['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'username@localhost', 'server' => 'localhost']]], 'exactIdMatch' => true],
                                true,
                        ],
                        // contact with space
@@ -965,10 +963,7 @@ class ShareesAPIControllerTest extends TestCase {
                                        ],
                                ],
                                false,
-                               [
-                                       ['label' => 'User Name @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'user name@localhost', 'server' => 'localhost']],
-                               ],
-                               [],
+                               ['results' => [], 'exact' => [['label' => 'User Name @ Localhost (user name@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'user name@localhost', 'server' => 'localhost']]], 'exactIdMatch' => true],
                                true,
                        ],
                        // remote with space, no contact
@@ -991,62 +986,57 @@ class ShareesAPIControllerTest extends TestCase {
                                        ],
                                ],
                                false,
-                               [
-                                       ['label' => 'user space@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'user space@remote']],
-                               ],
-                               [],
+                               ['results' => [], 'exact' => [['label' => 'user space@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'user space@remote']]], 'exactIdMatch' => false],
                                true,
                        ],
                ];
        }
 
        /**
-        * @dataProvider dataGetRemote
+        * @dataProvider dataGetEmail
         *
         * @param string $searchTerm
         * @param array $contacts
         * @param bool $shareeEnumeration
-        * @param array $exactExpected
         * @param array $expected
         * @param bool $reachedEnd
         */
-       public function testGetRemote($searchTerm, $contacts, $shareeEnumeration, $exactExpected, $expected, $reachedEnd) {
+       public function testGetEmail($searchTerm, $contacts, $shareeEnumeration, $expected, $reachedEnd) {
                $this->invokePrivate($this->sharees, 'shareeEnumeration', [$shareeEnumeration]);
                $this->contactsManager->expects($this->any())
                        ->method('search')
-                       ->with($searchTerm, ['CLOUD', 'FN'])
+                       ->with($searchTerm, ['EMAIL', 'FN'])
                        ->willReturn($contacts);
 
-               $this->invokePrivate($this->sharees, 'getRemote', [$searchTerm]);
-               $result = $this->invokePrivate($this->sharees, 'result');
+               $result = $this->invokePrivate($this->sharees, 'getEmail', [$searchTerm]);
 
-               $this->assertEquals($exactExpected, $result['exact']['remotes']);
-               $this->assertEquals($expected, $result['remotes']);
+               $this->assertEquals($expected, $result);
                $this->assertCount((int) $reachedEnd, $this->invokePrivate($this->sharees, 'reachedEndFor'));
        }
 
-       public function dataGetEmails() {
+       public function dataGetEmail() {
                return [
-                       ['test', [], true, [], [], true],
-                       ['test', [], false, [], [], true],
+                       ['test', [], true, ['results' => [], 'exact' => [], 'exactIdMatch' => false], true],
+                       ['test', [], false, ['results' => [], 'exact' => [], 'exactIdMatch' => false], true],
                        [
                                'test@remote.com',
                                [],
                                true,
-                               [
-                                       ['label' => 'test@remote.com', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'test@remote.com']],
-                               ],
+                               ['results' => [], 'exact' => [['label' => 'test@remote.com', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'test@remote.com']]], 'exactIdMatch' => false],
+                               true,
+                       ],
+                       [ // no valid email address
+                               'test@remote',
                                [],
                                true,
+                               ['results' => [], 'exact' => [], 'exactIdMatch' => false],
+                               true,
                        ],
                        [
                                'test@remote.com',
                                [],
                                false,
-                               [
-                                       ['label' => 'test@remote.com', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'test@remote.com']],
-                               ],
-                               [],
+                               ['results' => [], 'exact' => [['label' => 'test@remote.com', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'test@remote.com']]], 'exactIdMatch' => false],
                                true,
                        ],
                        [
@@ -1063,15 +1053,12 @@ class ShareesAPIControllerTest extends TestCase {
                                        [
                                                'FN' => 'User @ Localhost',
                                                'EMAIL' => [
-                                                       'username@localhost.com',
+                                                       'username@localhost',
                                                ],
                                        ],
                                ],
                                true,
-                               [],
-                               [
-                                       ['label' => 'User @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'username@localhost.com']],
-                               ],
+                               ['results' => [['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'username@localhost']]], 'exact' => [], 'exactIdMatch' => false],
                                true,
                        ],
                        [
@@ -1088,13 +1075,12 @@ class ShareesAPIControllerTest extends TestCase {
                                        [
                                                'FN' => 'User @ Localhost',
                                                'EMAIL' => [
-                                                       'username@localhost.com',
+                                                       'username@localhost',
                                                ],
                                        ],
                                ],
                                false,
-                               [],
-                               [],
+                               ['results' => [], 'exact' => [], 'exactIdMatch' => false],
                                true,
                        ],
                        [
@@ -1111,17 +1097,12 @@ class ShareesAPIControllerTest extends TestCase {
                                        [
                                                'FN' => 'User @ Localhost',
                                                'EMAIL' => [
-                                                       'username@localhost.com',
+                                                       'username@localhost',
                                                ],
                                        ],
                                ],
                                true,
-                               [
-                                       ['label' => 'test@remote.com', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'test@remote.com']],
-                               ],
-                               [
-                                       ['label' => 'User @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'username@localhost.com']],
-                               ],
+                               ['results' => [['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'username@localhost']]], 'exact' => [['label' => 'test@remote.com', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'test@remote.com']]], 'exactIdMatch' => false],
                                true,
                        ],
                        [
@@ -1138,19 +1119,16 @@ class ShareesAPIControllerTest extends TestCase {
                                        [
                                                'FN' => 'User @ Localhost',
                                                'EMAIL' => [
-                                                       'username@localhost.com',
+                                                       'username@localhost',
                                                ],
                                        ],
                                ],
                                false,
-                               [
-                                       ['label' => 'test@remote.com', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'test@remote.com']],
-                               ],
-                               [],
+                               ['results' => [], 'exact' => [['label' => 'test@remote.com', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'test@remote.com']]], 'exactIdMatch' => false],
                                true,
                        ],
                        [
-                               'username@localhost.com',
+                               'username@localhost',
                                [
                                        [
                                                'FN' => 'User3 @ Localhost',
@@ -1163,19 +1141,16 @@ class ShareesAPIControllerTest extends TestCase {
                                        [
                                                'FN' => 'User @ Localhost',
                                                'EMAIL' => [
-                                                       'username@localhost.com',
+                                                       'username@localhost',
                                                ],
                                        ],
                                ],
                                true,
-                               [
-                                       ['label' => 'User @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'username@localhost.com']],
-                               ],
-                               [],
+                               ['results' => [], 'exact' => [['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'username@localhost']]], 'exactIdMatch' => true],
                                true,
                        ],
                        [
-                               'username@localhost.com',
+                               'username@localhost',
                                [
                                        [
                                                'FN' => 'User3 @ Localhost',
@@ -1188,20 +1163,40 @@ class ShareesAPIControllerTest extends TestCase {
                                        [
                                                'FN' => 'User @ Localhost',
                                                'EMAIL' => [
-                                                       'username@localhost.com',
+                                                       'username@localhost',
                                                ],
                                        ],
                                ],
                                false,
+                               ['results' => [], 'exact' => [['label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'username@localhost']]], 'exactIdMatch' => true],
+                               true,
+                       ],
+                       // contact with space
+                       [
+                               'user name@localhost',
                                [
-                                       ['label' => 'User @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'username@localhost.com']],
+                                       [
+                                               'FN' => 'User3 @ Localhost',
+                                       ],
+                                       [
+                                               'FN' => 'User2 @ Localhost',
+                                               'EMAIL' => [
+                                               ],
+                                       ],
+                                       [
+                                               'FN' => 'User Name @ Localhost',
+                                               'EMAIL' => [
+                                                       'user name@localhost',
+                                               ],
+                                       ],
                                ],
-                               [],
+                               false,
+                               ['results' => [], 'exact' => [['label' => 'User Name @ Localhost (user name@localhost)', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'user name@localhost']]], 'exactIdMatch' => true],
                                true,
                        ],
-                       // Test single email
+                       // remote with space, no contact
                        [
-                               'username@localhost.com',
+                               'user space@remote.com',
                                [
                                        [
                                                'FN' => 'User3 @ Localhost',
@@ -1213,137 +1208,106 @@ class ShareesAPIControllerTest extends TestCase {
                                        ],
                                        [
                                                'FN' => 'User @ Localhost',
-                                               'EMAIL' => 'username@localhost.com',
+                                               'EMAIL' => [
+                                                       'username@localhost',
+                                               ],
                                        ],
                                ],
                                false,
-                               [
-                                       ['label' => 'User @ Localhost', 'value' => ['shareType' => Share::SHARE_TYPE_EMAIL, 'shareWith' => 'username@localhost.com']],
-                               ],
-                               [],
+                               ['results' => [], 'exact' => [], 'exactIdMatch' => false],
                                true,
                        ],
                ];
        }
 
-       /**
-        * @dataProvider dataGetEmails
-        *
-        * @param string $searchTerm
-        * @param array $contacts
-        * @param bool $shareeEnumeration
-        * @param array $exactExpected
-        * @param array $expected
-        * @param bool $reachedEnd
-        */
-       public function testGetEmails($searchTerm, $contacts, $shareeEnumeration, $exactExpected, $expected, $reachedEnd) {
-               $this->invokePrivate($this->sharees, 'shareeEnumeration', [$shareeEnumeration]);
-               $this->contactsManager->expects($this->any())
-                       ->method('search')
-                       ->with($searchTerm, ['FN', 'EMAIL'])
-                       ->willReturn($contacts);
-
-               $this->invokePrivate($this->sharees, 'getEmails', [$searchTerm]);
-               $result = $this->invokePrivate($this->sharees, 'result');
-
-               $this->assertEquals($exactExpected, $result['exact']['emails']);
-               $this->assertEquals($expected, $result['emails']);
-               $this->assertCount((int) $reachedEnd, $this->invokePrivate($this->sharees, 'reachedEndFor'));
-       }
-
        public function dataSearch() {
-               $allTypes = [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_EMAIL, Share::SHARE_TYPE_REMOTE];
+               $allTypes = [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE, Share::SHARE_TYPE_EMAIL];
 
                return [
-                       [[], '', 'yes', true, '', null, $allTypes, 1, 200, false, true, true],
+                       [[], '', 'yes', true, true, $allTypes, false, true, true],
 
                        // Test itemType
                        [[
                                'search' => '',
-                       ], '', 'yes', true, '', null, $allTypes, 1, 200, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
                        [[
                                'search' => 'foobar',
-                       ], '', 'yes', true, 'foobar', null, $allTypes, 1, 200, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
                        [[
                                'search' => 0,
-                       ], '', 'yes', true, '0', null, $allTypes, 1, 200, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
 
                        // Test itemType
                        [[
                                'itemType' => '',
-                       ], '', 'yes', true, '', '', $allTypes, 1, 200, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
                        [[
                                'itemType' => 'folder',
-                       ], '', 'yes', true, '', 'folder', $allTypes, 1, 200, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
                        [[
                                'itemType' => 0,
-                       ], '', 'yes', true, '', '0', $allTypes, 1, 200, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
 
                        // Test shareType
                        [[
-                       ], '', 'yes', true, '', null, $allTypes, 1, 200, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
                        [[
                                'shareType' => 0,
-                       ], '', 'yes', true, '', null, [0], 1, 200, false, true, true],
+                       ], '', 'yes', true, false, [0], false, true, true],
                        [[
                                'shareType' => '0',
-                       ], '', 'yes', true, '', null, [0], 1, 200, false, true, true],
+                       ], '', 'yes', true, false, [0], false, true, true],
                        [[
                                'shareType' => 1,
-                       ], '', 'yes', true, '', null, [1], 1, 200, false, true, true],
+                       ], '', 'yes', true, false, [1], false, true, true],
                        [[
                                'shareType' => 12,
-                       ], '', 'yes', true, '', null, [], 1, 200, false, true, true],
+                       ], '', 'yes', true, false, [], false, true, true],
                        [[
                                'shareType' => 'foobar',
-                       ], '', 'yes', true, '', null, $allTypes, 1, 200, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
                        [[
                                'shareType' => [0, 1, 2],
-                       ], '', 'yes', true, '', null, [0, 1], 1, 200, false, true, true],
+                       ], '', 'yes', false, false, [0, 1], false, true, true],
                        [[
                                'shareType' => [0, 1],
-                       ], '', 'yes', true, '', null, [0, 1], 1, 200, false, true, true],
+                       ], '', 'yes', false, false, [0, 1], false, true, true],
                        [[
                                'shareType' => $allTypes,
-                       ], '', 'yes', true, '', null, $allTypes, 1, 200, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
                        [[
                                'shareType' => $allTypes,
-                       ], '', 'yes', false, '', null, [0, 1, 4], 1, 200, false, true, true],
+                       ], '', 'yes', false, false, [0, 1], false, true, true],
                        [[
                                'shareType' => $allTypes,
-                       ], '', 'yes', true, '', null, [0, 4, 6], 1, 200, false, true, false],
+                       ], '', 'yes', true, false, [0, 6], false, true, false],
                        [[
                                'shareType' => $allTypes,
-                       ], '', 'yes', false, '', null, [0, 4], 1, 200, false, true, false],
+                       ], '', 'yes', false, true, [0, 4], false, true, false],
 
                        // Test pagination
                        [[
                                'page' => 1,
-                       ], '', 'yes', true, '', null, $allTypes, 1, 200, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
                        [[
                                'page' => 10,
-                       ], '', 'yes', true, '', null, $allTypes, 10, 200, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
 
                        // Test perPage
                        [[
                                'perPage' => 1,
-                       ], '', 'yes', true, '', null, $allTypes, 1, 1, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
                        [[
                                'perPage' => 10,
-                       ], '', 'yes', true, '', null, $allTypes, 1, 10, false, true, true],
+                       ], '', 'yes', true, true, $allTypes, false, true, true],
 
                        // Test $shareWithGroupOnly setting
-                       [[], 'no', 'yes',  true, '', null, $allTypes, 1, 200, false, true, true],
-                       [[], 'yes', 'yes', true, '', null, $allTypes, 1, 200, true, true, true],
+                       [[], 'no', 'yes',  true, true, $allTypes, false, true, true],
+                       [[], 'yes', 'yes', true, true, $allTypes, true, true, true],
 
                        // Test $shareeEnumeration setting
-                       [[], 'no', 'yes',  true, '', null, $allTypes, 1, 200, false, true, true],
-                       [[], 'no', 'no', true, '', null, $allTypes, 1, 200, false, false, true],
-
-                       // Test keep case for search
-                       [[
-                               'search' => 'foo@example.com/ownCloud',
-                       ], '', 'yes', true, 'foo@example.com/ownCloud', null, $allTypes, 1, 200, false, true, true],
+                       [[], 'no', 'yes',  true, true, $allTypes, false, true, true],
+                       [[], 'no', 'no', true, true, $allTypes, false, false, true],
                ];
        }
 
@@ -1354,16 +1318,12 @@ class ShareesAPIControllerTest extends TestCase {
         * @param string $apiSetting
         * @param string $enumSetting
         * @param bool $remoteSharingEnabled
-        * @param string $search
-        * @param string $itemType
         * @param array $shareTypes
-        * @param int $page
-        * @param int $perPage
         * @param bool $shareWithGroupOnly
         * @param bool $shareeEnumeration
         * @param bool $allowGroupSharing
         */
-       public function testSearch($getData, $apiSetting, $enumSetting, $remoteSharingEnabled, $search, $itemType, $shareTypes, $page, $perPage, $shareWithGroupOnly, $shareeEnumeration, $allowGroupSharing) {
+       public function testSearch($getData, $apiSetting, $enumSetting, $remoteSharingEnabled, $emailSharingEnabled, $shareTypes, $shareWithGroupOnly, $shareeEnumeration, $allowGroupSharing) {
                $search = isset($getData['search']) ? $getData['search'] : '';
                $itemType = isset($getData['itemType']) ? $getData['itemType'] : null;
                $page = isset($getData['page']) ? $getData['page'] : 1;
@@ -1399,11 +1359,10 @@ class ShareesAPIControllerTest extends TestCase {
                                $this->getMockBuilder('OCP\ILogger')->disableOriginalConstructor()->getMock(),
                                $this->shareManager
                        ])
-                       ->setMethods(array('searchSharees', 'isRemoteSharingAllowed'))
+                       ->setMethods(array('searchSharees', 'isRemoteSharingAllowed', 'shareProviderExists'))
                        ->getMock();
                $sharees->expects($this->once())
                        ->method('searchSharees')
-                       ->with($search, $itemType, $shareTypes, $page, $perPage)
                        ->willReturnCallback(function
                                        ($isearch, $iitemType, $ishareTypes, $ipage, $iperPage)
                                use ($search, $itemType, $shareTypes, $page, $perPage) {
@@ -1411,7 +1370,10 @@ class ShareesAPIControllerTest extends TestCase {
                                // We are doing strict comparisons here, so we can differ 0/'' and null on shareType/itemType
                                $this->assertSame($search, $isearch);
                                $this->assertSame($itemType, $iitemType);
-                               $this->assertSame($shareTypes, $ishareTypes);
+                               $this->assertSame(count($shareTypes), count($ishareTypes));
+                               foreach($shareTypes as $expected) {
+                                       $this->assertTrue(in_array($expected, $ishareTypes));
+                               }
                                $this->assertSame($page, $ipage);
                                $this->assertSame($perPage, $iperPage);
                                return new Http\DataResponse();
@@ -1421,6 +1383,11 @@ class ShareesAPIControllerTest extends TestCase {
                        ->with($itemType)
                        ->willReturn($remoteSharingEnabled);
 
+               $this->shareManager->expects($this->any())
+                       ->method('shareProviderExists')
+                       ->with(\OCP\Share::SHARE_TYPE_EMAIL)
+                       ->willReturn($emailSharingEnabled);
+
                $this->assertInstanceOf(Http\DataResponse::class, $sharees->search($search, $itemType, $page, $perPage, $shareType));
 
                $this->assertSame($shareWithGroupOnly, $this->invokePrivate($sharees, 'shareWithGroupOnly'));
@@ -1519,7 +1486,7 @@ class ShareesAPIControllerTest extends TestCase {
 
        public function dataSearchSharees() {
                return [
-                       ['test', 'folder', [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE], 1, 2, false, [], [], [],
+                       ['test', 'folder', [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE], 1, 2, false, [], [], ['results' => [], 'exact' => [], 'exactIdMatch' => false],
                                [
                                        'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'emails' => []],
                                        'users' => [],
@@ -1527,7 +1494,7 @@ class ShareesAPIControllerTest extends TestCase {
                                        'remotes' => [],
                                        'emails' => [],
                                ], false],
-                       ['test', 'folder', [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE], 1, 2, false, [], [], [],
+                       ['test', 'folder', [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_GROUP, Share::SHARE_TYPE_REMOTE], 1, 2, false, [], [], ['results' => [], 'exact' => [], 'exactIdMatch' => false],
                                [
                                        'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'emails' => []],
                                        'users' => [],
@@ -1541,7 +1508,7 @@ class ShareesAPIControllerTest extends TestCase {
                                ], [
                                        ['label' => 'testgroup1', 'value' => ['shareType' => Share::SHARE_TYPE_GROUP, 'shareWith' => 'testgroup1']],
                                ], [
-                                       ['label' => 'testz@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'testz@remote']],
+                                       'results' => [['label' => 'testz@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'testz@remote']]], 'exact' => [], 'exactIdMatch' => false,
                                ],
                                [
                                        'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'emails' => []],
@@ -1562,7 +1529,7 @@ class ShareesAPIControllerTest extends TestCase {
                                'test', 'folder', [Share::SHARE_TYPE_USER, Share::SHARE_TYPE_REMOTE], 1, 2, false, [
                                        ['label' => 'test One', 'value' => ['shareType' => Share::SHARE_TYPE_USER, 'shareWith' => 'test1']],
                                ], null, [
-                                       ['label' => 'testz@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'testz@remote']],
+                                       'results' => [['label' => 'testz@remote', 'value' => ['shareType' => Share::SHARE_TYPE_REMOTE, 'shareWith' => 'testz@remote']]], 'exact' => [], 'exactIdMatch' => false
                                ],
                                [
                                        'exact' => ['users' => [], 'groups' => [], 'remotes' => [], 'emails' => []],
@@ -1660,14 +1627,11 @@ class ShareesAPIControllerTest extends TestCase {
                                $result['groups'] = $mockedGroupsResult;
                                $this->invokePrivate($sharees, 'result', [$result]);
                        });
+
                $sharees->expects(($mockedRemotesResult === null) ? $this->never() : $this->once())
                        ->method('getRemote')
                        ->with($searchTerm)
-                       ->willReturnCallback(function() use ($sharees, $mockedRemotesResult) {
-                               $result = $this->invokePrivate($sharees, 'result');
-                               $result['remotes'] = $mockedRemotesResult;
-                               $this->invokePrivate($sharees, 'result', [$result]);
-                       });
+                       ->willReturn($mockedRemotesResult);
 
                $ocs = $this->invokePrivate($sharees, 'searchSharees', [$searchTerm, $itemType, $shareTypes, $page, $perPage, $shareWithGroupOnly]);
                $this->assertInstanceOf('\OCP\AppFramework\Http\DataResponse', $ocs);
index 98bf321dc64b057b0a30495764fa68ef7decfa65..9103a71ab9265479c5aeacbba3abff8a5cd2ba8c 100644 (file)
@@ -255,7 +255,7 @@ Feature: provisioning
        Scenario: Delete a user
                Given As an "admin"
                And user "brand-new-user" exists
-               When sending "DELETE" to "/cloud/users/brand-new-user" 
+               When sending "DELETE" to "/cloud/users/brand-new-user"
                Then the OCS status code should be "100"
                And the HTTP status code should be "200"
                And user "brand-new-user" does not exist
@@ -291,6 +291,7 @@ Feature: provisioning
                        | files_trashbin |
                        | files_versions |
                        | provisioning_api |
+                       | sharebymail |
                        | systemtags |
                        | theming |
                        | twofactor_backupcodes |