‪TYPO3CMS  ‪main
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 PHPUnit\Framework\Attributes\Test;
21 use PHPUnit\Framework\MockObject\MockObject;
22 use Psr\Container\ContainerInterface;
25 use TYPO3\CMS\Core\Package\PackageManager;
28 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
29 
30 final class ‪ServiceProviderRegistryTest extends UnitTestCase
31 {
32  protected PackageManager&MockObject ‪$packageManagerMock;
33 
34  protected function ‪setUp(): void
35  {
36  parent::setUp();
37  $this->packageManagerMock = $this->createMock(PackageManager::class);
38  }
39 
40  protected function ‪mockPackage(string $packageKey, string $serviceProvider): void
41  {
42  $this->packageManagerMock->method('isPackageActive')->with($packageKey)->willReturn(true);
43  $package = $this->createMock(Package::class);
44  $package->method('getPackageKey')->willReturn($packageKey);
45  $package->method('getServiceProvider')->willReturn($serviceProvider);
46  $this->packageManagerMock->method('getPackage')->with($packageKey)->willReturn($package);
47  $this->packageManagerMock->method('getActivePackages')->willReturn([$package]);
48  }
49 
50  #[Test]
51  public function ‪registry(): void
52  {
53  $this->‪mockPackage('core', TestRegistryServiceProvider::class);
54  $subject = new ‪ServiceProviderRegistry($this->packageManagerMock);
55  self::assertEquals(new ‪TestRegistryServiceProvider(), $subject->get('core'));
56  }
57 
58  #[Test]
59  public function ‪registryCaches(): void
60  {
61  $this->‪mockPackage('core', TestRegistryServiceProvider::class);
62  $subject = new ‪ServiceProviderRegistry($this->packageManagerMock);
63  self::assertEquals(new ‪TestRegistryServiceProvider(), $subject->get('core'));
64  self::assertSame($subject->get('core'), $subject->get('core'));
65  }
66 
67  #[Test]
69  {
70  $this->‪mockPackage('core', TestStatefulServiceProvider::class);
71  $subject = new ‪ServiceProviderRegistry($this->packageManagerMock);
72  self::assertInstanceOf(TestStatefulServiceProvider::class, $subject->get('core'));
73  self::assertInstanceOf(Package::class, $subject->get('core')->package);
74  }
75 
76  #[Test]
77  public function ‪getException(): void
78  {
79  $this->expectException(\InvalidArgumentException::class);
80  $subject = new ‪ServiceProviderRegistry($this->packageManagerMock);
81  $subject->get('backend');
82  }
83 
84  #[Test]
85  public function ‪getServices(): void
86  {
87  $this->‪mockPackage('core', TestRegistryServiceProvider::class);
88  $subject = new ‪ServiceProviderRegistry($this->packageManagerMock);
89  $services = $subject->getFactories('core');
90  self::assertArrayHasKey('serviceA', $services);
91  $services2 = $subject->getFactories('core');
92  self::assertSame($services['serviceA'], $services2['serviceA']);
93  }
94 
95  #[Test]
96  public function ‪extendServices(): void
97  {
98  $this->‪mockPackage('core', TestRegistryServiceProvider::class);
99  $subject = new ‪ServiceProviderRegistry($this->packageManagerMock);
100  $services = $subject->getExtensions('core');
101  self::assertArrayHasKey('serviceB', $services);
102  $services2 = $subject->getExtensions('core');
103  self::assertSame($services['serviceB'], $services2['serviceB']);
104  }
105 
106  #[Test]
107  public function ‪getServiceFactory(): void
108  {
109  $this->‪mockPackage('core', TestRegistryServiceProvider::class);
110  $registry = new ‪ServiceProviderRegistry($this->packageManagerMock);
111  $containerMock = $this->createMock(ContainerInterface::class);
112  $subject = $registry->createService('core', 'param', $containerMock);
113  self::assertEquals(42, $subject);
114  }
115 
116  #[Test]
117  public function ‪getServiceExtension(): void
118  {
119  $this->‪mockPackage('core', TestRegistryServiceProvider::class);
120  $subject = new ‪ServiceProviderRegistry($this->packageManagerMock);
121  $containerMock = $this->createMock(ContainerInterface::class);
122  $service = $subject->extendService('core', 'serviceB', $containerMock);
123  self::assertInstanceOf(\stdClass::class, $service);
124  }
125 
126  #[Test]
127  public function ‪iterator(): void
128  {
129  $packages = [
130  'core' => TestRegistryServiceProvider::class,
131  'backend' => TestRegistryServiceProvider::class,
132  ];
133 
134  $packageCore = $this->createMock(Package::class);
135  $packageCore->method('getPackageKey')->willReturn('core');
136  $packageCore->method('getServiceProvider')->willReturn(TestRegistryServiceProvider::class);
137 
138  $packageBackend = $this->createMock(Package::class);
139  $packageBackend->method('getPackageKey')->willReturn('backend');
140  $packageBackend->method('getServiceProvider')->willReturn(TestRegistryServiceProvider::class);
141 
142  $this->packageManagerMock->method('getActivePackages')->willReturn([$packageCore, $packageBackend]);
143 
144  $subject = new ‪ServiceProviderRegistry($this->packageManagerMock);
145 
146  $i = 0;
147  foreach ($subject as $key => $provider) {
148  self::assertEquals(array_keys($packages)[$i], $key);
149  self::assertInstanceOf(TestRegistryServiceProvider::class, $subject->get($key));
150  $i++;
151  }
152  }
153 }
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\Fixtures\TestRegistryServiceProvider
Definition: TestRegistryServiceProvider.php:23
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\registry
‪registry()
Definition: ServiceProviderRegistryTest.php:51
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\iterator
‪iterator()
Definition: ServiceProviderRegistryTest.php:127
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest
Definition: ServiceProviderRegistryTest.php:31
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\getServices
‪getServices()
Definition: ServiceProviderRegistryTest.php:85
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\registryCaches
‪registryCaches()
Definition: ServiceProviderRegistryTest.php:59
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\extendServices
‪extendServices()
Definition: ServiceProviderRegistryTest.php:96
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\$packageManagerMock
‪PackageManager &MockObject $packageManagerMock
Definition: ServiceProviderRegistryTest.php:32
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection
Definition: ConsoleCommandPassTest.php:18
‪TYPO3\CMS\Core\Package\Package
Definition: Package.php:30
‪TYPO3\CMS\Core\DependencyInjection\ServiceProviderRegistry
Definition: ServiceProviderRegistry.php:31
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\getServiceExtension
‪getServiceExtension()
Definition: ServiceProviderRegistryTest.php:117
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\mockPackage
‪mockPackage(string $packageKey, string $serviceProvider)
Definition: ServiceProviderRegistryTest.php:40
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\registryPassesPackageAsConstructorArgument
‪registryPassesPackageAsConstructorArgument()
Definition: ServiceProviderRegistryTest.php:68
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\setUp
‪setUp()
Definition: ServiceProviderRegistryTest.php:34
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\Fixtures\TestStatefulServiceProvider
Definition: TestStatefulServiceProvider.php:24
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\getServiceFactory
‪getServiceFactory()
Definition: ServiceProviderRegistryTest.php:107
‪TYPO3\CMS\Core\Tests\Unit\DependencyInjection\ServiceProviderRegistryTest\getException
‪getException()
Definition: ServiceProviderRegistryTest.php:77