‪TYPO3CMS  ‪main
ExtensionServiceTest.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\DataProvider;
21 use PHPUnit\Framework\Attributes\Test;
22 use PHPUnit\Framework\MockObject\MockObject;
27 use TYPO3\CMS\Core\Database\Query\QueryBuilder;
34 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
35 
36 final class ‪ExtensionServiceTest extends UnitTestCase
37 {
40 
44  protected bool ‪$resetSingletonInstances = true;
45 
46  protected function ‪setUp(): void
47  {
48  parent::setUp();
49  ‪$GLOBALS['TSFE'] = new \stdClass();
50  $this->extensionService = new ‪ExtensionService();
51  $this->mockConfigurationManager = $this->createMock(ConfigurationManagerInterface::class);
52  $this->extensionService->injectConfigurationManager($this->mockConfigurationManager);
53  ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions'] = [
54  'ExtensionName' => [
55  'plugins' => [
56  'SomePlugin' => [
57  'controllers' => [
58  'Fully\\Qualified\\ControllerName' => [
59  'alias' => 'ControllerName',
60  'actions' => ['index', 'otherAction'],
61  ],
62  ],
63  ],
64  'ThirdPlugin' => [
65  'controllers' => [
66  'Fully\\Qualified\\ControllerName' => [
67  'alias' => 'ControllerName',
68  'actions' => ['otherAction', 'thirdAction'],
69  ],
70  ],
71  ],
72  ],
73  ],
74  'SomeOtherExtensionName' => [
75  'plugins' => [
76  'SecondPlugin' => [
77  'controllers' => [
78  'Fully\\Qualified\\ControllerName' => [
79  'alias' => 'ControllerName',
80  'actions' => ['index', 'otherAction'],
81  ],
82  'Fully\\Qualified\\SecondControllerName' => [
83  'actions' => ['someAction', 'someOtherAction'],
84  'alias' => 'SecondControllerName',
85  'nonCacheableActions' => ['someOtherAction'],
86  ],
87  ],
88  ],
89  ],
90  ],
91  ];
92  }
93 
98  protected function ‪getMockDatabaseConnection(): MockObject&‪Connection
99  {
100  $connection = $this->createMock(Connection::class);
101  $connection->method('getDatabasePlatform')->willReturn(new ‪MockMySQLPlatform());
102  $connection->method('getExpressionBuilder')->willReturn(new ‪ExpressionBuilder($connection));
103  $connection->method('quoteIdentifier')->with(self::anything())->willReturnArgument(0);
104 
105  $queryBuilder = new QueryBuilder(
106  $connection,
107  null,
108  new ‪ConcreteQueryBuilder($connection),
109  );
110 
111  $connectionPool = $this->createMock(ConnectionPool::class);
112  $connectionPool->method('getQueryBuilderForTable')->with('tt_content')->willReturn($queryBuilder);
113  GeneralUtility::addInstance(ConnectionPool::class, $connectionPool);
114 
115  return $connection;
116  }
117 
121  public static function ‪getPluginNamespaceDataProvider(): array
122  {
123  return [
124  [null, null, 'tx__'],
125  ['', '', 'tx__'],
126  ['SomeExtension', 'SomePlugin', 'tx_someextension_someplugin'],
127  ['NonExistingExtension', 'SomePlugin', 'tx_nonexistingextension_someplugin'],
128  ['Invalid', '', 'tx_invalid_'],
129  ];
130  }
131 
137  #[DataProvider('getPluginNamespaceDataProvider')]
138  #[Test]
139  public function ‪getPluginNamespaceTests($extensionName, $pluginName, $expectedResult): void
140  {
141  $this->mockConfigurationManager->expects(self::once())->method('getConfiguration')->willReturn([]);
142  $actualResult = $this->extensionService->getPluginNamespace($extensionName, $pluginName);
143  self::assertEquals($expectedResult, $actualResult, 'Failing for extension: "' . $extensionName . '", plugin: "' . $pluginName . '"');
144  }
145 
146  #[Test]
147  public function ‪pluginNamespaceCanBeOverridden(): void
148  {
149  $this->mockConfigurationManager->expects(self::once())->method('getConfiguration')->with(‪ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK, 'SomeExtension', 'SomePlugin')->willReturn(['view' => ['pluginNamespace' => 'overridden_plugin_namespace']]);
150  $expectedResult = 'overridden_plugin_namespace';
151  $actualResult = $this->extensionService->getPluginNamespace('SomeExtension', 'SomePlugin');
152  self::assertEquals($expectedResult, $actualResult);
153  }
154 
158  public static function ‪getPluginNameByActionDataProvider(): array
159  {
160  return [
161  ['ExtensionName', 'ControllerName', 'someNonExistingAction', null],
162  ['ExtensionName', 'ControllerName', 'index', 'SomePlugin'],
163  ['ExtensionName', 'ControllerName', 'thirdAction', 'ThirdPlugin'],
164  ['eXtEnSiOnNaMe', 'cOnTrOlLeRnAmE', 'thirdAction', null],
165  ['eXtEnSiOnNaMe', 'cOnTrOlLeRnAmE', 'ThIrDaCtIoN', null],
166  ['SomeOtherExtensionName', 'ControllerName', 'otherAction', 'SecondPlugin'],
167  ];
168  }
169 
173  #[DataProvider('getPluginNameByActionDataProvider')]
174  #[Test]
175  public function ‪getPluginNameByActionTests(string $extensionName, string $controllerName, string $actionName, $expectedResult): void
176  {
177  $this->mockConfigurationManager->expects(self::once())->method('getConfiguration')->with(‪ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK)->willReturn(['view' => ['pluginNamespace' => 'overridden_plugin_namespace']]);
178  $actualResult = $this->extensionService->getPluginNameByAction($extensionName, $controllerName, $actionName);
179  self::assertEquals($expectedResult, $actualResult, 'Failing for $extensionName: "' . $extensionName . '", $controllerName: "' . $controllerName . '", $actionName: "' . $actionName . '" - ');
180  }
181 
182  #[Test]
184  {
185  $this->expectException(Exception::class);
186  $this->expectExceptionCode(1280825466);
187  $this->mockConfigurationManager->expects(self::once())->method('getConfiguration')->with(‪ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK)->willReturn(['view' => ['pluginNamespace' => 'overridden_plugin_namespace']]);
188  $this->extensionService->getPluginNameByAction('ExtensionName', 'ControllerName', 'otherAction');
189  }
190 
191  #[Test]
193  {
194  $frameworkConfiguration = [
195  'extensionName' => 'CurrentExtension',
196  'pluginName' => 'CurrentPlugin',
197  'controllerConfiguration' => [
198  'Fully\\Qualified\\ControllerName' => [
199  'alias' => 'ControllerName',
200  'actions' => ['otherAction'],
201  ],
202  ],
203  ];
204 
205  $this->mockConfigurationManager
206  ->expects(self::once())
207  ->method('getConfiguration')
209  ->willReturn($frameworkConfiguration);
210 
211  $actualResult = $this->extensionService->getPluginNameByAction('CurrentExtension', 'ControllerName', 'otherAction');
212  $expectedResult = 'CurrentPlugin';
213  self::assertEquals($expectedResult, $actualResult);
214  }
215 
216  #[Test]
218  {
219  $this->mockConfigurationManager->expects(self::once())->method('getConfiguration')->willReturn([]);
220  self::assertNull($this->extensionService->getTargetPidByPlugin('ExtensionName', 'PluginName'));
221  }
222 
223  #[Test]
225  {
226  $this->mockConfigurationManager->expects(self::once())->method('getConfiguration')->willReturn(['view' => ['defaultPid' => 0]]);
227  self::assertNull($this->extensionService->getTargetPidByPlugin('ExtensionName', 'PluginName'));
228  }
229 
230  #[Test]
232  {
233  $this->mockConfigurationManager->expects(self::once())->method('getConfiguration')->willReturn(['view' => ['defaultPid' => 123]]);
234  $expectedResult = 123;
235  $actualResult = $this->extensionService->getTargetPidByPlugin('ExtensionName', 'SomePlugin');
236  self::assertEquals($expectedResult, $actualResult);
237  }
238 
239  #[Test]
241  {
242  self::assertNull($this->extensionService->getDefaultControllerNameByPlugin('NonExistingExtensionName', 'SomePlugin'));
243  }
244 
245  #[Test]
247  {
248  self::assertNull($this->extensionService->getDefaultControllerNameByPlugin('ExtensionName', 'NonExistingPlugin'));
249  }
250 
251  #[Test]
253  {
254  $expectedResult = 'ControllerName';
255  $actualResult = $this->extensionService->getDefaultControllerNameByPlugin('ExtensionName', 'SomePlugin');
256  self::assertEquals($expectedResult, $actualResult);
257  }
258 
259  #[Test]
261  {
262  self::assertNull($this->extensionService->getDefaultActionNameByPluginAndController('NonExistingExtensionName', 'SomePlugin', 'ControllerName'));
263  }
264 
265  #[Test]
267  {
268  self::assertNull($this->extensionService->getDefaultActionNameByPluginAndController('ExtensionName', 'NonExistingPlugin', 'ControllerName'));
269  }
270 
271  #[Test]
273  {
274  self::assertNull($this->extensionService->getDefaultActionNameByPluginAndController('ExtensionName', 'SomePlugin', 'NonExistingControllerName'));
275  }
276 
277  #[Test]
279  {
280  $expectedResult = 'someAction';
281  $actualResult = $this->extensionService->getDefaultActionNameByPluginAndController('SomeOtherExtensionName', 'SecondPlugin', 'SecondControllerName');
282  self::assertEquals($expectedResult, $actualResult);
283  }
284 
285  #[Test]
287  {
288  $configurationManagerMock = $this->createMock(ConfigurationManager::class);
289  $configurationManagerMock->method('getConfiguration')->with(
291  'extension'
292  )->willReturn([]);
293  $this->extensionService->injectConfigurationManager($configurationManagerMock);
294 
295  $result = $this->extensionService->getTargetPageTypeByFormat('extension', 'json');
296 
297  self::assertSame(0, $result);
298  }
299 
300  #[Test]
302  {
303  $configurationManagerMock = $this->createMock(ConfigurationManager::class);
304  $configurationManagerMock->method('getConfiguration')->with(
306  'extension'
307  )->willReturn([
308  'view' => [
309  'formatToPageTypeMapping' => [
310  'json' => 111,
311  ],
312  ],
313  ]);
314  $this->extensionService->injectConfigurationManager($configurationManagerMock);
315 
316  $result = $this->extensionService->getTargetPageTypeByFormat('extension', 'json');
317 
318  self::assertSame(111, $result);
319  }
320 }
‪TYPO3\CMS\Extbase\Tests\Unit\Service
Definition: CacheServiceTest.php:18
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getTargetPageTypeByFormatReturnsMappedPageTypeFromConfiguration
‪getTargetPageTypeByFormatReturnsMappedPageTypeFromConfiguration()
Definition: ExtensionServiceTest.php:301
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getPluginNameByActionDataProvider
‪static getPluginNameByActionDataProvider()
Definition: ExtensionServiceTest.php:158
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getDefaultActionNameByPluginAndControllerReturnsNullIfGivenExtensionCantBeFound
‪getDefaultActionNameByPluginAndControllerReturnsNullIfGivenExtensionCantBeFound()
Definition: ExtensionServiceTest.php:260
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getTargetPidByPluginSignatureReturnsTheConfiguredDefaultPid
‪getTargetPidByPluginSignatureReturnsTheConfiguredDefaultPid()
Definition: ExtensionServiceTest.php:231
‪TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder
Definition: ExpressionBuilder.php:40
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest
Definition: ExtensionServiceTest.php:37
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getPluginNamespaceDataProvider
‪static getPluginNamespaceDataProvider()
Definition: ExtensionServiceTest.php:121
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getDefaultActionNameByPluginAndControllerReturnsNullIfGivenControllerCantBeFound
‪getDefaultActionNameByPluginAndControllerReturnsNullIfGivenControllerCantBeFound()
Definition: ExtensionServiceTest.php:272
‪TYPO3\CMS\Core\Database\Query\ConcreteQueryBuilder
Definition: ConcreteQueryBuilder.php:41
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface
Definition: ConfigurationManagerInterface.php:28
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getDefaultActionNameByPluginAndControllerReturnsNullIfGivenPluginCantBeFound
‪getDefaultActionNameByPluginAndControllerReturnsNullIfGivenPluginCantBeFound()
Definition: ExtensionServiceTest.php:266
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface\CONFIGURATION_TYPE_FRAMEWORK
‪const CONFIGURATION_TYPE_FRAMEWORK
Definition: ConfigurationManagerInterface.php:29
‪TYPO3\CMS\Extbase\Exception
Definition: Exception.php:25
‪TYPO3\CMS\Extbase\Configuration\ConfigurationManager
Definition: ConfigurationManager.php:32
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getPluginNamespaceTests
‪getPluginNamespaceTests($extensionName, $pluginName, $expectedResult)
Definition: ExtensionServiceTest.php:139
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\$extensionService
‪ExtensionService $extensionService
Definition: ExtensionServiceTest.php:39
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getDefaultControllerNameByPluginReturnsNullIfGivenExtensionCantBeFound
‪getDefaultControllerNameByPluginReturnsNullIfGivenExtensionCantBeFound()
Definition: ExtensionServiceTest.php:240
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getDefaultActionNameByPluginAndControllerReturnsFirstActionNameOfGivenController
‪getDefaultActionNameByPluginAndControllerReturnsFirstActionNameOfGivenController()
Definition: ExtensionServiceTest.php:278
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getDefaultControllerNameByPluginReturnsFirstControllerNameOfGivenPlugin
‪getDefaultControllerNameByPluginReturnsFirstControllerNameOfGivenPlugin()
Definition: ExtensionServiceTest.php:252
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getPluginNameByActionTests
‪getPluginNameByActionTests(string $extensionName, string $controllerName, string $actionName, $expectedResult)
Definition: ExtensionServiceTest.php:175
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\setUp
‪setUp()
Definition: ExtensionServiceTest.php:46
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\pluginNamespaceCanBeOverridden
‪pluginNamespaceCanBeOverridden()
Definition: ExtensionServiceTest.php:147
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getTargetPidByPluginSignatureReturnsNullIfConfigurationManagerIsNotInitialized
‪getTargetPidByPluginSignatureReturnsNullIfConfigurationManagerIsNotInitialized()
Definition: ExtensionServiceTest.php:217
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getPluginNameByActionReturnsCurrentIfItCanHandleTheActionEvenIfMoreThanOnePluginMatches
‪getPluginNameByActionReturnsCurrentIfItCanHandleTheActionEvenIfMoreThanOnePluginMatches()
Definition: ExtensionServiceTest.php:192
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getTargetPidByPluginSignatureReturnsNullIfDefaultPidIsZero
‪getTargetPidByPluginSignatureReturnsNullIfDefaultPidIsZero()
Definition: ExtensionServiceTest.php:224
‪TYPO3\CMS\Core\Database\Connection
Definition: Connection.php:41
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getDefaultControllerNameByPluginReturnsNullIfGivenPluginCantBeFound
‪getDefaultControllerNameByPluginReturnsNullIfGivenPluginCantBeFound()
Definition: ExtensionServiceTest.php:246
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Extbase\Service\ExtensionService
Definition: ExtensionService.php:34
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getTargetPageTypeByFormatReturnsZeroIfNoMappingIsSet
‪getTargetPageTypeByFormatReturnsZeroIfNoMappingIsSet()
Definition: ExtensionServiceTest.php:286
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\$mockConfigurationManager
‪ConfigurationManagerInterface &MockObject $mockConfigurationManager
Definition: ExtensionServiceTest.php:38
‪TYPO3\CMS\Core\Tests\Unit\Database\Mocks\MockPlatform\MockMySQLPlatform
Definition: MockMySQLPlatform.php:24
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\$resetSingletonInstances
‪bool $resetSingletonInstances
Definition: ExtensionServiceTest.php:44
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getPluginNameByActionThrowsExceptionIfMoreThanOnePluginMatches
‪getPluginNameByActionThrowsExceptionIfMoreThanOnePluginMatches()
Definition: ExtensionServiceTest.php:183
‪TYPO3\CMS\Extbase\Tests\Unit\Service\ExtensionServiceTest\getMockDatabaseConnection
‪getMockDatabaseConnection()
Definition: ExtensionServiceTest.php:98