‪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 Psr\Container\ContainerInterface;
24 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
25 
26 final class ‪MiddlewareStackResolverTest extends UnitTestCase
27 {
31  public function ‪resolveReturnsMiddlewareStack(): void
32  {
33  $middlewares = new \ArrayObject(array_replace_recursive(
34  [],
35  require __DIR__ . '/Fixtures/Package1/Configuration/RequestMiddlewares.php',
36  require __DIR__ . '/Fixtures/Package2/Configuration/RequestMiddlewares.php'
37  ));
38  $containerMock = $this->createMock(ContainerInterface::class);
39  $containerMock->method('get')->with('middlewares')->willReturn($middlewares);
40  $dependencyOrderingServiceMock = $this->createMock(DependencyOrderingService::class);
41  $dependencyOrderingServiceMock->method('orderByDependencies')->with(self::anything())->willReturnArgument(0);
42 
43  $subject = new ‪MiddlewareStackResolver(
44  $containerMock,
45  $dependencyOrderingServiceMock,
46  new ‪NullFrontend('test'),
47  ''
48  );
49  $expected = [
50  'secondMiddleware' => 'anotherClassName',
51  'firstMiddleware' => 'aClassName',
52  ];
53  self::assertEquals($expected, $subject->resolve('testStack'));
54  }
55 
60  {
61  $middlewares = new \ArrayObject();
62  $containerMock = $this->createMock(ContainerInterface::class);
63  $containerMock->method('get')->with('middlewares')->willReturn($middlewares);
64  $dependencyOrderingServiceMock = $this->createMock(DependencyOrderingService::class);
65  $dependencyOrderingServiceMock->method('orderByDependencies')->with(self::anything())->willReturnArgument(0);
66 
67  $subject = new ‪MiddlewareStackResolver(
68  $containerMock,
69  $dependencyOrderingServiceMock,
70  new ‪NullFrontend('test'),
71  'PackageDependentCacheIdentifier'
72  );
73  // empty array expected
74  $expected = [];
75  self::assertEquals($expected, $subject->resolve('testStack'));
76  }
77 
81  public function ‪resolveAllowsDisablingAMiddleware(): void
82  {
83  $middlewares = new \ArrayObject(array_replace_recursive(
84  [],
85  require __DIR__ . '/Fixtures/Package1/Configuration/RequestMiddlewares.php',
86  require __DIR__ . '/Fixtures/Package2Disables1/Configuration/RequestMiddlewares.php'
87  ));
88  $containerMock = $this->createMock(ContainerInterface::class);
89  $containerMock->method('get')->with('middlewares')->willReturn($middlewares);
90  $dependencyOrderingServiceMock = $this->createMock(DependencyOrderingService::class);
91  $dependencyOrderingServiceMock->method('orderByDependencies')->with(self::anything())->willReturnArgument(0);
92 
93  $subject = new ‪MiddlewareStackResolver(
94  $containerMock,
95  $dependencyOrderingServiceMock,
96  new ‪NullFrontend('test'),
97  'PackageDependentCacheIdentifier'
98  );
99  $expected = [
100  // firstMiddleware is missing, RequestMiddlewares.php of Package2 sets disables=true on firstMiddleware
101  'secondMiddleware' => 'anotherClassName',
102  ];
103  self::assertEquals($expected, $subject->resolve('testStack'));
104  }
105 
109  public function ‪resolveAllowsReplacingAMiddleware(): void
110  {
111  $middlewares = new \ArrayObject(array_replace_recursive(
112  [],
113  require __DIR__ . '/Fixtures/Package1/Configuration/RequestMiddlewares.php',
114  require __DIR__ . '/Fixtures/Package2Replaces1/Configuration/RequestMiddlewares.php'
115  ));
116  $containerMock = $this->createMock(ContainerInterface::class);
117  $containerMock->method('get')->with('middlewares')->willReturn($middlewares);
118  $dependencyOrderingServiceMock = $this->createMock(DependencyOrderingService::class);
119  $dependencyOrderingServiceMock->method('orderByDependencies')->with(self::anything())->willReturnArgument(0);
120 
121  $subject = new ‪MiddlewareStackResolver(
122  $containerMock,
123  $dependencyOrderingServiceMock,
124  new ‪NullFrontend('test'),
125  'PackageDependentCacheIdentifier'
126  );
127  $expected = [
128  // firstMiddleware has been replaced, RequestMiddlewares.php of $package2 sets a new value for firstMiddleware
129  'firstMiddleware' => 'replacedClassName',
130  'secondMiddleware' => 'anotherClassName',
131  ];
132  self::assertEquals($expected, $subject->resolve('testStack'));
133  }
134 }
‪TYPO3\CMS\Core\Tests\Unit\Http
Definition: ApplicationTypeTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest\resolveReturnsMiddlewareStack
‪resolveReturnsMiddlewareStack()
Definition: MiddlewareStackResolverTest.php:31
‪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:27
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest\resolveAllowsDisablingAMiddleware
‪resolveAllowsDisablingAMiddleware()
Definition: MiddlewareStackResolverTest.php:81
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest\resolveAllowsReplacingAMiddleware
‪resolveAllowsReplacingAMiddleware()
Definition: MiddlewareStackResolverTest.php:109
‪TYPO3\CMS\Core\Tests\Unit\Http\MiddlewareStackResolverTest\resolveReturnsEmptyMiddlewareStackForZeroPackages
‪resolveReturnsEmptyMiddlewareStackForZeroPackages()
Definition: MiddlewareStackResolverTest.php:59