‪TYPO3CMS  ‪main
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 PHPUnit\Framework\Attributes\Test;
21 use Psr\Container\ContainerInterface;
22 use Psr\Log\LoggerInterface;
23 use Psr\Log\NullLogger;
31 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
32 
33 final class ‪AbstractServiceProviderTest extends UnitTestCase
34 {
35  #[Test]
37  {
38  $containerMock = $this->createMock(ContainerInterface::class);
39 
40  $middlewares = new \ArrayObject();
41  $middlewares = ‪Package1ServiceProviderMock::configureMiddlewares($containerMock, $middlewares);
42  $middlewares = ‪Package2ServiceProviderMock::configureMiddlewares($containerMock, $middlewares);
43 
44  $expected = new \ArrayObject([
45  'testStack' => [
46  'firstMiddleware' => [
47  'target' => 'aClassName',
48  ],
49  'secondMiddleware' => [
50  'target' => 'anotherClassName',
51  ],
52  ],
53  ]);
54  self::assertEquals($expected, $middlewares);
55  }
56 
57  #[Test]
59  {
60  $containerMock = $this->createMock(ContainerInterface::class);
61 
62  $package2 = $this->createMock(Package::class);
63  $package2->method('getPackagePath')->willReturn(__DIR__ . '/../Http/Fixtures/Package2/');
64  $package2->method('getValueFromComposerManifest')->with('name')->willReturn('typo3/cms-testing');
65  $package2ServiceProvider = new ‪PseudoServiceProvider($package2);
66 
67  $middlewares = new \ArrayObject();
68  $middlewares = ‪Package1ServiceProviderMock::configureMiddlewares($containerMock, $middlewares);
69  $middlewares = $package2ServiceProvider->getExtensions()['middlewares']($containerMock, $middlewares);
70 
71  $expected = new \ArrayObject([
72  'testStack' => [
73  'firstMiddleware' => [
74  'target' => 'aClassName',
75  ],
76  'secondMiddleware' => [
77  'target' => 'anotherClassName',
78  ],
79  ],
80  ]);
81  self::assertEquals($expected, $middlewares);
82  }
83 
84  #[Test]
86  {
87  $containerMock = $this->createMock(ContainerInterface::class);
88 
89  $package2 = $this->createMock(Package::class);
90  $package2->method('getPackagePath')->willReturn(__DIR__ . '/../Http/Fixtures/Package2Disables1/');
91  $package2->method('getValueFromComposerManifest')->with('name')->willReturn('typo3/cms-testing');
92  $package2ServiceProvider = new ‪PseudoServiceProvider($package2);
93 
94  $middlewares = new \ArrayObject();
95  $middlewares = ‪Package1ServiceProviderMock::configureMiddlewares($containerMock, $middlewares);
96  $middlewares = $package2ServiceProvider->getExtensions()['middlewares']($containerMock, $middlewares);
97 
98  $expected = new \ArrayObject([
99  'testStack' => [
100  'firstMiddleware' => [
101  'target' => 'aClassName',
102  'disabled' => true,
103  ],
104  'secondMiddleware' => [
105  'target' => 'anotherClassName',
106  ],
107  ],
108  ]);
109  self::assertEquals($expected, $middlewares);
110  }
111 
112  #[Test]
114  {
115  $containerMock = $this->createMock(ContainerInterface::class);
116 
117  $package2 = $this->createMock(Package::class);
118  $package2->method('getPackagePath')->willReturn(__DIR__ . '/../Http/Fixtures/Package2Replaces1/');
119  $package2->method('getValueFromComposerManifest')->with('name')->willReturn('typo3/cms-testing');
120  $package2ServiceProvider = new ‪PseudoServiceProvider($package2);
121 
122  $middlewares = new \ArrayObject();
123  $middlewares = ‪Package1ServiceProviderMock::configureMiddlewares($containerMock, $middlewares);
124  $middlewares = $package2ServiceProvider->getExtensions()['middlewares']($containerMock, $middlewares);
125 
126  $expected = new \ArrayObject([
127  'testStack' => [
128  'firstMiddleware' => [
129  'target' => 'replacedClassName',
130  ],
131  'secondMiddleware' => [
132  'target' => 'anotherClassName',
133  ],
134  ],
135  ]);
136  self::assertEquals($expected, $middlewares);
137  }
138 
139  #[Test]
140  public function ‪newReturnsClassInstance(): void
141  {
142  $newClosure = $this->‪getClosureForNew();
143  $instance = $newClosure($this->createMock(ContainerInterface::class), \stdClass::class);
144  self::assertInstanceOf(\stdClass::class, $instance);
145  }
146 
147  #[Test]
148  public function ‪newInjectsLogger(): void
149  {
150  $containerMock = $this->createMock(ContainerInterface::class);
151 
152  $logManagerMock = $this->createMock(LogManager::class);
153  $logManagerMock->method('getLogger')->with(GeneralUtilityMakeInstanceInjectLoggerFixture::class)
154  ->willReturn(new NullLogger());
155  $containerMock->method('get')->with(LogManager::class)->willReturn($logManagerMock);
156  $className = GeneralUtilityMakeInstanceInjectLoggerFixture::class;
157  $newClosure = $this->‪getClosureForNew();
158  $instance = $newClosure($containerMock, $className);
159  self::assertInstanceOf(LoggerInterface::class, $instance->getLogger());
160  }
161 
162  protected function ‪getClosureForNew(): \Closure
163  {
164  return \Closure::bind(
165  static function ($container, $className, $arguments = []) {
166  return ‪AbstractServiceProvider::new($container, $className, $arguments);
167  },
168  null,
169  AbstractServiceProvider::class
170  );
171  }
172 }
‪TYPO3\CMS\Core\Package\AbstractServiceProvider\configureMiddlewares
‪static configureMiddlewares(ContainerInterface $container, \ArrayObject $middlewares, string $path=null)
Definition: AbstractServiceProvider.php:66
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\configureMiddlewaresReturnsMergedMiddlewaresWithOverrides
‪configureMiddlewaresReturnsMergedMiddlewaresWithOverrides()
Definition: AbstractServiceProviderTest.php:85
‪TYPO3\CMS\Core\Package\AbstractServiceProvider
Definition: AbstractServiceProvider.php:35
‪TYPO3\CMS\Core\Tests\Unit\Utility\Fixtures\GeneralUtilityMakeInstanceInjectLoggerFixture
Definition: GeneralUtilityMakeInstanceInjectLoggerFixture.php:28
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest
Definition: AbstractServiceProviderTest.php:34
‪TYPO3\CMS\Core\Tests\Unit\Package\Mocks\Package2ServiceProviderMock
Definition: Package2ServiceProviderMock.php:23
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\getClosureForNew
‪getClosureForNew()
Definition: AbstractServiceProviderTest.php:162
‪TYPO3\CMS\Core\Package\AbstractServiceProvider\new
‪static mixed new(ContainerInterface $container, string $className, array $constructorArguments=[])
Definition: AbstractServiceProvider.php:183
‪TYPO3\CMS\Core\Tests\Unit\Package
Definition: AbstractServiceProviderTest.php:18
‪TYPO3\CMS\Core\Package\Package
Definition: Package.php:30
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\newReturnsClassInstance
‪newReturnsClassInstance()
Definition: AbstractServiceProviderTest.php:140
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\newInjectsLogger
‪newInjectsLogger()
Definition: AbstractServiceProviderTest.php:148
‪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\configureMiddlewaresReturnsMergedMiddlewaresWithReplacements
‪configureMiddlewaresReturnsMergedMiddlewaresWithReplacements()
Definition: AbstractServiceProviderTest.php:113
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\configureMiddlewaresReturnsMergedMiddlewaresWithPseudoServiceProvider
‪configureMiddlewaresReturnsMergedMiddlewaresWithPseudoServiceProvider()
Definition: AbstractServiceProviderTest.php:58
‪TYPO3\CMS\Core\Tests\Unit\Package\AbstractServiceProviderTest\configureMiddlewaresReturnsMergedMiddlewares
‪configureMiddlewaresReturnsMergedMiddlewares()
Definition: AbstractServiceProviderTest.php:36