aboutsummaryrefslogtreecommitdiffstats
path: root/tests/lib/AppFramework/DependencyInjection/DIContainerTest.php
diff options
context:
space:
mode:
Diffstat (limited to 'tests/lib/AppFramework/DependencyInjection/DIContainerTest.php')
-rw-r--r--tests/lib/AppFramework/DependencyInjection/DIContainerTest.php116
1 files changed, 84 insertions, 32 deletions
diff --git a/tests/lib/AppFramework/DependencyInjection/DIContainerTest.php b/tests/lib/AppFramework/DependencyInjection/DIContainerTest.php
index 3004123b81b..31188b12f14 100644
--- a/tests/lib/AppFramework/DependencyInjection/DIContainerTest.php
+++ b/tests/lib/AppFramework/DependencyInjection/DIContainerTest.php
@@ -1,75 +1,63 @@
<?php
/**
- * ownCloud - App Framework
- *
- * @author Bernhard Posselt
- * @author Morris Jobke
- * @copyright 2012 Bernhard Posselt <dev@bernhard-posselt.com>
- * @copyright 2013 Morris Jobke <morris.jobke@gmail.com>
- *
- * This library is free software; you can redistribute it and/or
- * modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
- * License as published by the Free Software Foundation; either
- * version 3 of the License, or any later version.
- *
- * This library 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 library. If not, see <http://www.gnu.org/licenses/>.
- *
+ * SPDX-FileCopyrightText: 2016-2024 Nextcloud GmbH and Nextcloud contributors
+ * SPDX-FileCopyrightText: 2016 ownCloud, Inc.
+ * SPDX-License-Identifier: AGPL-3.0-or-later
*/
namespace Test\AppFramework\DependencyInjection;
+use OC\AppFramework\Bootstrap\Coordinator;
+use OC\AppFramework\Bootstrap\MiddlewareRegistration;
+use OC\AppFramework\Bootstrap\RegistrationContext;
use OC\AppFramework\DependencyInjection\DIContainer;
use OC\AppFramework\Http\Request;
use OC\AppFramework\Middleware\Security\SecurityMiddleware;
+use OCP\AppFramework\Middleware;
use OCP\AppFramework\QueryException;
use OCP\IConfig;
-use OCP\Security\ISecureRandom;
+use OCP\IRequestId;
+use PHPUnit\Framework\MockObject\MockObject;
/**
* @group DB
*/
class DIContainerTest extends \Test\TestCase {
-
- /** @var DIContainer|\PHPUnit\Framework\MockObject\MockObject */
- private $container;
+ private DIContainer&MockObject $container;
protected function setUp(): void {
parent::setUp();
$this->container = $this->getMockBuilder(DIContainer::class)
- ->setMethods(['isAdminUser'])
+ ->onlyMethods(['isAdminUser'])
->setConstructorArgs(['name'])
->getMock();
}
- public function testProvidesRequest() {
+ public function testProvidesRequest(): void {
$this->assertTrue(isset($this->container['Request']));
}
- public function testProvidesMiddlewareDispatcher() {
+ public function testProvidesMiddlewareDispatcher(): void {
$this->assertTrue(isset($this->container['MiddlewareDispatcher']));
}
- public function testProvidesAppName() {
+ public function testProvidesAppName(): void {
$this->assertTrue(isset($this->container['AppName']));
+ $this->assertTrue(isset($this->container['appName']));
}
- public function testAppNameIsSetCorrectly() {
+ public function testAppNameIsSetCorrectly(): void {
$this->assertEquals('name', $this->container['AppName']);
+ $this->assertEquals('name', $this->container['appName']);
}
- public function testMiddlewareDispatcherIncludesSecurityMiddleware() {
+ public function testMiddlewareDispatcherIncludesSecurityMiddleware(): void {
$this->container['Request'] = new Request(
['method' => 'GET'],
- $this->createMock(ISecureRandom::class),
+ $this->createMock(IRequestId::class),
$this->createMock(IConfig::class)
);
$dispatcher = $this->container['MiddlewareDispatcher'];
@@ -85,7 +73,71 @@ class DIContainerTest extends \Test\TestCase {
$this->assertTrue($found);
}
- public function testInvalidAppClass() {
+ public function testMiddlewareDispatcherIncludesBootstrapMiddlewares(): void {
+ $coordinator = $this->createMock(Coordinator::class);
+ $this->container[Coordinator::class] = $coordinator;
+ $this->container['Request'] = $this->createMock(Request::class);
+ $registrationContext = $this->createMock(RegistrationContext::class);
+ $registrationContext->method('getMiddlewareRegistrations')
+ ->willReturn([
+ new MiddlewareRegistration($this->container['appName'], 'foo', false),
+ new MiddlewareRegistration('otherapp', 'bar', false),
+ ]);
+ $this->container['foo'] = new class extends Middleware {
+ };
+ $this->container['bar'] = new class extends Middleware {
+ };
+ $coordinator->method('getRegistrationContext')->willReturn($registrationContext);
+
+ $dispatcher = $this->container['MiddlewareDispatcher'];
+
+ $middlewares = $dispatcher->getMiddlewares();
+ self::assertNotEmpty($middlewares);
+ foreach ($middlewares as $middleware) {
+ if ($middleware === $this->container['bar']) {
+ $this->fail('Container must not register this middleware');
+ }
+ if ($middleware === $this->container['foo']) {
+ // It is done
+ return;
+ }
+ }
+ $this->fail('Bootstrap registered middleware not found');
+ }
+
+ public function testMiddlewareDispatcherIncludesGlobalBootstrapMiddlewares(): void {
+ $coordinator = $this->createMock(Coordinator::class);
+ $this->container[Coordinator::class] = $coordinator;
+ $this->container['Request'] = $this->createMock(Request::class);
+ $registrationContext = $this->createMock(RegistrationContext::class);
+ $registrationContext->method('getMiddlewareRegistrations')
+ ->willReturn([
+ new MiddlewareRegistration('otherapp', 'foo', true),
+ new MiddlewareRegistration('otherapp', 'bar', false),
+ ]);
+ $this->container['foo'] = new class extends Middleware {
+ };
+ $this->container['bar'] = new class extends Middleware {
+ };
+ $coordinator->method('getRegistrationContext')->willReturn($registrationContext);
+
+ $dispatcher = $this->container['MiddlewareDispatcher'];
+
+ $middlewares = $dispatcher->getMiddlewares();
+ self::assertNotEmpty($middlewares);
+ foreach ($middlewares as $middleware) {
+ if ($middleware === $this->container['bar']) {
+ $this->fail('Container must not register this middleware');
+ }
+ if ($middleware === $this->container['foo']) {
+ // It is done
+ return;
+ }
+ }
+ $this->fail('Bootstrap registered middleware not found');
+ }
+
+ public function testInvalidAppClass(): void {
$this->expectException(QueryException::class);
$this->container->query('\OCA\Name\Foo');
}