diff options
author | Carl Schwan <carl@carlschwan.eu> | 2022-01-12 14:15:08 +0100 |
---|---|---|
committer | Carl Schwan <carl@carlschwan.eu> | 2022-01-13 17:10:43 +0100 |
commit | 2b2d23ce2128528059cabae072fff0495e8dbdbc (patch) | |
tree | 93fbe513250dedecf31885da5ac0fb818722b36b /tests/lib | |
parent | 26b5949102fdcde6419a38d57ac08f3dd730392e (diff) | |
download | nextcloud-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.php | 58 |
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, ] ]; } |