summaryrefslogtreecommitdiffstats
path: root/tests/lib
diff options
context:
space:
mode:
authorCarl Schwan <carl@carlschwan.eu>2022-01-12 14:15:08 +0100
committerCarl Schwan <carl@carlschwan.eu>2022-01-13 17:10:43 +0100
commit2b2d23ce2128528059cabae072fff0495e8dbdbc (patch)
tree93fbe513250dedecf31885da5ac0fb818722b36b /tests/lib
parent26b5949102fdcde6419a38d57ac08f3dd730392e (diff)
downloadnextcloud-server-2b2d23ce2128528059cabae072fff0495e8dbdbc.tar.gz
nextcloud-server-2b2d23ce2128528059cabae072fff0495e8dbdbc.zip
Fix idn emails not working in shares
And add check before sending email that email address is valid Fix #30595 Signed-off-by: Carl Schwan <carl@carlschwan.eu>
Diffstat (limited to 'tests/lib')
-rw-r--r--tests/lib/Collaboration/Collaborators/MailPluginTest.php58
1 files changed, 50 insertions, 8 deletions
diff --git a/tests/lib/Collaboration/Collaborators/MailPluginTest.php b/tests/lib/Collaboration/Collaborators/MailPluginTest.php
index ad18666e0ae..db7d3a07114 100644
--- a/tests/lib/Collaboration/Collaborators/MailPluginTest.php
+++ b/tests/lib/Collaboration/Collaborators/MailPluginTest.php
@@ -37,6 +37,7 @@ use OCP\IUser;
use OCP\IUserManager;
use OCP\IUserSession;
use OCP\Share\IShare;
+use OCP\Mail\IMailer;
use Test\TestCase;
class MailPluginTest extends TestCase {
@@ -64,6 +65,9 @@ class MailPluginTest extends TestCase {
/** @var IUserSession|\PHPUnit\Framework\MockObject\MockObject */
protected $userSession;
+ /** @var IMailer|\PHPUnit\Framework\MockObject\MockObject */
+ protected $mailer;
+
protected function setUp(): void {
parent::setUp();
@@ -72,6 +76,7 @@ class MailPluginTest extends TestCase {
$this->groupManager = $this->createMock(IGroupManager::class);
$this->knownUserService = $this->createMock(KnownUserService::class);
$this->userSession = $this->createMock(IUserSession::class);
+ $this->mailer = $this->createMock(IMailer::class);
$this->cloudIdManager = new CloudIdManager($this->contactsManager, $this->createMock(IURLGenerator::class), $this->createMock(IUserManager::class));
$this->searchResult = new SearchResult();
@@ -84,7 +89,8 @@ class MailPluginTest extends TestCase {
$this->config,
$this->groupManager,
$this->knownUserService,
- $this->userSession
+ $this->userSession,
+ $this->mailer
);
}
@@ -97,7 +103,7 @@ class MailPluginTest extends TestCase {
* @param array $expected
* @param bool $reachedEnd
*/
- public function testSearch($searchTerm, $contacts, $shareeEnumeration, $expected, $exactIdMatch, $reachedEnd) {
+ public function testSearch($searchTerm, $contacts, $shareeEnumeration, $expected, $exactIdMatch, $reachedEnd, $validEmail) {
$this->config->expects($this->any())
->method('getAppValue')
->willReturnCallback(
@@ -117,6 +123,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) {
@@ -137,9 +146,9 @@ class MailPluginTest extends TestCase {
public function dataGetEmail() {
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',
@@ -148,6 +157,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
@@ -157,6 +167,7 @@ class MailPluginTest extends TestCase {
['emails' => [], 'exact' => ['emails' => []]],
false,
false,
+ false,
],
// data set 4
[
@@ -166,6 +177,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
[
@@ -193,6 +205,7 @@ class MailPluginTest extends TestCase {
['emails' => [['uuid' => 'uid1', 'name' => 'User @ Localhost', 'type' => '', 'label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@localhost']]], 'exact' => ['emails' => []]],
false,
false,
+ false,
],
// data set 6
[
@@ -220,6 +233,7 @@ class MailPluginTest extends TestCase {
['emails' => [], 'exact' => ['emails' => []]],
false,
false,
+ false,
],
// data set 7
[
@@ -247,6 +261,7 @@ class MailPluginTest extends TestCase {
['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']]]]],
false,
false,
+ true,
],
// data set 8
[
@@ -274,6 +289,7 @@ 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
[
@@ -301,6 +317,7 @@ class MailPluginTest extends TestCase {
['emails' => [], 'exact' => ['emails' => [['name' => 'User @ Localhost', 'uuid' => 'uid1', 'type' => '', 'label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@localhost']]]]],
true,
false,
+ false,
],
// data set 10
[
@@ -328,6 +345,7 @@ class MailPluginTest extends TestCase {
['emails' => [], 'exact' => ['emails' => [['name' => 'User @ Localhost', 'uuid' => 'uid1', 'type' => '', 'label' => 'User @ Localhost (username@localhost)', 'value' => ['shareType' => IShare::TYPE_EMAIL, 'shareWith' => 'username@localhost']]]]],
true,
false,
+ false,
],
// data set 11
// contact with space
@@ -356,6 +374,7 @@ class MailPluginTest extends TestCase {
['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,
false,
+ false,
],
// data set 12
// remote with space, no contact
@@ -384,6 +403,7 @@ class MailPluginTest extends TestCase {
['emails' => [], 'exact' => ['emails' => []]],
false,
false,
+ false,
],
// data set 13
// Local user found by email
@@ -402,6 +422,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
@@ -420,6 +441,7 @@ class MailPluginTest extends TestCase {
['exact' => []],
false,
false,
+ true,
],
// data set 15
// Pagination and "more results" for user matches byyyyyyy emails
@@ -462,6 +484,7 @@ class MailPluginTest extends TestCase {
], 'emails' => [], 'exact' => ['users' => [], 'emails' => []]],
false,
true,
+ false,
],
// data set 16
// Pagination and "more results" for normal emails
@@ -500,6 +523,7 @@ class MailPluginTest extends TestCase {
], 'exact' => ['emails' => []]],
false,
true,
+ false,
],
// data set 17
// multiple email addresses with type
@@ -533,6 +557,18 @@ class MailPluginTest extends TestCase {
]]],
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,
],
];
}
@@ -547,7 +583,7 @@ class MailPluginTest extends TestCase {
* @param bool $reachedEnd
* @param array groups
*/
- public function testSearchGroupsOnly($searchTerm, $contacts, $expected, $exactIdMatch, $reachedEnd, $userToGroupMapping) {
+ public function testSearchGroupsOnly($searchTerm, $contacts, $expected, $exactIdMatch, $reachedEnd, $userToGroupMapping, $validEmail) {
$this->config->expects($this->any())
->method('getAppValue')
->willReturnCallback(
@@ -570,6 +606,9 @@ class MailPluginTest extends TestCase {
->method('getUID')
->willReturn('currentUser');
+ $this->mailer->method('validateMailAddress')
+ ->willReturn($validEmail);
+
$this->contactsManager->expects($this->any())
->method('search')
->willReturnCallback(function ($search, $searchAttributes) use ($searchTerm, $contacts) {
@@ -623,7 +662,8 @@ class MailPluginTest extends TestCase {
[
"currentUser" => ["group1"],
"User" => ["group1"]
- ]
+ ],
+ false,
],
// The user `User` cannot share with the current user
[
@@ -643,7 +683,8 @@ class MailPluginTest extends TestCase {
[
"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
[
@@ -663,7 +704,8 @@ class MailPluginTest extends TestCase {
[
"currentUser" => ["group1"],
"User" => ["group2"]
- ]
+ ],
+ true,
]
];
}