diff options
Diffstat (limited to 'tests/lib/Federation/CloudIdManagerTest.php')
-rw-r--r-- | tests/lib/Federation/CloudIdManagerTest.php | 67 |
1 files changed, 48 insertions, 19 deletions
diff --git a/tests/lib/Federation/CloudIdManagerTest.php b/tests/lib/Federation/CloudIdManagerTest.php index 13e6b111864..cf97c895dc1 100644 --- a/tests/lib/Federation/CloudIdManagerTest.php +++ b/tests/lib/Federation/CloudIdManagerTest.php @@ -1,4 +1,7 @@ <?php + +declare(strict_types=1); + /** * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors * SPDX-License-Identifier: AGPL-3.0-or-later @@ -10,11 +13,15 @@ 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,31 +43,60 @@ class CloudIdManagerTest extends TestCase { $this->userManager = $this->createMock(IUserManager::class); $this->cacheFactory = $this->createMock(ICacheFactory::class); - $this->cacheFactory->method('createLocal') + $this->cacheFactory->method('createDistributed') ->willReturn(new ArrayCache('')); $this->cloudIdManager = new CloudIdManager( + $this->cacheFactory, + $this->createMock(IEventDispatcher::class), $this->contactsManager, $this->urlGenerator, $this->userManager, - $this->cacheFactory, - $this->createMock(IEventDispatcher::class) ); + $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(): array { + 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 - */ + #[\PHPUnit\Framework\Attributes\DataProvider('cloudIdProvider')] public function testResolveCloudId(string $cloudId, string $user, string $noProtocolRemote, string $cleanId): void { $displayName = 'Ample Ex'; @@ -70,7 +106,7 @@ class CloudIdManagerTest extends TestCase { ->willReturn([ [ 'CLOUD' => [$cleanId], - 'FN' => 'Ample Ex', + 'FN' => $displayName, ] ]); @@ -82,7 +118,7 @@ class CloudIdManagerTest extends TestCase { $this->assertEquals($displayName . '@' . $noProtocolRemote, $cloudId->getDisplayId()); } - public function invalidCloudIdProvider(): array { + public static function invalidCloudIdProvider(): array { return [ ['example.com'], ['test:foo@example.com'], @@ -90,12 +126,7 @@ class CloudIdManagerTest extends TestCase { ]; } - /** - * @dataProvider invalidCloudIdProvider - * - * @param string $cloudId - * - */ + #[\PHPUnit\Framework\Attributes\DataProvider('invalidCloudIdProvider')] public function testInvalidCloudId(string $cloudId): void { $this->expectException(\InvalidArgumentException::class); @@ -105,7 +136,7 @@ class CloudIdManagerTest extends TestCase { $this->cloudIdManager->resolveCloudId($cloudId); } - public function getCloudIdProvider(): array { + public static function getCloudIdProvider(): array { return [ ['test', 'example.com', 'test@example.com', null, 'https://example.com', 'https://example.com'], ['test', 'http://example.com', 'test@http://example.com', 'test@example.com'], @@ -117,9 +148,7 @@ class CloudIdManagerTest extends TestCase { ]; } - /** - * @dataProvider getCloudIdProvider - */ + #[\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()) |