diff options
author | Lukas Reschke <lukas@statuscode.ch> | 2017-09-15 15:58:04 +0200 |
---|---|---|
committer | Lukas Reschke <lukas@statuscode.ch> | 2017-09-15 15:58:04 +0200 |
commit | 705432ca6f70b9bcc51132b304ca0ff0a5af0d10 (patch) | |
tree | dc3f76602b0b3cbba74e1ae019c68c23bc8b1f60 /tests | |
parent | 6d02fe06c671f788ef548fd90b59816ca047e689 (diff) | |
download | nextcloud-server-705432ca6f70b9bcc51132b304ca0ff0a5af0d10.tar.gz nextcloud-server-705432ca6f70b9bcc51132b304ca0ff0a5af0d10.zip |
Add filter for `shareapi_allow_share_dialog_user_enumeration`
This adjusts the contacts menu to also support searching by email address which is relevant in scenarios where no UID is known such as LDAP, etc.
Furthermore, if `shareapi_allow_share_dialog_user_enumeration` is disabled only results are shown that match the full user ID or email address.
Signed-off-by: Lukas Reschke <lukas@statuscode.ch>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php | 157 |
1 files changed, 125 insertions, 32 deletions
diff --git a/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php b/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php index 360f117ed7a..cf801396cb1 100644 --- a/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php +++ b/tests/lib/Contacts/ContactsMenu/ContactsStoreTest.php @@ -1,9 +1,10 @@ <?php - /** * @copyright 2017 Christoph Wurst <christoph@winzerhof-wurst.at> + * @copyright 2017 Lukas Reschke <lukas@statuscode.ch> * * @author 2017 Christoph Wurst <christoph@winzerhof-wurst.at> + * @author 2017 Lukas Reschke <lukas@statuscode.ch> * * @license GNU AGPL version 3 or any later version * @@ -34,19 +35,14 @@ use PHPUnit_Framework_MockObject_MockObject; use Test\TestCase; class ContactsStoreTest extends TestCase { - /** @var ContactsStore */ private $contactsStore; - /** @var IManager|PHPUnit_Framework_MockObject_MockObject */ private $contactsManager; - /** @var IUserManager|PHPUnit_Framework_MockObject_MockObject */ private $userManager; - /** @var IGroupManager|PHPUnit_Framework_MockObject_MockObject */ private $groupManager; - /** @var IConfig|PHPUnit_Framework_MockObject_MockObject */ private $config; @@ -54,21 +50,18 @@ class ContactsStoreTest extends TestCase { parent::setUp(); $this->contactsManager = $this->createMock(IManager::class); - $this->userManager = $this->createMock(IUserManager::class); - $this->groupManager = $this->createMock(IGroupManager::class); - $this->config = $this->createMock(IConfig::class); - $this->contactsStore = new ContactsStore($this->contactsManager, $this->config, $this->userManager, $this->groupManager); } public function testGetContactsWithoutFilter() { + /** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */ $user = $this->createMock(IUser::class); $this->contactsManager->expects($this->once()) ->method('search') - ->with($this->equalTo(''), $this->equalTo(['FN'])) + ->with($this->equalTo(''), $this->equalTo(['FN', 'EMAIL'])) ->willReturn([ [ 'UID' => 123, @@ -94,10 +87,11 @@ class ContactsStoreTest extends TestCase { } public function testGetContactsHidesOwnEntry() { + /** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */ $user = $this->createMock(IUser::class); $this->contactsManager->expects($this->once()) ->method('search') - ->with($this->equalTo(''), $this->equalTo(['FN'])) + ->with($this->equalTo(''), $this->equalTo(['FN', 'EMAIL'])) ->willReturn([ [ 'UID' => 'user123', @@ -120,10 +114,11 @@ class ContactsStoreTest extends TestCase { } public function testGetContactsWithoutBinaryImage() { + /** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */ $user = $this->createMock(IUser::class); $this->contactsManager->expects($this->once()) ->method('search') - ->with($this->equalTo(''), $this->equalTo(['FN'])) + ->with($this->equalTo(''), $this->equalTo(['FN', 'EMAIL'])) ->willReturn([ [ 'UID' => 123, @@ -148,10 +143,11 @@ class ContactsStoreTest extends TestCase { } public function testGetContactsWithoutAvatarURI() { + /** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */ $user = $this->createMock(IUser::class); $this->contactsManager->expects($this->once()) ->method('search') - ->with($this->equalTo(''), $this->equalTo(['FN'])) + ->with($this->equalTo(''), $this->equalTo(['FN', 'EMAIL'])) ->willReturn([ [ 'UID' => 123, @@ -176,21 +172,26 @@ class ContactsStoreTest extends TestCase { } public function testGetContactsWhenUserIsInExcludeGroups() { - $this->config->expects($this->at(0)) + $this->config->expects($this->at(0))->method('getAppValue') + ->with($this->equalTo('core'), $this->equalTo('shareapi_allow_share_dialog_user_enumeration'), $this->equalTo('yes')) + ->willReturn('yes'); + + $this->config->expects($this->at(1)) ->method('getAppValue') ->with($this->equalTo('core'), $this->equalTo('shareapi_exclude_groups'), $this->equalTo('no')) ->willReturn('yes'); - $this->config->expects($this->at(1)) + $this->config->expects($this->at(2)) ->method('getAppValue') ->with($this->equalTo('core'), $this->equalTo('shareapi_only_share_with_group_members'), $this->equalTo('no')) ->willReturn('yes'); - $this->config->expects($this->at(2)) + $this->config->expects($this->at(3)) ->method('getAppValue') ->with($this->equalTo('core'), $this->equalTo('shareapi_exclude_groups_list'), $this->equalTo('')) ->willReturn('["group1", "group5", "group6"]'); + /** @var IUser|PHPUnit_Framework_MockObject_MockObject $currentUser */ $currentUser = $this->createMock(IUser::class); $currentUser->expects($this->once()) ->method('getUID') @@ -199,12 +200,12 @@ class ContactsStoreTest extends TestCase { $this->groupManager->expects($this->once()) ->method('getUserGroupIds') ->with($this->equalTo($currentUser)) - ->willReturn(["group1", "group2", "group3"]); + ->willReturn(['group1', 'group2', 'group3']); $this->contactsManager->expects($this->once()) ->method('search') - ->with($this->equalTo(''), $this->equalTo(['FN'])) + ->with($this->equalTo(''), $this->equalTo(['FN', 'EMAIL'])) ->willReturn([ [ 'UID' => 'user123', @@ -220,19 +221,23 @@ class ContactsStoreTest extends TestCase { $entries = $this->contactsStore->getContacts($currentUser, ''); $this->assertCount(0, $entries); - } public function testGetContactsOnlyIfInTheSameGroup() { - $this->config->expects($this->at(0)) ->method('getAppValue') + $this->config->expects($this->at(0))->method('getAppValue') + ->with($this->equalTo('core'), $this->equalTo('shareapi_allow_share_dialog_user_enumeration'), $this->equalTo('yes')) + ->willReturn('yes'); + + $this->config->expects($this->at(1)) ->method('getAppValue') ->with($this->equalTo('core'), $this->equalTo('shareapi_exclude_groups'), $this->equalTo('no')) ->willReturn('no'); - $this->config->expects($this->at(1)) + $this->config->expects($this->at(2)) ->method('getAppValue') ->with($this->equalTo('core'), $this->equalTo('shareapi_only_share_with_group_members'), $this->equalTo('no')) ->willReturn('yes'); + /** @var IUser|PHPUnit_Framework_MockObject_MockObject $currentUser */ $currentUser = $this->createMock(IUser::class); $currentUser->expects($this->once()) ->method('getUID') @@ -241,8 +246,7 @@ class ContactsStoreTest extends TestCase { $this->groupManager->expects($this->at(0)) ->method('getUserGroupIds') ->with($this->equalTo($currentUser)) - ->willReturn(["group1", "group2", "group3"]); - + ->willReturn(['group1', 'group2', 'group3']); $user1 = $this->createMock(IUser::class); $this->userManager->expects($this->at(0)) @@ -252,7 +256,7 @@ class ContactsStoreTest extends TestCase { $this->groupManager->expects($this->at(1)) ->method('getUserGroupIds') ->with($this->equalTo($user1)) - ->willReturn(["group1"]); + ->willReturn(['group1']); $user2 = $this->createMock(IUser::class); $this->userManager->expects($this->at(1)) ->method('get') @@ -261,7 +265,7 @@ class ContactsStoreTest extends TestCase { $this->groupManager->expects($this->at(2)) ->method('getUserGroupIds') ->with($this->equalTo($user2)) - ->willReturn(["group2", "group3"]); + ->willReturn(['group2', 'group3']); $user3 = $this->createMock(IUser::class); $this->userManager->expects($this->at(2)) ->method('get') @@ -270,11 +274,11 @@ class ContactsStoreTest extends TestCase { $this->groupManager->expects($this->at(3)) ->method('getUserGroupIds') ->with($this->equalTo($user3)) - ->willReturn(["group8", "group9"]); + ->willReturn(['group8', 'group9']); $this->contactsManager->expects($this->once()) ->method('search') - ->with($this->equalTo(''), $this->equalTo(['FN'])) + ->with($this->equalTo(''), $this->equalTo(['FN', 'EMAIL'])) ->willReturn([ [ 'UID' => 'user1', @@ -298,13 +302,99 @@ class ContactsStoreTest extends TestCase { $this->assertCount(3, $entries); $this->assertEquals('user1', $entries[0]->getProperty('UID')); $this->assertEquals('user2', $entries[1]->getProperty('UID')); - $this->assertEquals('contact', $entries[3]->getProperty('UID')); + $this->assertEquals('contact', $entries[2]->getProperty('UID')); + } + public function testGetContactsWithFilter() { + $this->config->expects($this->at(0))->method('getAppValue') + ->with($this->equalTo('core'), $this->equalTo('shareapi_allow_share_dialog_user_enumeration'), $this->equalTo('yes')) + ->willReturn('no'); - } + /** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */ + $user = $this->createMock(IUser::class); + $this->contactsManager->expects($this->any()) + ->method('search') + ->willReturn([ + [ + 'UID' => 'a567', + 'FN' => 'Darren Roner', + 'EMAIL' => [ + 'darren@roner.au', + ], + 'isLocalSystemBook' => true, + ], + [ + 'UID' => 'john', + 'FN' => 'John Doe', + 'EMAIL' => [ + 'john@example.com', + ], + 'isLocalSystemBook' => true, + ], + [ + 'FN' => 'Anne D', + 'EMAIL' => [ + 'anne@example.com', + ], + 'isLocalSystemBook' => false, + ], + ]); + $user->expects($this->any()) + ->method('getUID') + ->willReturn('user123'); + // Complete match on UID should match + $entry = $this->contactsStore->getContacts($user, 'a567'); + $this->assertSame(2, count($entry)); + $this->assertEquals([ + 'darren@roner.au' + ], $entry[0]->getEMailAddresses()); + + // Partial match on UID should not match + $entry = $this->contactsStore->getContacts($user, 'a56'); + $this->assertSame(1, count($entry)); + $this->assertEquals([ + 'anne@example.com' + ], $entry[0]->getEMailAddresses()); + + // Complete match on email should match + $entry = $this->contactsStore->getContacts($user, 'john@example.com'); + $this->assertSame(2, count($entry)); + $this->assertEquals([ + 'john@example.com' + ], $entry[0]->getEMailAddresses()); + $this->assertEquals([ + 'anne@example.com' + ], $entry[1]->getEMailAddresses()); + + // Partial match on email should not match + $entry = $this->contactsStore->getContacts($user, 'john@example.co'); + $this->assertSame(1, count($entry)); + $this->assertEquals([ + 'anne@example.com' + ], $entry[0]->getEMailAddresses()); + + // Match on FN should not match + $entry = $this->contactsStore->getContacts($user, 'Darren Roner'); + $this->assertSame(1, count($entry)); + $this->assertEquals([ + 'anne@example.com' + ], $entry[0]->getEMailAddresses()); + + // Don't filter users in local addressbook + $entry = $this->contactsStore->getContacts($user, 'Anne D'); + $this->assertSame(1, count($entry)); + $this->assertEquals([ + 'anne@example.com' + ], $entry[0]->getEMailAddresses()); + } public function testFindOneUser() { + $this->config->expects($this->at(0))->method('getAppValue') + ->with($this->equalTo('core'), $this->equalTo('shareapi_allow_share_dialog_user_enumeration'), $this->equalTo('yes')) + ->willReturn('yes'); + + /** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */ $user = $this->createMock(IUser::class); $this->contactsManager->expects($this->once()) ->method('search') @@ -323,7 +413,7 @@ class ContactsStoreTest extends TestCase { 'isLocalSystemBook' => true ], ]); - $user->expects($this->once()) + $user->expects($this->any()) ->method('getUID') ->willReturn('user123'); @@ -335,6 +425,7 @@ class ContactsStoreTest extends TestCase { } public function testFindOneEMail() { + /** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */ $user = $this->createMock(IUser::class); $this->contactsManager->expects($this->once()) ->method('search') @@ -353,7 +444,7 @@ class ContactsStoreTest extends TestCase { 'isLocalSystemBook' => false ], ]); - $user->expects($this->once()) + $user->expects($this->any()) ->method('getUID') ->willReturn('user123'); @@ -365,6 +456,7 @@ class ContactsStoreTest extends TestCase { } public function testFindOneNotSupportedType() { + /** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */ $user = $this->createMock(IUser::class); $entry = $this->contactsStore->findOne($user, 42, 'darren@roner.au'); @@ -373,6 +465,7 @@ class ContactsStoreTest extends TestCase { } public function testFindOneNoMatches() { + /** @var IUser|PHPUnit_Framework_MockObject_MockObject $user */ $user = $this->createMock(IUser::class); $this->contactsManager->expects($this->once()) ->method('search') |