aboutsummaryrefslogtreecommitdiffstats
path: root/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php')
-rw-r--r--apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php108
1 files changed, 108 insertions, 0 deletions
diff --git a/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php b/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php
new file mode 100644
index 00000000000..c027e518a3d
--- /dev/null
+++ b/apps/provisioning_api/tests/Middleware/ProvisioningApiMiddlewareTest.php
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * SPDX-FileCopyrightText: 2016 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-License-Identifier: AGPL-3.0-or-later
+ */
+namespace OCA\Provisioning_API\Tests\Middleware;
+
+use OCA\Provisioning_API\Middleware\Exceptions\NotSubAdminException;
+use OCA\Provisioning_API\Middleware\ProvisioningApiMiddleware;
+use OCP\AppFramework\Controller;
+use OCP\AppFramework\Http;
+use OCP\AppFramework\OCS\OCSException;
+use OCP\AppFramework\Utility\IControllerMethodReflector;
+use Test\TestCase;
+
+class ProvisioningApiMiddlewareTest extends TestCase {
+
+ /** @var IControllerMethodReflector|\PHPUnit\Framework\MockObject\MockObject */
+ private $reflector;
+
+ protected function setUp(): void {
+ parent::setUp();
+
+ $this->reflector = $this->createMock(IControllerMethodReflector::class);
+ }
+
+ public static function dataAnnotation(): array {
+ return [
+ [false, false, false, false, false],
+ [false, false, true, false, false],
+ [false, true, true, false, false],
+ [true, false, false, false, true],
+ [true, false, true, false, false],
+ [true, true, false, false, false],
+ [true, true, true, false, false],
+ [false, false, false, true, false],
+ [false, false, true, true, false],
+ [false, true, true, true, false],
+ [true, false, false, true, false],
+ [true, false, true, true, false],
+ [true, true, false, true, false],
+ [true, true, true, true, false],
+ ];
+ }
+
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataAnnotation')]
+ public function testBeforeController(bool $subadminRequired, bool $isAdmin, bool $isSubAdmin, bool $hasSettingAuthorizationAnnotation, bool $shouldThrowException): void {
+ $middleware = new ProvisioningApiMiddleware(
+ $this->reflector,
+ $isAdmin,
+ $isSubAdmin
+ );
+
+ $this->reflector->method('hasAnnotation')
+ ->willReturnCallback(function ($annotation) use ($subadminRequired, $hasSettingAuthorizationAnnotation) {
+ if ($annotation === 'NoSubAdminRequired') {
+ return !$subadminRequired;
+ }
+ if ($annotation === 'AuthorizedAdminSetting') {
+ return $hasSettingAuthorizationAnnotation;
+ }
+ return false;
+ });
+
+ try {
+ $middleware->beforeController(
+ $this->createMock(Controller::class),
+ 'myMethod'
+ );
+ $this->assertFalse($shouldThrowException);
+ } catch (NotSubAdminException $e) {
+ $this->assertTrue($shouldThrowException);
+ }
+ }
+
+ public static function dataAfterException(): array {
+ return [
+ [new NotSubAdminException(), false],
+ [new \Exception('test', 42), true],
+ ];
+ }
+
+ #[\PHPUnit\Framework\Attributes\DataProvider('dataAfterException')]
+ public function testAfterException(\Exception $exception, bool $forwared): void {
+ $middleware = new ProvisioningApiMiddleware(
+ $this->reflector,
+ false,
+ false
+ );
+
+ try {
+ $middleware->afterException(
+ $this->createMock(Controller::class),
+ 'myMethod',
+ $exception
+ );
+ $this->fail();
+ } catch (OCSException $e) {
+ $this->assertFalse($forwared);
+ $this->assertSame($exception->getMessage(), $e->getMessage());
+ $this->assertSame(Http::STATUS_FORBIDDEN, $e->getCode());
+ } catch (\Exception $e) {
+ $this->assertTrue($forwared);
+ $this->assertSame($exception, $e);
+ }
+ }
+}