‪TYPO3CMS  11.5
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 ArrayObject;
21 use Prophecy\Argument;
22 use Prophecy\PhpUnit\ProphecyTrait;
23 use Psr\Container\ContainerInterface;
27 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
28 
32 class ‪MiddlewareStackResolverTest extends UnitTestCase
33 {
34  use ProphecyTrait;
35 
39  public function ‪resolveReturnsMiddlewareStack(): void
40  {
41  $middlewares = new ArrayObject(array_replace_recursive(
42  [],
43  require __DIR__ . '/Fixtures/Package1/Configuration/RequestMiddlewares.php',
44  require __DIR__ . '/Fixtures/Package2/Configuration/RequestMiddlewares.php'
45  ));
46  $containerProphecy = $this->prophesize();
47  $containerProphecy->willImplement(ContainerInterface::class);
48  $containerProphecy->get('middlewares')->willReturn($middlewares);
49  $dependencyOrderingServiceProphecy = $this->prophesize(DependencyOrderingService::class);
50  $dependencyOrderingServiceProphecy->orderByDependencies(Argument::cetera())->willReturnArgument(0);
51  $phpFrontendCacheProphecy = $this->prophesize(PhpFrontend::class);
52  $phpFrontendCacheProphecy->has(Argument::cetera())->willReturn(false);
53  $phpFrontendCacheProphecy->set(Argument::cetera())->willReturn(false);
54 
55  $subject = new ‪MiddlewareStackResolver(
56  $containerProphecy->reveal(),
57  $dependencyOrderingServiceProphecy->reveal(),
58  $phpFrontendCacheProphecy->reveal(),
59  ''
60  );
61  $expected = [
62  'secondMiddleware' => 'anotherClassName',
63  'firstMiddleware' => 'aClassName',
64  ];
65  self::assertEquals($expected, $subject->resolve('testStack'));
66  }
67 
72  {
73  $middlewares = new ArrayObject();
74  $containerProphecy = $this->prophesize();
75  $containerProphecy->willImplement(ContainerInterface::class);
76  $containerProphecy->get('middlewares')->willReturn($middlewares);
77  $dependencyOrderingServiceProphecy = $this->prophesize(DependencyOrderingService::class);
78  $dependencyOrderingServiceProphecy->orderByDependencies(Argument::cetera())->willReturnArgument(0);
79  $phpFrontendCacheProphecy = $this->prophesize(PhpFrontend::class);
80  $phpFrontendCacheProphecy->has(Argument::cetera())->willReturn(false);
81  $phpFrontendCacheProphecy->set(Argument::cetera())->willReturn(false);
82 
83  $subject = new ‪MiddlewareStackResolver(
84  $containerProphecy->reveal(),
85  $dependencyOrderingServiceProphecy->reveal(),
86  $phpFrontendCacheProphecy->reveal(),
87  'PackageDependentCacheIdentifier'
88  );
89  // empty array expected
90  $expected = [];
91  self::assertEquals($expected, $subject->resolve('testStack'));
92  }
93 
97  public function ‪resolveAllowsDisablingAMiddleware(): void
98  {
99  $middlewares = new ArrayObject(array_replace_recursive(
100  [],
101  require __DIR__ . '/Fixtures/Package1/Configuration/RequestMiddlewares.php',
102  require __DIR__ . '/Fixtures/Package2Disables1/Configuration/RequestMiddlewares.php'
103  ));
104  $containerProphecy = $this->prophesize();
105  $containerProphecy->willImplement(ContainerInterface::class);
106  $containerProphecy->get('middlewares')->willReturn($middlewares);
107  $dependencyOrderingServiceProphecy = $this->prophesize(DependencyOrderingService::class);
108  $dependencyOrderingServiceProphecy->orderByDependencies(Argument::cetera())->willReturnArgument(0);
109  $phpFrontendCacheProphecy = $this->prophesize(PhpFrontend::class);
110  $phpFrontendCacheProphecy->has(Argument::cetera())->willReturn(false);
111  $phpFrontendCacheProphecy->set(Argument::cetera())->willReturn(false);
112 
113  $subject = new ‪MiddlewareStackResolver(
114  $containerProphecy->reveal(),
115  $dependencyOrderingServiceProphecy->reveal(),
116  $phpFrontendCacheProphecy->reveal(),
117  'PackageDependentCacheIdentifier'
118  );
119  $expected = [
120  // firstMiddleware is missing, RequestMiddlewares.php of Package2 sets disables=true on firstMiddleware
121  'secondMiddleware' => 'anotherClassName',
122  ];
123  self::assertEquals($expected, $subject->resolve('testStack'));
124  }
125 
129  public function ‪resolveAllowsReplacingAMiddleware(): void
130  {
131  $middlewares = new ArrayObject(array_replace_recursive(
132  [],
133  require __DIR__ . '/Fixtures/Package1/Configuration/RequestMiddlewares.php',
134  require __DIR__ . '/Fixtures/Package2Replaces1/Configuration/RequestMiddlewares.php'
135  ));
136  $containerProphecy = $this->prophesize();
137  $containerProphecy->willImplement(ContainerInterface::class);
138  $containerProphecy->get('middlewares')->willReturn($middlewares);
139  $dependencyOrderingServiceProphecy = $this->prophesize(DependencyOrderingService::class);
140  $dependencyOrderingServiceProphecy->orderByDependencies(Argument::cetera())->willReturnArgument(0);
141  $phpFrontendCacheProphecy = $this->prophesize(PhpFrontend::class);
142  $phpFrontendCacheProphecy->has(Argument::cetera())->willReturn(false);
143  $phpFrontendCacheProphecy->set(Argument::cetera())->willReturn(false);
144 
145  $subject = new ‪MiddlewareStackResolver(
146  $containerProphecy->reveal(),
147  $dependencyOrderingServiceProphecy->reveal(),
148  $phpFrontendCacheProphecy->reveal(),
149  'PackageDependentCacheIdentifier'
150  );
151  $expected = [
152  // firstMiddleware has been replaced, RequestMiddlewares.php of $package2 sets a new value for firstMiddleware
153  'firstMiddleware' => 'replacedClassName',
154  'secondMiddleware' => 'anotherClassName',
155  ];
156  self::assertEquals($expected, $subject->resolve('testStack'));
157  }
158 }
‪TYPO3\CMS\Core\Tests\Unit\Http
Definition: ApplicationTypeTest.php:18
‪TYPO3\CMS\Core\Cache\Frontend\PhpFrontend
Definition: PhpFrontend.php:25
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest\resolveReturnsMiddlewareStack
‪resolveReturnsMiddlewareStack()
Definition: MiddlewareStackResolverTest.php:38
‪TYPO3\CMS\Core\Http\MiddlewareStackResolver
Definition: MiddlewareStackResolver.php:32
‪TYPO3\CMS\Core\Service\DependencyOrderingService
Definition: DependencyOrderingService.php:32
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest
Definition: MiddlewareStackResolverTest.php:33
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest\resolveAllowsDisablingAMiddleware
‪resolveAllowsDisablingAMiddleware()
Definition: MiddlewareStackResolverTest.php:96
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest\resolveAllowsReplacingAMiddleware
‪resolveAllowsReplacingAMiddleware()
Definition: MiddlewareStackResolverTest.php:128
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest\resolveReturnsEmptyMiddlewareStackForZeroPackages
‪resolveReturnsEmptyMiddlewareStackForZeroPackages()
Definition: MiddlewareStackResolverTest.php:70