‪TYPO3CMS  11.5
ServiceProviderRegistryTest.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 Prophecy\Argument;
21 use Prophecy\PhpUnit\ProphecyTrait;
22 use Prophecy\Prophecy\ObjectProphecy;
23 use Psr\Container\ContainerInterface;
26 use TYPO3\CMS\Core\Package\PackageManager;
29 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
30 
31 class ‪ServiceProviderRegistryTest extends UnitTestCase
32 {
33  use ProphecyTrait;
34 
36  protected ObjectProphecy ‪$packageManagerProphecy;
37 
41  protected function ‪setUp(): void
42  {
43  parent::setUp();
44  $this->packageManagerProphecy = $this->prophesize(PackageManager::class);
45  $this->packageManagerProphecy->isPackageActive(Argument::any())->willReturn(false);
46  $this->packageManagerProphecy->getActivePackages()->willReturn([]);
47  }
48 
49  protected function ‪mockPackages($packages): void
50  {
51  $active = [];
52  foreach ($packages as $packageKey => $serviceProvider) {
53  $this->packageManagerProphecy->isPackageActive($packageKey)->willReturn(true);
54 
55  $package = $this->prophesize(Package::class);
56  $package->getPackageKey()->willReturn($packageKey);
57  $package->getServiceProvider()->willReturn($serviceProvider);
58 
59  $this->packageManagerProphecy->getPackage($packageKey)->willReturn($package->reveal());
60  $active[] = $package->reveal();
61  }
62 
63  $this->packageManagerProphecy->getActivePackages()->willReturn($active);
64  }
65 
69  public function ‪registry(): void
70  {
71  $this->‪mockPackages(['core' => TestRegistryServiceProvider::class]);
72  $registry = new ‪ServiceProviderRegistry($this->packageManagerProphecy->reveal());
73 
74  self::assertEquals(new ‪TestRegistryServiceProvider(), $registry->get('core'));
75  }
76 
80  public function ‪registryCaches(): void
81  {
82  $this->‪mockPackages(['core' => TestRegistryServiceProvider::class]);
83  $registry = new ServiceProviderRegistry($this->packageManagerProphecy->reveal());
84 
85  self::assertEquals(new TestRegistryServiceProvider(), $registry->get('core'));
86  self::assertSame($registry->get('core'), $registry->get('core'));
87  }
88 
92  public function ‪registryPassesPackageAsConstructorArgument(): void
93  {
94  $this->‪mockPackages(['core' => TestStatefulServiceProvider::class]);
95  $registry = new ServiceProviderRegistry($this->packageManagerProphecy->reveal());
96 
97  self::assertInstanceOf(TestStatefulServiceProvider::class, $registry->get('core'));
98  self::assertInstanceOf(Package::class, $registry->get('core')->package);
99  }
100 
104  public function ‪getException(): void
105  {
106  $this->expectException(\InvalidArgumentException::class);
107  $this->‪mockPackages(['core' => TestRegistryServiceProvider::class]);
108  $registry = new ServiceProviderRegistry($this->packageManagerProphecy->reveal());
109 
110  $registry->get('backend');
111  }
112 
116  public function ‪getServices(): void
117  {
118  $this->‪mockPackages(['core' => TestRegistryServiceProvider::class]);
119  $registry = new ServiceProviderRegistry($this->packageManagerProphecy->reveal());
120 
121  $services = $registry->getFactories('core');
122  self::assertArrayHasKey('serviceA', $services);
123 
124  $services2 = $registry->getFactories('core');
125 
126  self::assertSame($services['serviceA'], $services2['serviceA']);
127  }
128 
132  public function ‪extendServices(): void
133  {
134  $this->‪mockPackages(['core' => TestRegistryServiceProvider::class]);
135  $registry = new ServiceProviderRegistry($this->packageManagerProphecy->reveal());
136 
137  $services = $registry->getExtensions('core');
138  self::assertArrayHasKey('serviceB', $services);
139 
140  $services2 = $registry->getExtensions('core');
141 
142  self::assertSame($services['serviceB'], $services2['serviceB']);
143  }
144 
148  public function ‪getServiceFactory(): void
149  {
150  $this->‪mockPackages(['core' => TestRegistryServiceProvider::class]);
151  $registry = new ServiceProviderRegistry($this->packageManagerProphecy->reveal());
152 
153  $containerProphecy = $this->prophesize(ContainerInterface::class);
154  $service = $registry->createService('core', 'param', $containerProphecy->reveal());
155 
156  self::assertEquals(42, $service);
157  }
158 
162  public function ‪getServiceExtension(): void
163  {
164  $this->‪mockPackages(['core' => TestRegistryServiceProvider::class]);
165  $registry = new ServiceProviderRegistry($this->packageManagerProphecy->reveal());
166 
167  $containerProphecy = $this->prophesize(ContainerInterface::class);
168  $service = $registry->extendService('core', 'serviceB', $containerProphecy->reveal(), null);
169 
170  self::assertInstanceOf(\stdClass::class, $service);
171  }
172 
176  public function ‪iterator(): void
177  {
178  $packages = [
179  'core' => TestRegistryServiceProvider::class,
180  'backend' => TestRegistryServiceProvider::class,
181  ];
182  $this->‪mockPackages($packages);
183  $registry = new ServiceProviderRegistry($this->packageManagerProphecy->reveal());
184 
185  $i = 0;
186  foreach ($registry as $key => $provider) {
187  self::assertEquals(array_keys($packages)[$i], $key);
188  self::assertInstanceOf(TestRegistryServiceProvider::class, $registry->get($key));
189  $i++;
190  }
191  }
192 }
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\Fixtures\TestRegistryServiceProvider
Definition: TestRegistryServiceProvider.php:23
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\registry
‪registry()
Definition: ServiceProviderRegistryTest.php:68
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\$packageManagerProphecy
‪ObjectProphecy $packageManagerProphecy
Definition: ServiceProviderRegistryTest.php:35
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\iterator
‪iterator()
Definition: ServiceProviderRegistryTest.php:175
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest
Definition: ServiceProviderRegistryTest.php:32
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\getServices
‪getServices()
Definition: ServiceProviderRegistryTest.php:115
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\registryCaches
‪registryCaches()
Definition: ServiceProviderRegistryTest.php:79
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\extendServices
‪extendServices()
Definition: ServiceProviderRegistryTest.php:131
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection
Definition: ConsoleCommandPassTest.php:18
‪TYPO3\CMS\Core\Package\Package
Definition: Package.php:28
‪TYPO3\CMS\Core\DependencyInjection\ServiceProviderRegistry
Definition: ServiceProviderRegistry.php:31
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\getServiceExtension
‪getServiceExtension()
Definition: ServiceProviderRegistryTest.php:161
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\mockPackages
‪mockPackages($packages)
Definition: ServiceProviderRegistryTest.php:48
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\registryPassesPackageAsConstructorArgument
‪registryPassesPackageAsConstructorArgument()
Definition: ServiceProviderRegistryTest.php:91
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\setUp
‪setUp()
Definition: ServiceProviderRegistryTest.php:40
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\Fixtures\TestStatefulServiceProvider
Definition: TestStatefulServiceProvider.php:24
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\getServiceFactory
‪getServiceFactory()
Definition: ServiceProviderRegistryTest.php:147
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\getException
‪getException()
Definition: ServiceProviderRegistryTest.php:103