diff options
Diffstat (limited to 'tests/lib/Federation/CloudIdManagerTest.php')
-rw-r--r-- | tests/lib/Federation/CloudIdManagerTest.php | 135 |
1 files changed, 81 insertions, 54 deletions
diff --git a/tests/lib/Federation/CloudIdManagerTest.php b/tests/lib/Federation/CloudIdManagerTest.php index 92f8a5fa8dd..cf97c895dc1 100644 --- a/tests/lib/Federation/CloudIdManagerTest.php +++ b/tests/lib/Federation/CloudIdManagerTest.php @@ -1,32 +1,27 @@ <?php + +declare(strict_types=1); + /** - * @copyright Copyright (c) 2017 Robin Appelman <robin@icewind.nl> - * - * @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\Federation; use OC\Federation\CloudIdManager; +use OC\Memcache\ArrayCache; use OCP\Contacts\IManager; +use OCP\EventDispatcher\IEventDispatcher; +use OCP\Federation\ICloudIdManager; +use OCP\ICacheFactory; use OCP\IURLGenerator; use OCP\IUserManager; use Test\TestCase; +/** + * @group DB + */ class CloudIdManagerTest extends TestCase { /** @var IManager|\PHPUnit\Framework\MockObject\MockObject */ protected $contactsManager; @@ -36,6 +31,8 @@ class CloudIdManagerTest extends TestCase { private $userManager; /** @var CloudIdManager */ private $cloudIdManager; + /** @var ICacheFactory|\PHPUnit\Framework\MockObject\MockObject */ + private $cacheFactory; protected function setUp(): void { @@ -45,27 +42,62 @@ class CloudIdManagerTest extends TestCase { $this->urlGenerator = $this->createMock(IURLGenerator::class); $this->userManager = $this->createMock(IUserManager::class); - $this->cloudIdManager = new CloudIdManager($this->contactsManager, $this->urlGenerator, $this->userManager); + $this->cacheFactory = $this->createMock(ICacheFactory::class); + $this->cacheFactory->method('createDistributed') + ->willReturn(new ArrayCache('')); + + $this->cloudIdManager = new CloudIdManager( + $this->cacheFactory, + $this->createMock(IEventDispatcher::class), + $this->contactsManager, + $this->urlGenerator, + $this->userManager, + ); + $this->overwriteService(ICloudIdManager::class, $this->cloudIdManager); + } + + public static function dataGetDisplayNameFromContact(): array { + return [ + ['test1@example.tld', 'test', 'test'], + ['test2@example.tld', null, null], + ['test3@example.tld', 'test3@example', 'test3@example'], + ['test4@example.tld', 'test4@example.tld', null], + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('dataGetDisplayNameFromContact')] + public function testGetDisplayNameFromContact(string $cloudId, ?string $displayName, ?string $expected): void { + $returnedContact = [ + 'CLOUD' => [$cloudId], + 'FN' => $expected, + ]; + if ($displayName === null) { + unset($returnedContact['FN']); + } + $this->contactsManager->method('search') + ->with($cloudId, ['CLOUD']) + ->willReturn([$returnedContact]); + + $this->assertEquals($expected, $this->cloudIdManager->getDisplayNameFromContact($cloudId)); + $this->assertEquals($expected, $this->cloudIdManager->getDisplayNameFromContact($cloudId)); } - public function cloudIdProvider() { + public static function cloudIdProvider(): array { return [ ['test@example.com', 'test', 'example.com', 'test@example.com'], ['test@example.com/cloud', 'test', 'example.com/cloud', 'test@example.com/cloud'], ['test@example.com/cloud/', 'test', 'example.com/cloud', 'test@example.com/cloud'], ['test@example.com/cloud/index.php', 'test', 'example.com/cloud', 'test@example.com/cloud'], ['test@example.com@example.com', 'test@example.com', 'example.com', 'test@example.com@example.com'], + + // Equal signs are not valid on Nextcloud side, but can be used by other federated OCM compatible servers + ['test==@example.com', 'test==', 'example.com', 'test==@example.com'], + ['==@example.com', '==', 'example.com', '==@example.com'], ]; } - /** - * @dataProvider cloudIdProvider - * - * @param string $cloudId - * @param string $user - * @param string $remote - */ - public function testResolveCloudId($cloudId, $user, $remote, $cleanId) { + #[\PHPUnit\Framework\Attributes\DataProvider('cloudIdProvider')] + public function testResolveCloudId(string $cloudId, string $user, string $noProtocolRemote, string $cleanId): void { $displayName = 'Ample Ex'; $this->contactsManager->expects($this->any()) @@ -74,19 +106,19 @@ class CloudIdManagerTest extends TestCase { ->willReturn([ [ 'CLOUD' => [$cleanId], - 'FN' => 'Ample Ex', + 'FN' => $displayName, ] ]); $cloudId = $this->cloudIdManager->resolveCloudId($cloudId); $this->assertEquals($user, $cloudId->getUser()); - $this->assertEquals($remote, $cloudId->getRemote()); + $this->assertEquals('https://' . $noProtocolRemote, $cloudId->getRemote()); $this->assertEquals($cleanId, $cloudId->getId()); - $this->assertEquals($displayName . '@' . $remote, $cloudId->getDisplayId()); + $this->assertEquals($displayName . '@' . $noProtocolRemote, $cloudId->getDisplayId()); } - public function invalidCloudIdProvider() { + public static function invalidCloudIdProvider(): array { return [ ['example.com'], ['test:foo@example.com'], @@ -94,13 +126,8 @@ class CloudIdManagerTest extends TestCase { ]; } - /** - * @dataProvider invalidCloudIdProvider - * - * @param string $cloudId - * - */ - public function testInvalidCloudId($cloudId) { + #[\PHPUnit\Framework\Attributes\DataProvider('invalidCloudIdProvider')] + public function testInvalidCloudId(string $cloudId): void { $this->expectException(\InvalidArgumentException::class); $this->contactsManager->expects($this->never()) @@ -109,40 +136,40 @@ class CloudIdManagerTest extends TestCase { $this->cloudIdManager->resolveCloudId($cloudId); } - public function getCloudIdProvider() { + public static function getCloudIdProvider(): array { return [ - ['test', 'example.com', 'test@example.com'], - ['test@example.com', 'example.com', 'test@example.com@example.com'], - ['test@example.com', null, 'test@example.com@example.com'], + ['test', 'example.com', 'test@example.com', null, 'https://example.com', 'https://example.com'], + ['test', 'http://example.com', 'test@http://example.com', 'test@example.com'], + ['test', null, 'test@http://example.com', 'test@example.com', 'http://example.com', 'http://example.com'], + ['test@example.com', 'example.com', 'test@example.com@example.com', null, 'https://example.com', 'https://example.com'], + ['test@example.com', 'https://example.com', 'test@example.com@example.com'], + ['test@example.com', null, 'test@example.com@example.com', null, 'https://example.com', 'https://example.com'], + ['test@example.com', 'https://example.com/index.php/s/shareToken', 'test@example.com@example.com', null, 'https://example.com', 'https://example.com'], ]; } - /** - * @dataProvider getCloudIdProvider - * - * @param string $user - * @param string $remote - * @param string $id - */ - public function testGetCloudId($user, $remote, $id) { + #[\PHPUnit\Framework\Attributes\DataProvider('getCloudIdProvider')] + public function testGetCloudId(string $user, ?string $remote, string $id, ?string $searchCloudId = null, ?string $localHost = 'https://example.com', ?string $expectedRemoteId = null): void { if ($remote !== null) { $this->contactsManager->expects($this->any()) ->method('search') - ->with($id, ['CLOUD']) + ->with($searchCloudId ?? $id, ['CLOUD']) ->willReturn([ [ - 'CLOUD' => [$id], + 'CLOUD' => [$searchCloudId ?? $id], 'FN' => 'Ample Ex', ] ]); } else { $this->urlGenerator->expects(self::once()) ->method('getAbsoluteUrl') - ->willReturn('https://example.com'); + ->willReturn($localHost); } + $expectedRemoteId ??= $remote; $cloudId = $this->cloudIdManager->getCloudId($user, $remote); - $this->assertEquals($id, $cloudId->getId()); + $this->assertEquals($id, $cloudId->getId(), 'Cloud ID'); + $this->assertEquals($expectedRemoteId, $cloudId->getRemote(), 'Remote URL'); } } |