diff options
Diffstat (limited to 'apps/files_external/tests/Auth')
-rw-r--r-- | apps/files_external/tests/Auth/AuthMechanismTest.php | 63 | ||||
-rw-r--r-- | apps/files_external/tests/Auth/Password/GlobalAuthTest.php | 96 |
2 files changed, 159 insertions, 0 deletions
diff --git a/apps/files_external/tests/Auth/AuthMechanismTest.php b/apps/files_external/tests/Auth/AuthMechanismTest.php new file mode 100644 index 00000000000..e999cecf181 --- /dev/null +++ b/apps/files_external/tests/Auth/AuthMechanismTest.php @@ -0,0 +1,63 @@ +<?php + +declare(strict_types=1); +/** + * SPDX-FileCopyrightText: 2020-2024 Nextcloud GmbH and Nextcloud contributors + * SPDX-FileCopyrightText: 2016 ownCloud, Inc. + * SPDX-License-Identifier: AGPL-3.0-only + */ +namespace OCA\Files_External\Tests\Auth; + +use OCA\Files_External\Lib\Auth\AuthMechanism; +use OCA\Files_External\Lib\Backend\Backend; +use OCA\Files_External\Lib\StorageConfig; + +class AuthMechanismTest extends \Test\TestCase { + public function testJsonSerialization(): void { + $mechanism = $this->getMockBuilder(AuthMechanism::class) + ->onlyMethods(['jsonSerializeDefinition']) + ->getMock(); + $mechanism->expects($this->once()) + ->method('jsonSerializeDefinition') + ->willReturn(['foo' => 'bar']); + + $mechanism->setScheme('scheme'); + + $json = $mechanism->jsonSerialize(); + $this->assertEquals('bar', $json['foo']); + $this->assertEquals('scheme', $json['scheme']); + } + + public static function validateStorageProvider(): array { + return [ + [true, 'scheme', true], + [false, 'scheme', false], + [true, 'foobar', true], + [false, 'barfoo', true], + ]; + } + + #[\PHPUnit\Framework\Attributes\DataProvider('validateStorageProvider')] + public function testValidateStorage(bool $expectedSuccess, string $scheme, bool $definitionSuccess): void { + $mechanism = $this->getMockBuilder(AuthMechanism::class) + ->onlyMethods(['validateStorageDefinition']) + ->getMock(); + $mechanism->expects($this->atMost(1)) + ->method('validateStorageDefinition') + ->willReturn($definitionSuccess); + + $mechanism->setScheme($scheme); + + $backend = $this->createMock(Backend::class); + $backend->expects($this->once()) + ->method('getAuthSchemes') + ->willReturn(['scheme' => true, 'foobar' => true]); + + $storageConfig = $this->createMock(StorageConfig::class); + $storageConfig->expects($this->once()) + ->method('getBackend') + ->willReturn($backend); + + $this->assertEquals($expectedSuccess, $mechanism->validateStorage($storageConfig)); + } +} diff --git a/apps/files_external/tests/Auth/Password/GlobalAuthTest.php b/apps/files_external/tests/Auth/Password/GlobalAuthTest.php new file mode 100644 index 00000000000..6d83655403e --- /dev/null +++ b/apps/files_external/tests/Auth/Password/GlobalAuthTest.php @@ -0,0 +1,96 @@ +<?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-only + */ +namespace OCA\Files_External\Tests\Auth\Password; + +use OCA\Files_External\Lib\Auth\Password\GlobalAuth; +use OCA\Files_External\Lib\InsufficientDataForMeaningfulAnswerException; +use OCA\Files_External\Lib\StorageConfig; +use OCP\IL10N; +use OCP\Security\ICredentialsManager; +use PHPUnit\Framework\MockObject\MockObject; +use Test\TestCase; + +class GlobalAuthTest extends TestCase { + private IL10N&MockObject $l10n; + private ICredentialsManager&MockObject $credentialsManager; + private GlobalAuth $instance; + + protected function setUp(): void { + parent::setUp(); + $this->l10n = $this->createMock(IL10N::class); + $this->credentialsManager = $this->createMock(ICredentialsManager::class); + $this->instance = new GlobalAuth($this->l10n, $this->credentialsManager); + } + + private function getStorageConfig($type, $config = []) { + /** @var StorageConfig&MockObject $storageConfig */ + $storageConfig = $this->createMock(StorageConfig::class); + $storageConfig->expects($this->any()) + ->method('getType') + ->willReturn($type); + $storageConfig->expects($this->any()) + ->method('getBackendOptions') + ->willReturnCallback(function () use (&$config) { + return $config; + }); + $storageConfig->expects($this->any()) + ->method('getBackendOption') + ->willReturnCallback(function ($key) use (&$config) { + return $config[$key]; + }); + $storageConfig->expects($this->any()) + ->method('setBackendOption') + ->willReturnCallback(function ($key, $value) use (&$config): void { + $config[$key] = $value; + }); + + return $storageConfig; + } + + public function testNoCredentials(): void { + $this->credentialsManager->expects($this->once()) + ->method('retrieve') + ->willReturn(null); + + $storage = $this->getStorageConfig(StorageConfig::MOUNT_TYPE_ADMIN); + + $this->instance->manipulateStorageConfig($storage); + $this->assertEquals([], $storage->getBackendOptions()); + } + + public function testSavedCredentials(): void { + $this->credentialsManager->expects($this->once()) + ->method('retrieve') + ->willReturn([ + 'user' => 'a', + 'password' => 'b' + ]); + + $storage = $this->getStorageConfig(StorageConfig::MOUNT_TYPE_ADMIN); + + $this->instance->manipulateStorageConfig($storage); + $this->assertEquals([ + 'user' => 'a', + 'password' => 'b' + ], $storage->getBackendOptions()); + } + + + public function testNoCredentialsPersonal(): void { + $this->expectException(InsufficientDataForMeaningfulAnswerException::class); + + $this->credentialsManager->expects($this->never()) + ->method('retrieve'); + + $storage = $this->getStorageConfig(StorageConfig::MOUNT_TYPE_PERSONAL); + + $this->instance->manipulateStorageConfig($storage); + $this->assertEquals([], $storage->getBackendOptions()); + } +} |