‪TYPO3CMS  ‪main
MiddlewareStackResolverTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
20 use PHPUnit\Framework\Attributes\Test;
21 use Psr\Container\ContainerInterface;
25 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
26 
27 final class ‪MiddlewareStackResolverTest extends UnitTestCase
28 {
29  #[Test]
30  public function ‪resolveReturnsMiddlewareStack(): void
31  {
32  $middlewares = new \ArrayObject(array_replace_recursive(
33  [],
34  require __DIR__ . '/Fixtures/Package1/Configuration/RequestMiddlewares.php',
35  require __DIR__ . '/Fixtures/Package2/Configuration/RequestMiddlewares.php'
36  ));
37  $containerMock = $this->createMock(ContainerInterface::class);
38  $containerMock->method('get')->with('middlewares')->willReturn($middlewares);
39  $dependencyOrderingServiceMock = $this->createMock(DependencyOrderingService::class);
40  $dependencyOrderingServiceMock->method('orderByDependencies')->with(self::anything())->willReturnArgument(0);
41 
42  $subject = new ‪MiddlewareStackResolver(
43  $containerMock,
44  $dependencyOrderingServiceMock,
45  new ‪NullFrontend('test'),
46  ''
47  );
48  $expected = [
49  'secondMiddleware' => 'anotherClassName',
50  'firstMiddleware' => 'aClassName',
51  ];
52  self::assertEquals($expected, $subject->resolve('testStack'));
53  }
54 
55  #[Test]
57  {
58  $middlewares = new \ArrayObject();
59  $containerMock = $this->createMock(ContainerInterface::class);
60  $containerMock->method('get')->with('middlewares')->willReturn($middlewares);
61  $dependencyOrderingServiceMock = $this->createMock(DependencyOrderingService::class);
62  $dependencyOrderingServiceMock->method('orderByDependencies')->with(self::anything())->willReturnArgument(0);
63 
64  $subject = new ‪MiddlewareStackResolver(
65  $containerMock,
66  $dependencyOrderingServiceMock,
67  new ‪NullFrontend('test'),
68  'PackageDependentCacheIdentifier'
69  );
70  // empty array expected
71  $expected = [];
72  self::assertEquals($expected, $subject->resolve('testStack'));
73  }
74 
75  #[Test]
76  public function ‪resolveAllowsDisablingAMiddleware(): void
77  {
78  $middlewares = new \ArrayObject(array_replace_recursive(
79  [],
80  require __DIR__ . '/Fixtures/Package1/Configuration/RequestMiddlewares.php',
81  require __DIR__ . '/Fixtures/Package2Disables1/Configuration/RequestMiddlewares.php'
82  ));
83  $containerMock = $this->createMock(ContainerInterface::class);
84  $containerMock->method('get')->with('middlewares')->willReturn($middlewares);
85  $dependencyOrderingServiceMock = $this->createMock(DependencyOrderingService::class);
86  $dependencyOrderingServiceMock->method('orderByDependencies')->with(self::anything())->willReturnArgument(0);
87 
88  $subject = new ‪MiddlewareStackResolver(
89  $containerMock,
90  $dependencyOrderingServiceMock,
91  new ‪NullFrontend('test'),
92  'PackageDependentCacheIdentifier'
93  );
94  $expected = [
95  // firstMiddleware is missing, RequestMiddlewares.php of Package2 sets disables=true on firstMiddleware
96  'secondMiddleware' => 'anotherClassName',
97  ];
98  self::assertEquals($expected, $subject->resolve('testStack'));
99  }
100 
101  #[Test]
102  public function ‪resolveAllowsReplacingAMiddleware(): void
103  {
104  $middlewares = new \ArrayObject(array_replace_recursive(
105  [],
106  require __DIR__ . '/Fixtures/Package1/Configuration/RequestMiddlewares.php',
107  require __DIR__ . '/Fixtures/Package2Replaces1/Configuration/RequestMiddlewares.php'
108  ));
109  $containerMock = $this->createMock(ContainerInterface::class);
110  $containerMock->method('get')->with('middlewares')->willReturn($middlewares);
111  $dependencyOrderingServiceMock = $this->createMock(DependencyOrderingService::class);
112  $dependencyOrderingServiceMock->method('orderByDependencies')->with(self::anything())->willReturnArgument(0);
113 
114  $subject = new ‪MiddlewareStackResolver(
115  $containerMock,
116  $dependencyOrderingServiceMock,
117  new ‪NullFrontend('test'),
118  'PackageDependentCacheIdentifier'
119  );
120  $expected = [
121  // firstMiddleware has been replaced, RequestMiddlewares.php of $package2 sets a new value for firstMiddleware
122  'firstMiddleware' => 'replacedClassName',
123  'secondMiddleware' => 'anotherClassName',
124  ];
125  self::assertEquals($expected, $subject->resolve('testStack'));
126  }
127 }
‪TYPO3\CMS\Core\Tests\Unit\Http
Definition: ApplicationTypeTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest\resolveReturnsMiddlewareStack
‪resolveReturnsMiddlewareStack()
Definition: MiddlewareStackResolverTest.php:30
‪TYPO3\CMS\Core\Http\MiddlewareStackResolver
Definition: MiddlewareStackResolver.php:31
‪TYPO3\CMS\Core\Cache\Frontend\NullFrontend
Definition: NullFrontend.php:30
‪TYPO3\CMS\Core\Service\DependencyOrderingService
Definition: DependencyOrderingService.php:32
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest
Definition: MiddlewareStackResolverTest.php:28
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest\resolveAllowsDisablingAMiddleware
‪resolveAllowsDisablingAMiddleware()
Definition: MiddlewareStackResolverTest.php:76
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest\resolveAllowsReplacingAMiddleware
‪resolveAllowsReplacingAMiddleware()
Definition: MiddlewareStackResolverTest.php:102
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest\resolveReturnsEmptyMiddlewareStackForZeroPackages
‪resolveReturnsEmptyMiddlewareStackForZeroPackages()
Definition: MiddlewareStackResolverTest.php:56