‪TYPO3CMS  11.5
AbstractServiceProviderTest.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\PhpUnit\ProphecyTrait;
22 use Psr\Container\ContainerInterface;
23 use Psr\Log\LoggerInterface;
31 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
32 
36 class ‪AbstractServiceProviderTest extends UnitTestCase
37 {
38  use ProphecyTrait;
39 
44  {
45  $containerProphecy = $this->prophesize();
46  $containerProphecy->willImplement(ContainerInterface::class);
47 
48  $middlewares = new ArrayObject();
50  $containerProphecy->reveal(),
51  $middlewares
52  );
54  $containerProphecy->reveal(),
55  $middlewares
56  );
57 
58  $expected = new ArrayObject([
59  'testStack' => [
60  'firstMiddleware' => [
61  'target' => 'aClassName',
62  ],
63  'secondMiddleware' => [
64  'target' => 'anotherClassName',
65  ],
66  ],
67  ]);
68  self::assertEquals($expected, $middlewares);
69  }
70 
75  {
76  $containerProphecy = $this->prophesize();
77  $containerProphecy->willImplement(ContainerInterface::class);
78 
79  $package2 = $this->prophesize(Package::class);
80  $package2->getPackagePath()->willReturn(__DIR__ . '/../Http/Fixtures/Package2/');
81  $package2ServiceProvider = new ‪PseudoServiceProvider($package2->reveal());
82 
83  $middlewares = new ArrayObject();
85  $containerProphecy->reveal(),
86  $middlewares
87  );
88  $middlewares = $package2ServiceProvider->getExtensions()['middlewares'](
89  $containerProphecy->reveal(),
90  $middlewares
91  );
92 
93  $expected = new ArrayObject([
94  'testStack' => [
95  'firstMiddleware' => [
96  'target' => 'aClassName',
97  ],
98  'secondMiddleware' => [
99  'target' => 'anotherClassName',
100  ],
101  ],
102  ]);
103  self::assertEquals($expected, $middlewares);
104  }
105 
110  {
111  $containerProphecy = $this->prophesize();
112  $containerProphecy->willImplement(ContainerInterface::class);
113 
114  $package2 = $this->prophesize(Package::class);
115  $package2->getPackagePath()->willReturn(__DIR__ . '/../Http/Fixtures/Package2Disables1/');
116  $package2ServiceProvider = new ‪PseudoServiceProvider($package2->reveal());
117 
118  $middlewares = new ArrayObject();
120  $containerProphecy->reveal(),
121  $middlewares
122  );
123  $middlewares = $package2ServiceProvider->getExtensions()['middlewares'](
124  $containerProphecy->reveal(),
125  $middlewares
126  );
127 
128  $expected = new ArrayObject([
129  'testStack' => [
130  'firstMiddleware' => [
131  'target' => 'aClassName',
132  'disabled' => true,
133  ],
134  'secondMiddleware' => [
135  'target' => 'anotherClassName',
136  ],
137  ],
138  ]);
139  self::assertEquals($expected, $middlewares);
140  }
141 
146  {
147  $containerProphecy = $this->prophesize();
148  $containerProphecy->willImplement(ContainerInterface::class);
149 
150  $package2 = $this->prophesize(Package::class);
151  $package2->getPackagePath()->willReturn(__DIR__ . '/../Http/Fixtures/Package2Replaces1/');
152  $package2ServiceProvider = new ‪PseudoServiceProvider($package2->reveal());
153 
154  $middlewares = new ArrayObject();
156  $containerProphecy->reveal(),
157  $middlewares
158  );
159  $middlewares = $package2ServiceProvider->getExtensions()['middlewares'](
160  $containerProphecy->reveal(),
161  $middlewares
162  );
163 
164  $expected = new ArrayObject([
165  'testStack' => [
166  'firstMiddleware' => [
167  'target' => 'replacedClassName',
168  ],
169  'secondMiddleware' => [
170  'target' => 'anotherClassName',
171  ],
172  ],
173  ]);
174  self::assertEquals($expected, $middlewares);
175  }
176 
180  public function ‪newReturnsClassInstance(): void
181  {
182  $containerProphecy = $this->prophesize();
183  $containerProphecy->willImplement(ContainerInterface::class);
184 
185  $newClosure = $this->‪getClosureForNew();
186  $instance = $newClosure($containerProphecy->reveal(), \stdClass::class);
187  self::assertInstanceOf(\stdClass::class, $instance);
188  }
189 
193  public function ‪newInjectsLogger(): void
194  {
195  $containerProphecy = $this->prophesize();
196  $containerProphecy->willImplement(ContainerInterface::class);
197 
198  $loggerProphecy = $this->prophesize();
199  $loggerProphecy->willImplement(LoggerInterface::class);
200 
201  $logManagerProphecy = $this->prophesize(LogManager::class);
202  $logManagerProphecy->getLogger(GeneralUtilityMakeInstanceInjectLoggerFixture::class)->willReturn($loggerProphecy->reveal());
203 
204  $containerProphecy->get(LogManager::class)->willReturn($logManagerProphecy->reveal());
205  $className = GeneralUtilityMakeInstanceInjectLoggerFixture::class;
206  $newClosure = $this->‪getClosureForNew();
207  $instance = $newClosure($containerProphecy->reveal(), $className);
208  self::assertInstanceOf(LoggerInterface::class, $instance->getLogger());
209  }
210 
214  protected function ‪getClosureForNew(): \Closure
215  {
216  return \Closure::bind(
217  static function ($container, $className, $arguments = []) {
218  return ‪AbstractServiceProvider::new($container, $className, $arguments);
219  },
220  null,
221  AbstractServiceProvider::class
222  );
223  }
224 }
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\configureMiddlewaresReturnsMergedMiddlewaresWithOverrides
‪configureMiddlewaresReturnsMergedMiddlewaresWithOverrides()
Definition: AbstractServiceProviderTest.php:108
‪TYPO3\CMS\Core\Package\AbstractServiceProvider
Definition: AbstractServiceProvider.php:31
‪TYPO3\CMS\Core\Tests\Unit\Utility\Fixtures\GeneralUtilityMakeInstanceInjectLoggerFixture
Definition: GeneralUtilityMakeInstanceInjectLoggerFixture.php:28
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest
Definition: AbstractServiceProviderTest.php:37
‪TYPO3\CMS\Core\Tests\Unit\Package\Mocks\Package2ServiceProviderMock
Definition: Package2ServiceProviderMock.php:23
‪TYPO3\CMS\Core\Package\AbstractServiceProvider\new
‪static mixed new(ContainerInterface $container, string $className, array $constructorArguments=[])
Definition: AbstractServiceProvider.php:130
‪TYPO3\CMS\Core\Tests\Unit\Package
Definition: AbstractServiceProviderTest.php:18
‪TYPO3\CMS\Core\Package\Package
Definition: Package.php:28
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\newReturnsClassInstance
‪newReturnsClassInstance()
Definition: AbstractServiceProviderTest.php:179
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\newInjectsLogger
‪newInjectsLogger()
Definition: AbstractServiceProviderTest.php:192
‪TYPO3\CMS\Core\Package\AbstractServiceProvider\configureMiddlewares
‪static ArrayObject configureMiddlewares(ContainerInterface $container, ArrayObject $middlewares, string $path=null)
Definition: AbstractServiceProvider.php:64
‪TYPO3\CMS\Core\Package\PseudoServiceProvider
Definition: PseudoServiceProvider.php:26
‪TYPO3\CMS\Core\Log\LogManager
Definition: LogManager.php:33
‪TYPO3\CMS\Core\Tests\Unit\Package\Mocks\Package1ServiceProviderMock
Definition: Package1ServiceProviderMock.php:23
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\getClosureForNew
‪Closure getClosureForNew()
Definition: AbstractServiceProviderTest.php:213
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\configureMiddlewaresReturnsMergedMiddlewaresWithReplacements
‪configureMiddlewaresReturnsMergedMiddlewaresWithReplacements()
Definition: AbstractServiceProviderTest.php:144
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\configureMiddlewaresReturnsMergedMiddlewaresWithPseudoServiceProvider
‪configureMiddlewaresReturnsMergedMiddlewaresWithPseudoServiceProvider()
Definition: AbstractServiceProviderTest.php:73
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\configureMiddlewaresReturnsMergedMiddlewares
‪configureMiddlewaresReturnsMergedMiddlewares()
Definition: AbstractServiceProviderTest.php:42