aboutsummaryrefslogtreecommitdiffstats
path: root/apps/files_sharing/tests/ExternalStorageTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/files_sharing/tests/ExternalStorageTest.php')
-rw-r--r--apps/files_sharing/tests/ExternalStorageTest.php118
1 files changed, 118 insertions, 0 deletions
diff --git a/apps/files_sharing/tests/ExternalStorageTest.php b/apps/files_sharing/tests/ExternalStorageTest.php
new file mode 100644
index 00000000000..1d9d2eed7bd
--- /dev/null
+++ b/apps/files_sharing/tests/ExternalStorageTest.php
@@ -0,0 +1,118 @@
+<?php
+
+/**
+ * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-only
+ */
+namespace OCA\Files_Sharing\Tests;
+
+use OC\Federation\CloudId;
+use OCA\Files_Sharing\External\Manager as ExternalShareManager;
+use OCA\Files_Sharing\External\Storage;
+use OCP\Http\Client\IClient;
+use OCP\Http\Client\IClientService;
+use OCP\Http\Client\IResponse;
+
+/**
+ * Tests for the external Storage class for remote shares.
+ *
+ * @group DB
+ */
+class ExternalStorageTest extends \Test\TestCase {
+ public static function optionsProvider() {
+ return [
+ [
+ 'http://remoteserver:8080/owncloud',
+ 'http://remoteserver:8080/owncloud/public.php/webdav/',
+ ],
+ // extra slash
+ [
+ 'http://remoteserver:8080/owncloud/',
+ 'http://remoteserver:8080/owncloud/public.php/webdav/',
+ ],
+ // extra path
+ [
+ 'http://remoteserver:8080/myservices/owncloud/',
+ 'http://remoteserver:8080/myservices/owncloud/public.php/webdav/',
+ ],
+ // root path
+ [
+ 'http://remoteserver:8080/',
+ 'http://remoteserver:8080/public.php/webdav/',
+ ],
+ // without port
+ [
+ 'http://remoteserver/oc.test',
+ 'http://remoteserver/oc.test/public.php/webdav/',
+ ],
+ // https
+ [
+ 'https://remoteserver/',
+ 'https://remoteserver/public.php/webdav/',
+ ],
+ ];
+ }
+
+ private function getTestStorage($uri) {
+ $certificateManager = \OC::$server->getCertificateManager();
+ $httpClientService = $this->createMock(IClientService::class);
+ $manager = $this->createMock(ExternalShareManager::class);
+ $client = $this->createMock(IClient::class);
+ $response = $this->createMock(IResponse::class);
+ $client
+ ->expects($this->any())
+ ->method('get')
+ ->willReturn($response);
+ $client
+ ->expects($this->any())
+ ->method('post')
+ ->willReturn($response);
+ $httpClientService
+ ->expects($this->any())
+ ->method('newClient')
+ ->willReturn($client);
+
+ return new TestSharingExternalStorage(
+ [
+ 'cloudId' => new CloudId('testOwner@' . $uri, 'testOwner', $uri),
+ 'remote' => $uri,
+ 'owner' => 'testOwner',
+ 'mountpoint' => 'remoteshare',
+ 'token' => 'abcdef',
+ 'password' => '',
+ 'manager' => $manager,
+ 'certificateManager' => $certificateManager,
+ 'HttpClientService' => $httpClientService,
+ ]
+ );
+ }
+
+ #[\PHPUnit\Framework\Attributes\DataProvider('optionsProvider')]
+ public function testStorageMountOptions($inputUri, $baseUri): void {
+ $storage = $this->getTestStorage($inputUri);
+ $this->assertEquals($baseUri, $storage->getBaseUri());
+ }
+
+ public function testIfTestReturnsTheValue(): void {
+ $storage = $this->getTestStorage('https://remoteserver');
+ $result = $storage->test();
+ $this->assertSame(true, $result);
+ }
+}
+
+/**
+ * Dummy subclass to make it possible to access private members
+ */
+class TestSharingExternalStorage extends Storage {
+ public function getBaseUri() {
+ return $this->createBaseUri();
+ }
+
+ public function stat(string $path): array|false {
+ if ($path === '') {
+ return ['key' => 'value'];
+ }
+ return parent::stat($path);
+ }
+}