diff options
Diffstat (limited to 'tests/lib/OCS')
-rw-r--r-- | tests/lib/OCS/ApiHelperTest.php | 49 | ||||
-rw-r--r-- | tests/lib/OCS/DiscoveryServiceTest.php | 81 | ||||
-rw-r--r-- | tests/lib/OCS/ProviderTest.php | 197 |
3 files changed, 327 insertions, 0 deletions
diff --git a/tests/lib/OCS/ApiHelperTest.php b/tests/lib/OCS/ApiHelperTest.php new file mode 100644 index 00000000000..334fca7169e --- /dev/null +++ b/tests/lib/OCS/ApiHelperTest.php @@ -0,0 +1,49 @@ +<?php + +declare(strict_types=1); + +/** + * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace Test\OCS; + +use OC\OCS\ApiHelper; +use OCP\IRequest; + +class ApiHelperTest extends \Test\TestCase { + public static function versionDataScriptNameProvider(): array { + return [ + // Valid script name + [ + '/master/ocs/v2.php', true, + ], + + // Invalid script names + [ + '/master/ocs/v2.php/someInvalidPathName', false, + ], + [ + '/master/ocs/v1.php', false, + ], + [ + '', false, + ], + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('versionDataScriptNameProvider')] + public function testIsV2(string $scriptName, bool $expected): void { + $request = $this->getMockBuilder(IRequest::class) + ->disableOriginalConstructor() + ->getMock(); + $request + ->expects($this->once()) + ->method('getScriptName') + ->willReturn($scriptName); + + $this->assertEquals($expected, $this->invokePrivate(new ApiHelper, 'isV2', [$request])); + } +} diff --git a/tests/lib/OCS/DiscoveryServiceTest.php b/tests/lib/OCS/DiscoveryServiceTest.php new file mode 100644 index 00000000000..422c97f4221 --- /dev/null +++ b/tests/lib/OCS/DiscoveryServiceTest.php @@ -0,0 +1,81 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2017 Nextcloud GmbH and Nextcloud contributors + * SPDX-License-Identifier: AGPL-3.0-or-later + */ + +namespace Test\OCS; + +use OC\OCS\DiscoveryService; +use OCP\Http\Client\IClientService; +use OCP\ICacheFactory; +use OCP\OCS\IDiscoveryService; +use Test\TestCase; + +class DiscoveryServiceTest extends TestCase { + /** @var \PHPUnit\Framework\MockObject\MockObject | ICacheFactory */ + private $cacheFactory; + + /** @var \PHPUnit\Framework\MockObject\MockObject | IClientService */ + private $clientService; + + /** @var IDiscoveryService */ + private $discoveryService; + + protected function setUp(): void { + parent::setUp(); + + $this->cacheFactory = $this->getMockBuilder(ICacheFactory::class)->getMock(); + $this->clientService = $this->getMockBuilder(IClientService::class)->getMock(); + + $this->discoveryService = new DiscoveryService( + $this->cacheFactory, + $this->clientService + ); + } + + /** + * + * @param string $url + * @param bool $expected + */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestIsSafeUrl')] + public function testIsSafeUrl($url, $expected): void { + $result = $this->invokePrivate($this->discoveryService, 'isSafeUrl', [$url]); + $this->assertSame($expected, $result); + } + + public static function dataTestIsSafeUrl(): array { + return [ + ['api/ocs/v1.php/foo', true], + ['/api/ocs/v1.php/foo', true], + ['api/ocs/v1.php/foo/', true], + ['api/ocs/v1.php/foo-bar/', true], + ['api/ocs/v1:php/foo', false], + ['api/ocs/<v1.php/foo', false], + ['api/ocs/v1.php>/foo', false], + ]; + } + + /** + * + * @param array $decodedServices + * @param string $service + * @param array $expected + */ + #[\PHPUnit\Framework\Attributes\DataProvider('dataTestGetEndpoints')] + public function testGetEndpoints($decodedServices, $service, $expected): void { + $result = $this->invokePrivate($this->discoveryService, 'getEndpoints', [$decodedServices, $service]); + $this->assertSame($expected, $result); + } + + public static function dataTestGetEndpoints(): array { + return [ + [['services' => ['myService' => ['endpoints' => []]]], 'myService', []], + [['services' => ['myService' => ['endpoints' => ['foo' => '/bar']]]], 'myService', ['foo' => '/bar']], + [['services' => ['myService' => ['endpoints' => ['foo' => '/bar']]]], 'anotherService', []], + [['services' => ['myService' => ['endpoints' => ['foo' => '/bar</foo']]]], 'myService', []], + ]; + } +} diff --git a/tests/lib/OCS/ProviderTest.php b/tests/lib/OCS/ProviderTest.php new file mode 100644 index 00000000000..87e01d8301b --- /dev/null +++ b/tests/lib/OCS/ProviderTest.php @@ -0,0 +1,197 @@ +<?php + +/** + * SPDX-FileCopyrightText: 2017-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ + +namespace Test\OCS; + +use OC\OCS\Provider; +use OCP\App\IAppManager; +use OCP\AppFramework\Http\JSONResponse; +use OCP\IRequest; + +class ProviderTest extends \Test\TestCase { + /** @var IRequest */ + private $request; + /** @var IAppManager */ + private $appManager; + /** @var Provider */ + private $ocsProvider; + + protected function setUp(): void { + parent::setUp(); + + $this->request = $this->getMockBuilder('\\OCP\\IRequest')->getMock(); + $this->appManager = $this->getMockBuilder('\\OCP\\App\\IAppManager')->getMock(); + $this->ocsProvider = new Provider('ocs_provider', $this->request, $this->appManager); + } + + public function testBuildProviderListWithoutAnythingEnabled(): void { + $this->appManager + ->expects($this->exactly(4)) + ->method('isEnabledForUser') + ->willReturnMap([ + ['files_sharing', null, false], + ['federation', null, false], + ['activity', null, false], + ['provisioning_api', null, false], + ]); + + $expected = new JSONResponse( + [ + 'version' => 2, + 'services' => [ + 'PRIVATE_DATA' => [ + 'version' => 1, + 'endpoints' => [ + 'store' => '/ocs/v2.php/privatedata/setattribute', + 'read' => '/ocs/v2.php/privatedata/getattribute', + 'delete' => '/ocs/v2.php/privatedata/deleteattribute', + ], + ], + ], + ] + ); + + $this->assertEquals($expected, $this->ocsProvider->buildProviderList()); + } + + public function testBuildProviderListWithSharingEnabled(): void { + $this->appManager + ->expects($this->exactly(4)) + ->method('isEnabledForUser') + ->willReturnMap([ + ['files_sharing', null, true], + ['federation', null, false], + ['activity', null, false], + ['provisioning_api', null, false], + ]); + + $expected = new JSONResponse( + [ + 'version' => 2, + 'services' => [ + 'PRIVATE_DATA' => [ + 'version' => 1, + 'endpoints' => [ + 'store' => '/ocs/v2.php/privatedata/setattribute', + 'read' => '/ocs/v2.php/privatedata/getattribute', + 'delete' => '/ocs/v2.php/privatedata/deleteattribute', + ], + ], + 'FEDERATED_SHARING' => [ + 'version' => 1, + 'endpoints' => [ + 'share' => '/ocs/v2.php/cloud/shares', + 'webdav' => '/public.php/webdav/', + ], + ], + 'SHARING' => [ + 'version' => 1, + 'endpoints' => [ + 'share' => '/ocs/v2.php/apps/files_sharing/api/v1/shares', + ], + ], + ], + ] + ); + + $this->assertEquals($expected, $this->ocsProvider->buildProviderList()); + } + + public function testBuildProviderListWithFederationEnabled(): void { + $this->appManager + ->expects($this->exactly(4)) + ->method('isEnabledForUser') + ->willReturnMap([ + ['files_sharing', null, false], + ['federation', null, true], + ['activity', null, false], + ['provisioning_api', null, false], + ]); + + $expected = new JSONResponse( + [ + 'version' => 2, + 'services' => [ + 'PRIVATE_DATA' => [ + 'version' => 1, + 'endpoints' => [ + 'store' => '/ocs/v2.php/privatedata/setattribute', + 'read' => '/ocs/v2.php/privatedata/getattribute', + 'delete' => '/ocs/v2.php/privatedata/deleteattribute', + ], + ], + 'FEDERATED_SHARING' => [ + 'version' => 1, + 'endpoints' => [ + 'shared-secret' => '/ocs/v2.php/cloud/shared-secret', + 'system-address-book' => '/remote.php/dav/addressbooks/system/system/system', + 'carddav-user' => 'system' + ], + ], + ], + ] + ); + + $this->assertEquals($expected, $this->ocsProvider->buildProviderList()); + } + + public function testBuildProviderListWithEverythingEnabled(): void { + $this->appManager + ->expects($this->any()) + ->method('isEnabledForUser') + ->willReturn(true); + + $expected = new JSONResponse( + [ + 'version' => 2, + 'services' => [ + 'PRIVATE_DATA' => [ + 'version' => 1, + 'endpoints' => [ + 'store' => '/ocs/v2.php/privatedata/setattribute', + 'read' => '/ocs/v2.php/privatedata/getattribute', + 'delete' => '/ocs/v2.php/privatedata/deleteattribute', + ], + ], + 'FEDERATED_SHARING' => [ + 'version' => 1, + 'endpoints' => [ + 'share' => '/ocs/v2.php/cloud/shares', + 'webdav' => '/public.php/webdav/', + 'shared-secret' => '/ocs/v2.php/cloud/shared-secret', + 'system-address-book' => '/remote.php/dav/addressbooks/system/system/system', + 'carddav-user' => 'system' + ], + ], + 'SHARING' => [ + 'version' => 1, + 'endpoints' => [ + 'share' => '/ocs/v2.php/apps/files_sharing/api/v1/shares', + ], + ], + 'ACTIVITY' => [ + 'version' => 1, + 'endpoints' => [ + 'list' => '/ocs/v2.php/cloud/activity', + ], + ], + 'PROVISIONING' => [ + 'version' => 1, + 'endpoints' => [ + 'user' => '/ocs/v2.php/cloud/users', + 'groups' => '/ocs/v2.php/cloud/groups', + 'apps' => '/ocs/v2.php/cloud/apps', + ], + ], + ], + ] + ); + + $this->assertEquals($expected, $this->ocsProvider->buildProviderList()); + } +} |