diff options
Diffstat (limited to 'tests/lib/Federation')
-rw-r--r-- | tests/lib/Federation/CloudIdManagerTest.php | 87 | ||||
-rw-r--r-- | tests/lib/Federation/CloudIdTest.php | 42 |
2 files changed, 84 insertions, 45 deletions
diff --git a/tests/lib/Federation/CloudIdManagerTest.php b/tests/lib/Federation/CloudIdManagerTest.php index 40477944019..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,36 +43,61 @@ 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() { + 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,25 +136,19 @@ class CloudIdManagerTest extends TestCase { $this->cloudIdManager->resolveCloudId($cloudId); } - public function getCloudIdProvider(): array { + public static function getCloudIdProvider(): array { return [ - ['test', 'example.com', 'test@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'], + ['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 null|string $remote - * @param string $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()) diff --git a/tests/lib/Federation/CloudIdTest.php b/tests/lib/Federation/CloudIdTest.php index 4ac9bd92d64..67683861e40 100644 --- a/tests/lib/Federation/CloudIdTest.php +++ b/tests/lib/Federation/CloudIdTest.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 @@ -7,25 +10,40 @@ namespace Test\Federation; use OC\Federation\CloudId; +use OC\Federation\CloudIdManager; +use OCP\Federation\ICloudIdManager; +use PHPUnit\Framework\MockObject\MockObject; use Test\TestCase; +/** + * @group DB + */ class CloudIdTest extends TestCase { - public function dataGetDisplayCloudId() { + protected CloudIdManager&MockObject $cloudIdManager; + + protected function setUp(): void { + parent::setUp(); + + $this->cloudIdManager = $this->createMock(CloudIdManager::class); + $this->overwriteService(ICloudIdManager::class, $this->cloudIdManager); + } + + public static function dataGetDisplayCloudId(): array { return [ - ['test@example.com', 'test@example.com'], - ['test@http://example.com', 'test@example.com'], - ['test@https://example.com', 'test@example.com'], + ['test@example.com', 'test', 'example.com', 'test@example.com'], + ['test@http://example.com', 'test', 'http://example.com', 'test@example.com'], + ['test@https://example.com', 'test', 'https://example.com', 'test@example.com'], + ['test@https://example.com', 'test', 'https://example.com', 'Beloved Amy@example.com', 'Beloved Amy'], ]; } - /** - * @dataProvider dataGetDisplayCloudId - * - * @param string $id - * @param string $display - */ - public function testGetDisplayCloudId($id, $display) { - $cloudId = new CloudId($id, '', ''); + #[\PHPUnit\Framework\Attributes\DataProvider('dataGetDisplayCloudId')] + public function testGetDisplayCloudId(string $id, string $user, string $remote, string $display, ?string $addressbookName = null): void { + $this->cloudIdManager->expects($this->once()) + ->method('getDisplayNameFromContact') + ->willReturn($addressbookName); + + $cloudId = new CloudId($id, $user, $remote); $this->assertEquals($display, $cloudId->getDisplayId()); } } |