aboutsummaryrefslogtreecommitdiffstats
path: root/apps/settings/tests
diff options
context:
space:
mode:
authorFerdinand Thiessen <opensource@fthiessen.de>2024-02-29 13:35:36 +0100
committerFerdinand Thiessen <opensource@fthiessen.de>2024-02-29 13:54:01 +0100
commitef2c312b18da7cfc8ef7da18068be282d0c49f55 (patch)
treeead5febbf320a71a962d4f9adf9a63dd759e8784 /apps/settings/tests
parentfa0e3d66ba2af3b51121fe19f5afd50309a36475 (diff)
downloadnextcloud-server-ef2c312b18da7cfc8ef7da18068be282d0c49f55.tar.gz
nextcloud-server-ef2c312b18da7cfc8ef7da18068be282d0c49f55.zip
feat(settings): Migrate data directory protection check to `SetupCheck`
Signed-off-by: Ferdinand Thiessen <opensource@fthiessen.de>
Diffstat (limited to 'apps/settings/tests')
-rw-r--r--apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php136
1 files changed, 136 insertions, 0 deletions
diff --git a/apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php b/apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php
new file mode 100644
index 00000000000..8eec24a51c4
--- /dev/null
+++ b/apps/settings/tests/SetupChecks/DataDirectoryProtectedTest.php
@@ -0,0 +1,136 @@
+<?php
+
+declare(strict_types=1);
+
+/**
+ * @copyright Copyright (c) 2024 Ferdinand Thiessen <opensource@fthiessen.de>
+ *
+ * @author Ferdinand Thiessen <opensource@fthiessen.de>
+ *
+ * @license AGPL-3.0-or-later
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ */
+namespace OCA\Settings\Tests;
+
+use OCA\Settings\SetupChecks\DataDirectoryProtected;
+use OCP\Http\Client\IClientService;
+use OCP\Http\Client\IResponse;
+use OCP\IConfig;
+use OCP\IL10N;
+use OCP\IURLGenerator;
+use OCP\SetupCheck\SetupResult;
+use PHPUnit\Framework\MockObject\MockObject;
+use Psr\Log\LoggerInterface;
+use Test\TestCase;
+
+class DataDirectoryProtectedTest extends TestCase {
+ private IL10N|MockObject $l10n;
+ private IConfig|MockObject $config;
+ private IURLGenerator|MockObject $urlGenerator;
+ private IClientService|MockObject $clientService;
+ private LoggerInterface|MockObject $logger;
+ private DataDirectoryProtected|MockObject $setupcheck;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ /** @var IL10N|MockObject */
+ $this->l10n = $this->getMockBuilder(IL10N::class)
+ ->disableOriginalConstructor()->getMock();
+ $this->l10n->expects($this->any())
+ ->method('t')
+ ->willReturnCallback(function ($message, array $replace) {
+ return vsprintf($message, $replace);
+ });
+
+ $this->config = $this->createMock(IConfig::class);
+ $this->urlGenerator = $this->createMock(IURLGenerator::class);
+ $this->clientService = $this->createMock(IClientService::class);
+ $this->logger = $this->createMock(LoggerInterface::class);
+
+ $this->setupcheck = $this->getMockBuilder(DataDirectoryProtected::class)
+ ->onlyMethods(['runHEAD'])
+ ->setConstructorArgs([
+ $this->l10n,
+ $this->config,
+ $this->urlGenerator,
+ $this->clientService,
+ $this->logger,
+ ])
+ ->getMock();
+ }
+
+ /**
+ * @dataProvider dataTestStatusCode
+ */
+ public function testStatusCode(array $status, string $expected): void {
+ $responses = array_map(function ($state) {
+ $response = $this->createMock(IResponse::class);
+ $response->expects($this->any())->method('getStatusCode')->willReturn($state);
+ return $response;
+ }, $status);
+
+ $this->setupcheck
+ ->expects($this->once())
+ ->method('runHEAD')
+ ->will($this->generate($responses));
+
+ $this->config
+ ->expects($this->once())
+ ->method('getSystemValue')
+ ->willReturn('');
+
+ $result = $this->setupcheck->run();
+ $this->assertEquals($expected, $result->getSeverity());
+ }
+
+ public function dataTestStatusCode(): array {
+ return [
+ 'success: forbidden access' => [[403], SetupResult::SUCCESS],
+ 'error: can access' => [[200], SetupResult::ERROR],
+ 'error: one forbidden one can access' => [[403, 200], SetupResult::ERROR],
+ 'warning: connection issue' => [[], SetupResult::WARNING],
+ ];
+ }
+
+ public function testNoResponse(): void {
+ $response = $this->createMock(IResponse::class);
+ $response->expects($this->any())->method('getStatusCode')->willReturn(200);
+
+ $this->setupcheck
+ ->expects($this->once())
+ ->method('runHEAD')
+ ->will($this->generate([]));
+
+ $this->config
+ ->expects($this->once())
+ ->method('getSystemValue')
+ ->willReturn('');
+
+ $result = $this->setupcheck->run();
+ $this->assertEquals(SetupResult::WARNING, $result->getSeverity());
+ $this->assertMatchesRegularExpression('/^Could not check/', $result->getDescription());
+ }
+
+ /**
+ * Helper function creates a nicer interface for mocking Generator behavior
+ */
+ protected function generate(array $yield_values) {
+ return $this->returnCallback(function () use ($yield_values) {
+ yield from $yield_values;
+ });
+ }
+}