aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/Collaboration/Collaborators/MailPluginTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/Collaboration/Collaborators/MailPluginTest.php')
-rw-r--r--tests/lib/Collaboration/Collaborators/MailPluginTest.php195
1 files changed, 123 insertions, 72 deletions
diff --git a/tests/lib/Collaboration/Collaborators/MailPluginTest.php b/tests/lib/Collaboration/Collaborators/MailPluginTest.php
index 141d4b680b7..b38b961a512 100644
--- a/tests/lib/Collaboration/Collaborators/MailPluginTest.php
+++ b/tests/lib/Collaboration/Collaborators/MailPluginTest.php
@@ -1,24 +1,8 @@
<?php
+
/**
- * @copyright Copyright (c) 2017 Arthur Schiwon <blizzz@arthur-schiwon.de>
- *
- * @author Arthur Schiwon <blizzz@arthur-schiwon.de>
- *
- * @license GNU AGPL version 3 or any later version
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program 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 program. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace Test\Collaboration\Collaborators;
@@ -26,56 +10,83 @@ namespace Test\Collaboration\Collaborators;
use OC\Collaboration\Collaborators\MailPlugin;
use OC\Collaboration\Collaborators\SearchResult;
use OC\Federation\CloudIdManager;
+use OC\KnownUser\KnownUserService;
use OCP\Collaboration\Collaborators\SearchResultType;
use OCP\Contacts\IManager;
+use OCP\EventDispatcher\IEventDispatcher;
use OCP\Federation\ICloudIdManager;
+use OCP\ICacheFactory;
use OCP\IConfig;
use OCP\IGroupManager;
+use OCP\IURLGenerator;
use OCP\IUser;
+use OCP\IUserManager;
use OCP\IUserSession;
+use OCP\Mail\IMailer;
use OCP\Share\IShare;
use Test\TestCase;
class MailPluginTest extends TestCase {
- /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
+ /** @var IConfig|\PHPUnit\Framework\MockObject\MockObject */
protected $config;
- /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */
+ /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */
protected $contactsManager;
- /** @var ICloudIdManager|\PHPUnit\Framework\MockObject\MockObject */
+ /** @var ICloudIdManager|\PHPUnit\Framework\MockObject\MockObject */
protected $cloudIdManager;
- /** @var MailPlugin */
+ /** @var MailPlugin */
protected $plugin;
- /** @var SearchResult */
+ /** @var SearchResult */
protected $searchResult;
- /** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject */
+ /** @var IGroupManager|\PHPUnit\Framework\MockObject\MockObject */
protected $groupManager;
- /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
+ /** @var KnownUserService|\PHPUnit\Framework\MockObject\MockObject */
+ protected $knownUserService;
+
+ /** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
protected $userSession;
+ /** @var IMailer|\PHPUnit\Framework\MockObject\MockObject */
+ protected $mailer;
+
protected function setUp(): void {
parent::setUp();
$this->config = $this->createMock(IConfig::class);
$this->contactsManager = $this->createMock(IManager::class);
$this->groupManager = $this->createMock(IGroupManager::class);
+ $this->knownUserService = $this->createMock(KnownUserService::class);
$this->userSession = $this->createMock(IUserSession::class);
- $this->cloudIdManager = new CloudIdManager($this->contactsManager);
+ $this->mailer = $this->createMock(IMailer::class);
+ $this->cloudIdManager = new CloudIdManager(
+ $this->createMock(ICacheFactory::class),
+ $this->createMock(IEventDispatcher::class),
+ $this->contactsManager,
+ $this->createMock(IURLGenerator::class),
+ $this->createMock(IUserManager::class),
+ );
$this->searchResult = new SearchResult();
}
public function instantiatePlugin() {
- $this->plugin = new MailPlugin($this->contactsManager, $this->cloudIdManager, $this->config, $this->groupManager, $this->userSession);
+ $this->plugin = new MailPlugin(
+ $this->contactsManager,
+ $this->cloudIdManager,
+ $this->config,
+ $this->groupManager,
+ $this->knownUserService,
+ $this->userSession,
+ $this->mailer
+ );
}
/**
- * @dataProvider dataGetEmail
*
* @param string $searchTerm
* @param array $contacts
@@ -83,7 +94,8 @@ class MailPluginTest extends TestCase {
* @param array $expected
* @param bool $reachedEnd
*/
- public function testSearch($searchTerm, $contacts, $shareeEnumeration, $expected, $exactIdMatch, $reachedEnd) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetEmail')]
+ public function testSearch($searchTerm, $contacts, $shareeEnumeration, $expected, $exactIdMatch, $reachedEnd, $validEmail): void {
$this->config->expects($this->any())
->method('getAppValue')
->willReturnCallback(
@@ -103,6 +115,9 @@ class MailPluginTest extends TestCase {
$this->userSession->method('getUser')
->willReturn($currentUser);
+ $this->mailer->method('validateMailAddress')
+ ->willReturn($validEmail);
+
$this->contactsManager->expects($this->any())
->method('search')
->willReturnCallback(function ($search, $searchAttributes) use ($searchTerm, $contacts) {
@@ -120,12 +135,12 @@ class MailPluginTest extends TestCase {
$this->assertSame($reachedEnd, $moreResults);
}
- public function dataGetEmail() {
+ public static function dataGetEmail(): array {
return [
// data set 0
- ['test', [], true, ['emails' => [], 'exact' => ['emails' => []]], false, false],
+ ['test', [], true, ['emails' => [], 'exact' => ['emails' => []]], false, false, false],
// data set 1
- ['test', [], false, ['emails' => [], 'exact' => ['emails' => []]], false, false],
+ ['test', [], false, ['emails' => [], 'exact' => ['emails' => []]], false, false, false],
// data set 2
[
'test@remote.com',
@@ -134,6 +149,7 @@ class MailPluginTest extends TestCase {
['emails' => [], 'exact' => ['emails' => [['uuid' => 'test@remote.com', 'label' => 'test@remote.com', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'test@remote.com']]]]],
false,
false,
+ true,
],
// data set 3
[ // no valid email address
@@ -143,6 +159,7 @@ class MailPluginTest extends TestCase {
['emails' => [], 'exact' => ['emails' => []]],
false,
false,
+ false,
],
// data set 4
[
@@ -152,6 +169,7 @@ class MailPluginTest extends TestCase {
['emails' => [], 'exact' => ['emails' => [['uuid' => 'test@remote.com', 'label' => 'test@remote.com', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'test@remote.com']]]]],
false,
false,
+ true,
],
// data set 5
[
@@ -171,12 +189,13 @@ class MailPluginTest extends TestCase {
'UID' => 'uid1',
'FN' => 'User @ Localhost',
'EMAIL' => [
- 'username@localhost',
+ 'username@example.com',
],
],
],
true,
- ['emails' => [['uuid' => 'uid1', 'name' => 'User @ Localhost', 'type' => '', 'label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@localhost']]], 'exact' => ['emails' => []]],
+ ['emails' => [['uuid' => 'uid1', 'name' => 'User @ Localhost', 'type' => '', 'label' => 'User @ Localhost (username@example.com)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@example.com']]], 'exact' => ['emails' => []]],
+ false,
false,
false,
],
@@ -195,6 +214,7 @@ class MailPluginTest extends TestCase {
],
],
[
+ 'isLocalSystemBook' => true,
'UID' => 'uid1',
'FN' => 'User @ Localhost',
'EMAIL' => [
@@ -206,6 +226,7 @@ class MailPluginTest extends TestCase {
['emails' => [], 'exact' => ['emails' => []]],
false,
false,
+ false,
],
// data set 7
[
@@ -213,26 +234,27 @@ class MailPluginTest extends TestCase {
[
[
'UID' => 'uid3',
- 'FN' => 'User3 @ Localhost',
+ 'FN' => 'User3 @ example.com',
],
[
'UID' => 'uid2',
- 'FN' => 'User2 @ Localhost',
+ 'FN' => 'User2 @ example.com',
'EMAIL' => [
],
],
[
'UID' => 'uid1',
- 'FN' => 'User @ Localhost',
+ 'FN' => 'User @ example.com',
'EMAIL' => [
- 'username@localhost',
+ 'username@example.com',
],
],
],
true,
- ['emails' => [['uuid' => 'uid1', 'name' => 'User @ Localhost', 'type' => '', 'label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@localhost']]], 'exact' => ['emails' => [['label' => 'test@remote.com', 'uuid' => 'test@remote.com', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'test@remote.com']]]]],
+ ['emails' => [['uuid' => 'uid1', 'name' => 'User @ example.com', 'type' => '', 'label' => 'User @ example.com (username@example.com)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@example.com']]], 'exact' => ['emails' => [['label' => 'test@remote.com', 'uuid' => 'test@remote.com', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'test@remote.com']]]]],
false,
false,
+ true,
],
// data set 8
[
@@ -249,6 +271,7 @@ class MailPluginTest extends TestCase {
],
],
[
+ 'isLocalSystemBook' => true,
'UID' => 'uid1',
'FN' => 'User @ Localhost',
'EMAIL' => [
@@ -260,60 +283,63 @@ class MailPluginTest extends TestCase {
['emails' => [], 'exact' => ['emails' => [['label' => 'test@remote.com', 'uuid' => 'test@remote.com', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'test@remote.com']]]]],
false,
false,
+ true,
],
// data set 9
[
- 'username@localhost',
+ 'username@example.com',
[
[
'UID' => 'uid3',
- 'FN' => 'User3 @ Localhost',
+ 'FN' => 'User3 @ example.com',
],
[
'UID' => 'uid2',
- 'FN' => 'User2 @ Localhost',
+ 'FN' => 'User2 @ example.com',
'EMAIL' => [
],
],
[
'UID' => 'uid1',
- 'FN' => 'User @ Localhost',
+ 'FN' => 'User @ example.com',
'EMAIL' => [
- 'username@localhost',
+ 'username@example.com',
],
],
],
true,
- ['emails' => [], 'exact' => ['emails' => [['name' => 'User @ Localhost', 'uuid' => 'uid1', 'type' => '', 'label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@localhost']]]]],
+ ['emails' => [], 'exact' => ['emails' => [['name' => 'User @ example.com', 'uuid' => 'uid1', 'type' => '', 'label' => 'User @ example.com (username@example.com)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@example.com']]]]],
true,
false,
+ false,
],
// data set 10
[
- 'username@localhost',
+ 'username@example.com',
[
[
'UID' => 'uid1',
- 'FN' => 'User3 @ Localhost',
+ 'FN' => 'User3 @ example.com',
],
[
'UID' => 'uid2',
- 'FN' => 'User2 @ Localhost',
+ 'FN' => 'User2 @ example.com',
'EMAIL' => [
],
],
[
'UID' => 'uid1',
- 'FN' => 'User @ Localhost',
+ 'FN' => 'User @ example.com',
'EMAIL' => [
- 'username@localhost',
+ 'username@example.com',
],
],
],
false,
- ['emails' => [], 'exact' => ['emails' => [['name' => 'User @ Localhost', 'uuid' => 'uid1', 'type' => '', 'label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@localhost']]]]],
+ ['emails' => [], 'exact' => ['emails' => [['name' => 'User @ example.com', 'uuid' => 'uid1', 'type' => '', 'label' => 'User @ example.com (username@example.com)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@example.com']]]]],
true,
false,
+ false,
],
// data set 11
// contact with space
@@ -339,8 +365,9 @@ class MailPluginTest extends TestCase {
],
],
false,
- ['emails' => [], 'exact' => ['emails' => [['name' => 'User Name @ Localhost', 'uuid' => 'uid1', 'type' => '', 'label' => 'User Name @ Localhost (user name@localhost)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'user name@localhost']]]]],
- true,
+ ['emails' => [], 'exact' => ['emails' => []]],
+ false,
+ false,
false,
],
// data set 12
@@ -359,6 +386,7 @@ class MailPluginTest extends TestCase {
],
],
[
+ 'isLocalSystemBook' => true,
'UID' => 'uid1',
'FN' => 'User @ Localhost',
'EMAIL' => [
@@ -370,6 +398,7 @@ class MailPluginTest extends TestCase {
['emails' => [], 'exact' => ['emails' => []]],
false,
false,
+ false,
],
// data set 13
// Local user found by email
@@ -388,6 +417,7 @@ class MailPluginTest extends TestCase {
['users' => [], 'exact' => ['users' => [['uuid' => 'uid1', 'name' => 'User', 'label' => 'User (test@example.com)','value' => ['shareType' => IShare::TYPE_USER, 'shareWith' => 'test'], 'shareWithDisplayNameUnique' => 'test@example.com']]]],
true,
false,
+ true,
],
// data set 14
// Current local user found by email => no result
@@ -406,6 +436,7 @@ class MailPluginTest extends TestCase {
['exact' => []],
false,
false,
+ true,
],
// data set 15
// Pagination and "more results" for user matches byyyyyyy emails
@@ -448,6 +479,7 @@ class MailPluginTest extends TestCase {
], 'emails' => [], 'exact' => ['users' => [], 'emails' => []]],
false,
true,
+ false,
],
// data set 16
// Pagination and "more results" for normal emails
@@ -486,6 +518,7 @@ class MailPluginTest extends TestCase {
], 'exact' => ['emails' => []]],
false,
true,
+ false,
],
// data set 17
// multiple email addresses with type
@@ -506,25 +539,36 @@ class MailPluginTest extends TestCase {
'UID' => 'uid1',
'FN' => 'User Name',
'EMAIL' => [
- ['type' => 'HOME', 'value' => 'username@localhost'],
- ['type' => 'WORK', 'value' => 'username@other'],
+ ['type' => 'HOME', 'value' => 'username@example.com'],
+ ['type' => 'WORK', 'value' => 'other@example.com'],
],
],
],
false,
['emails' => [
], 'exact' => ['emails' => [
- ['name' => 'User Name', 'uuid' => 'uid1', 'type' => 'HOME', 'label' => 'User Name (username@localhost)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@localhost']],
- ['name' => 'User Name', 'uuid' => 'uid1', 'type' => 'WORK', 'label' => 'User Name (username@other)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@other']]
+ ['name' => 'User Name', 'uuid' => 'uid1', 'type' => 'HOME', 'label' => 'User Name (username@example.com)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@example.com']],
+ ['name' => 'User Name', 'uuid' => 'uid1', 'type' => 'WORK', 'label' => 'User Name (other@example.com)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'other@example.com']]
]]],
false,
false,
+ false,
+ ],
+ // data set 18
+ // idn email
+ [
+ 'test@lölölölölölölöl.com',
+ [],
+ true,
+ ['emails' => [], 'exact' => ['emails' => [['uuid' => 'test@lölölölölölölöl.com', 'label' => 'test@lölölölölölölöl.com', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'test@lölölölölölölöl.com']]]]],
+ false,
+ false,
+ true,
],
];
}
/**
- * @dataProvider dataGetEmailGroupsOnly
*
* @param string $searchTerm
* @param array $contacts
@@ -533,7 +577,8 @@ class MailPluginTest extends TestCase {
* @param bool $reachedEnd
* @param array groups
*/
- public function testSearchGroupsOnly($searchTerm, $contacts, $expected, $exactIdMatch, $reachedEnd, $userToGroupMapping) {
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataGetEmailGroupsOnly')]
+ public function testSearchGroupsOnly($searchTerm, $contacts, $expected, $exactIdMatch, $reachedEnd, $userToGroupMapping, $validEmail): void {
$this->config->expects($this->any())
->method('getAppValue')
->willReturnCallback(
@@ -549,13 +594,16 @@ class MailPluginTest extends TestCase {
$this->instantiatePlugin();
- /** @var \OCP\IUser | \PHPUnit\Framework\MockObject\MockObject */
+ /** @var IUser|\PHPUnit\Framework\MockObject\MockObject */
$currentUser = $this->createMock('\OCP\IUser');
$currentUser->expects($this->any())
->method('getUID')
->willReturn('currentUser');
+ $this->mailer->method('validateMailAddress')
+ ->willReturn($validEmail);
+
$this->contactsManager->expects($this->any())
->method('search')
->willReturnCallback(function ($search, $searchAttributes) use ($searchTerm, $contacts) {
@@ -571,7 +619,7 @@ class MailPluginTest extends TestCase {
$this->groupManager->expects($this->any())
->method('getUserGroupIds')
- ->willReturnCallback(function (\OCP\IUser $user) use ($userToGroupMapping) {
+ ->willReturnCallback(function (IUser $user) use ($userToGroupMapping) {
return $userToGroupMapping[$user->getUID()];
});
@@ -589,7 +637,7 @@ class MailPluginTest extends TestCase {
$this->assertSame($reachedEnd, $moreResults);
}
- public function dataGetEmailGroupsOnly() {
+ public static function dataGetEmailGroupsOnly(): array {
return [
// The user `User` can share with the current user
[
@@ -607,9 +655,10 @@ class MailPluginTest extends TestCase {
false,
false,
[
- "currentUser" => ["group1"],
- "User" => ["group1"]
- ]
+ 'currentUser' => ['group1'],
+ 'User' => ['group1']
+ ],
+ false,
],
// The user `User` cannot share with the current user
[
@@ -627,9 +676,10 @@ class MailPluginTest extends TestCase {
false,
false,
[
- "currentUser" => ["group1"],
- "User" => ["group2"]
- ]
+ 'currentUser' => ['group1'],
+ 'User' => ['group2']
+ ],
+ false,
],
// The user `User` cannot share with the current user, but there is an exact match on the e-mail address -> share by e-mail
[
@@ -647,9 +697,10 @@ class MailPluginTest extends TestCase {
false,
false,
[
- "currentUser" => ["group1"],
- "User" => ["group2"]
- ]
+ 'currentUser' => ['group1'],
+ 'User' => ['group2']
+ ],
+ true,
]
];
}