‪TYPO3CMS  ‪main
ExtensionUtilityTest.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;
27 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
28 
29 final class ‪ExtensionUtilityTest extends UnitTestCase
30 {
31  #[Test]
33  {
34  ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.'] = [];
35  ‪ExtensionUtility::configurePlugin('MyExtension', 'Pi1', [FirstController::class => ['index']]);
36  $staticTypoScript = ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.']['defaultContentRendering'];
37  self::assertStringContainsString('tt_content.list.20.myextension_pi1 = EXTBASEPLUGIN', $staticTypoScript);
38  self::assertStringContainsString('
39  extensionName = MyExtension
40  pluginName = Pi1', $staticTypoScript);
41  self::assertStringNotContainsString('USER_INT', $staticTypoScript);
42  }
43 
44  #[Test]
46  {
47  ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.'] = [];
48  ‪ExtensionUtility::configurePlugin('MyExtension', 'Pi1', [FirstController::class => ['index']]);
49  $staticTypoScript = ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.']['defaultContentRendering'];
50  self::assertStringContainsString('tt_content.list.20.myextension_pi1 = EXTBASEPLUGIN', $staticTypoScript);
51  }
52 
53  #[Test]
55  {
56  ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.'] = [];
57  ‪ExtensionUtility::configurePlugin('MyExtension', 'Pi1', [
58  FirstController::class => ['index'],
59  ]);
60  $staticTypoScript = ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.']['defaultContentRendering'];
61  self::assertStringContainsString('tt_content.list.20.myextension_pi1 = EXTBASEPLUGIN', $staticTypoScript);
62  self::assertStringContainsString('
63  extensionName = MyExtension
64  pluginName = Pi1', $staticTypoScript);
65  $expectedResult = [
66  'controllers' => [
67  FirstController::class => [
68  'className' => FirstController::class,
69  'alias' => 'First',
70  'actions' => ['index'],
71  ],
72  ],
73  'pluginType' => 'list_type',
74  ];
75  self::assertEquals($expectedResult, ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions']['MyExtension']['plugins']['Pi1']);
76  }
77 
78  #[Test]
80  {
81  $this->expectException(\InvalidArgumentException::class);
82  $this->expectExceptionCode(1239891990);
83  ‪ExtensionUtility::configurePlugin('', 'SomePlugin', [
84  'FirstController' => ['index'],
85  ]);
86  }
87 
88  #[Test]
90  {
91  $this->expectException(\InvalidArgumentException::class);
92  $this->expectExceptionCode(1239891988);
93  ‪ExtensionUtility::configurePlugin('MyExtension', '', [
94  'FirstController' => ['index'],
95  ]);
96  }
97 
98  #[Test]
100  {
101  ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.'] = [];
102  ‪ExtensionUtility::configurePlugin('MyExtension', 'Pi1', [
103  FirstController::class => ['index', 'show', 'new', 'create', 'delete', 'edit', 'update'],
104  ], [
105  FirstController::class => ['index', 'show'],
106  ]);
107  $staticTypoScript = ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.']['defaultContentRendering'];
108  self::assertStringContainsString('tt_content.list.20.myextension_pi1 = EXTBASEPLUGIN', $staticTypoScript);
109  self::assertStringContainsString('
110  extensionName = MyExtension
111  pluginName = Pi1', $staticTypoScript);
112  $expectedResult = [
113  'controllers' => [
114  FirstController::class => [
115  'className' => FirstController::class,
116  'alias' => 'First',
117  'actions' => ['index', 'show', 'new', 'create', 'delete', 'edit', 'update'],
118  'nonCacheableActions' => ['index', 'show'],
119  ],
120  ],
121  'pluginType' => 'list_type',
122  ];
123  self::assertEquals($expectedResult, ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions']['MyExtension']['plugins']['Pi1']);
124  }
125 
126  #[Test]
128  {
129  ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.'] = [];
130  ‪ExtensionUtility::configurePlugin('MyExtension', 'Pi1', [
131  FirstController::class => ['index', 'show', 'new', 'create', 'delete', 'edit', 'update'],
132  ], [
133  FirstController::class => ['new', 'show'],
134  ]);
135  $staticTypoScript = ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.']['defaultContentRendering'];
136  self::assertStringContainsString('tt_content.list.20.myextension_pi1 = EXTBASEPLUGIN', $staticTypoScript);
137  self::assertStringContainsString('
138  extensionName = MyExtension
139  pluginName = Pi1', $staticTypoScript);
140  $expectedResult = [
141  'controllers' => [
142  FirstController::class => [
143  'className' => FirstController::class,
144  'alias' => 'First',
145  'actions' => ['index', 'show', 'new', 'create', 'delete', 'edit', 'update'],
146  'nonCacheableActions' => ['new', 'show'],
147  ],
148  ],
149  'pluginType' => 'list_type',
150  ];
151  self::assertEquals($expectedResult, ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions']['MyExtension']['plugins']['Pi1']);
152  }
153 
154  #[Test]
156  {
157  ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.'] = [];
158  ‪ExtensionUtility::configurePlugin('MyExtension', 'Pi1', [
159  FirstController::class => ['index', 'show', 'new', 'create', 'delete', 'edit', 'update'],
160  SecondController::class => ['index', 'show', 'delete'],
161  ThirdController::class => ['create'],
162  ], [
163  FirstController::class => ['new', 'create', 'edit', 'update'],
164  ThirdController::class => ['create'],
165  ]);
166  $expectedResult = [
167  'controllers' => [
168  FirstController::class => [
169  'className' => FirstController::class,
170  'alias' => 'First',
171  'actions' => ['index', 'show', 'new', 'create', 'delete', 'edit', 'update'],
172  'nonCacheableActions' => ['new', 'create', 'edit', 'update'],
173  ],
174  SecondController::class => [
175  'className' => SecondController::class,
176  'alias' => 'Second',
177  'actions' => ['index', 'show', 'delete'],
178  ],
179  ThirdController::class => [
180  'className' => ThirdController::class,
181  'alias' => 'Third',
182  'actions' => ['create'],
183  'nonCacheableActions' => ['create'],
184  ],
185  ],
186  'pluginType' => 'list_type',
187  ];
188  self::assertEquals($expectedResult, ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions']['MyExtension']['plugins']['Pi1']);
189  }
190 
191  #[Test]
193  {
194  ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.'] = [];
195  ‪ExtensionUtility::configurePlugin('MyExtension', 'Pi1', [
196  FirstController::class => ['index', 'show', 'new', 'create', 'delete', 'edit', 'update'],
197  SecondController::class => ['index', 'show', 'delete'],
198  ThirdController::class => ['create'],
199  ], [
200  FirstController::class => ['new', 'create', 'edit', 'update'],
201  ThirdController::class => ['create'],
202  ]);
203  $expectedResult = [
204  'controllers' => [
205  FirstController::class => [
206  'className' => FirstController::class,
207  'alias' => 'First',
208  'actions' => ['index', 'show', 'new', 'create', 'delete', 'edit', 'update'],
209  'nonCacheableActions' => ['new', 'create', 'edit', 'update'],
210  ],
211  SecondController::class => [
212  'className' => SecondController::class,
213  'alias' => 'Second',
214  'actions' => ['index', 'show', 'delete'],
215  ],
216  ThirdController::class => [
217  'className' => ThirdController::class,
218  'alias' => 'Third',
219  'actions' => ['create'],
220  'nonCacheableActions' => ['create'],
221  ],
222  ],
223  'pluginType' => 'list_type',
224  ];
225  self::assertEquals($expectedResult, ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions']['MyExtension']['plugins']['Pi1']);
226  }
227 
228  #[Test]
230  {
231  ‪$GLOBALS['TYPO3_CONF_VARS']['FE']['defaultTypoScript_setup.'] = [];
232  ‪ExtensionUtility::configurePlugin('MyExtension', 'Pi1', [
233  FirstController::class => ['index', 'show', 'new', 'create', 'delete', 'edit', 'update'],
234  SecondController::class => ['index', 'show', 'delete'],
235  ThirdController::class => ['create'],
236  ], [
237  FirstController::class => ['index', 'new', 'create', 'edit', 'update'],
238  SecondController::class => ['delete'],
239  ThirdController::class => ['create'],
240  ]);
241  $expectedResult = [
242  'controllers' => [
243  FirstController::class => [
244  'className' => FirstController::class,
245  'alias' => 'First',
246  'actions' => ['index', 'show', 'new', 'create', 'delete', 'edit', 'update'],
247  'nonCacheableActions' => ['index', 'new', 'create', 'edit', 'update'],
248  ],
249  SecondController::class => [
250  'className' => SecondController::class,
251  'alias' => 'Second',
252  'actions' => ['index', 'show', 'delete'],
253  'nonCacheableActions' => ['delete'],
254  ],
255  ThirdController::class => [
256  'className' => ThirdController::class,
257  'alias' => 'Third',
258  'actions' => ['create'],
259  'nonCacheableActions' => ['create'],
260  ],
261  ],
262  'pluginType' => 'list_type',
263  ];
264  self::assertEquals($expectedResult, ‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['extbase']['extensions']['MyExtension']['plugins']['Pi1']);
265  }
266 
271  #[Test]
273  {
274  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['items'] = [];
276  'indexed_search',
277  'Pi2',
278  'Testing'
279  );
280  self::assertEquals(
281  'EXT:indexed_search/Resources/Public/Icons/Extension.png',
282  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['items'][0]['icon']
283  );
284  self::assertSame(
285  'indexedsearch_pi2',
286  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['items'][0]['value']
287  );
288  }
289 
290  #[Test]
292  {
293  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['items'] = [];
295  'indexed_search',
296  'Pi2',
297  'Testing'
298  );
299  self::assertSame('indexedsearch_pi2', $result);
300  }
301 
306  #[Test]
308  {
309  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['items'] = [];
311  'IndexedSearch',
312  'Pi2',
313  'Testing'
314  );
315  self::assertEquals(
316  'EXT:indexed_search/Resources/Public/Icons/Extension.png',
317  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['items'][0]['icon']
318  );
319  self::assertSame(
320  'indexedsearch_pi2',
321  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['items'][0]['value']
322  );
323  }
324 
329  #[Test]
331  {
332  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['items'] = [];
334  'IndexedSearch',
335  'Pi2',
336  'Testing',
337  'EXT:indexed_search/foo.gif'
338  );
339  self::assertEquals(
340  'EXT:indexed_search/foo.gif',
341  ‪$GLOBALS['TCA']['tt_content']['columns']['list_type']['config']['items'][0]['icon']
342  );
343  }
344 
346  {
347  return [
348  'Class in root namespace without controller suffix' => [
349  '',
350  'Foo',
351  ],
352  'Class in root namespace without controller suffix (2)' => [
353  '',
354  'FooBarBazQuxBlaBlub',
355  ],
356  'Controller in root namespace' => [
357  'Foo',
358  'FooController',
359  ],
360  'Controller in root namespace (lowercase)' => [
361  'foo',
362  'fooController',
363  ],
364  'Controller in namespace' => [
365  'Foo',
366  'TYPO3\\CMS\\Ext\\Controller\\FooController',
367  ],
368  'Controller in arbitrary namespace' => [
369  'Foo',
370  'Foo\\Bar\\baz\\qUx\\FooController',
371  ],
372  'Controller with lowercase suffix' => [
373  '',
374  'Foo\\Bar\\baz\\qUx\\Foocontroller',
375  ],
376  'Controller in arbitrary namespace with subfolder in Controller namespace' => [
377  'Baz\\Foo',
378  'Foo\\Bar\\Controller\\Baz\\FooController',
379  ],
380  ];
381  }
382 
383  #[DataProvider('checkResolveControllerAliasFromControllerClassNameDataProvider')]
384  #[Test]
385  public function ‪checkResolveControllerAliasFromControllerClassName(string $expectedControllerAlias, string $controllerClassName): void
386  {
387  self::assertEquals(
388  $expectedControllerAlias,
390  );
391  }
392 }
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\configurePluginWorksForASingleControllerAction
‪configurePluginWorksForASingleControllerAction()
Definition: ExtensionUtilityTest.php:54
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\Fixtures\MyExtension\Controller\FirstController
Definition: FirstController.php:20
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\configurePluginWorksForMultipleControllerActionsAsArrayWithCacheableActionAsDefault
‪configurePluginWorksForMultipleControllerActionsAsArrayWithCacheableActionAsDefault()
Definition: ExtensionUtilityTest.php:192
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\configurePluginWorksForMultipleControllerActionsWithNonCacheableActionAsDefault
‪configurePluginWorksForMultipleControllerActionsWithNonCacheableActionAsDefault()
Definition: ExtensionUtilityTest.php:229
‪TYPO3\CMS\Extbase\Utility\ExtensionUtility
Definition: ExtensionUtility.php:27
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\registerPluginTriggersAddPluginWhichSetsPluginIconPathIfUsingUnderscoredExtensionNameAndIconPathNotGiven
‪registerPluginTriggersAddPluginWhichSetsPluginIconPathIfUsingUnderscoredExtensionNameAndIconPathNotGiven()
Definition: ExtensionUtilityTest.php:272
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\Fixtures\ExtensionUtilityAccessibleProxy\resolveControllerAliasFromControllerClassName
‪static resolveControllerAliasFromControllerClassName(string $controllerClassName)
Definition: ExtensionUtilityAccessibleProxy.php:27
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest
Definition: ExtensionUtilityTest.php:30
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\configurePluginCreatesCorrectDefaultTypoScriptSetup
‪configurePluginCreatesCorrectDefaultTypoScriptSetup()
Definition: ExtensionUtilityTest.php:45
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\registerPluginTriggersAddPluginWhichSetsPluginIconPathIfIconPathIsGiven
‪registerPluginTriggersAddPluginWhichSetsPluginIconPathIfIconPathIsGiven()
Definition: ExtensionUtilityTest.php:330
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\registerPluginTriggersAddPluginWhichSetsPluginIconPathIfUsingUpperCameCasedExtensionNameAndIconPathNotGiven
‪registerPluginTriggersAddPluginWhichSetsPluginIconPathIfUsingUpperCameCasedExtensionNameAndIconPathNotGiven()
Definition: ExtensionUtilityTest.php:307
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\configurePluginWorksForMinimalisticSetup
‪configurePluginWorksForMinimalisticSetup()
Definition: ExtensionUtilityTest.php:32
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\checkResolveControllerAliasFromControllerClassNameDataProvider
‪static checkResolveControllerAliasFromControllerClassNameDataProvider()
Definition: ExtensionUtilityTest.php:345
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\configurePluginThrowsExceptionIfPluginNameIsEmpty
‪configurePluginThrowsExceptionIfPluginNameIsEmpty()
Definition: ExtensionUtilityTest.php:89
‪TYPO3\CMS\Extbase\Utility\ExtensionUtility\configurePlugin
‪static configurePlugin($extensionName, $pluginName, array $controllerActions, array $nonCacheableControllerActions=[], $pluginType=self::PLUGIN_TYPE_PLUGIN)
Definition: ExtensionUtility.php:48
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\configurePluginRespectsNonDefaultActionAsANonCacheableAction
‪configurePluginRespectsNonDefaultActionAsANonCacheableAction()
Definition: ExtensionUtilityTest.php:127
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\Fixtures\MyExtension\Controller\SecondController
Definition: SecondController.php:20
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\configurePluginRespectsDefaultActionAsANonCacheableAction
‪configurePluginRespectsDefaultActionAsANonCacheableAction()
Definition: ExtensionUtilityTest.php:99
‪TYPO3\CMS\Extbase\Tests\Unit\Utility
Definition: DebuggerUtilityTest.php:18
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\Fixtures\ExtensionUtilityAccessibleProxy
Definition: ExtensionUtilityAccessibleProxy.php:26
‪TYPO3\CMS\Extbase\Utility\ExtensionUtility\registerPlugin
‪static registerPlugin($extensionName, $pluginName, $pluginTitle, $pluginIcon=null, $group='default', string $pluginDescription='')
Definition: ExtensionUtility.php:129
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\checkResolveControllerAliasFromControllerClassName
‪checkResolveControllerAliasFromControllerClassName(string $expectedControllerAlias, string $controllerClassName)
Definition: ExtensionUtilityTest.php:385
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\configurePluginThrowsExceptionIfExtensionNameIsEmpty
‪configurePluginThrowsExceptionIfExtensionNameIsEmpty()
Definition: ExtensionUtilityTest.php:79
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\configurePluginWorksForMultipleControllerActionsWithCacheableActionAsDefault
‪configurePluginWorksForMultipleControllerActionsWithCacheableActionAsDefault()
Definition: ExtensionUtilityTest.php:155
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\ExtensionUtilityTest\registerPluginMethodReturnsPluginSignature
‪registerPluginMethodReturnsPluginSignature()
Definition: ExtensionUtilityTest.php:291
‪TYPO3\CMS\Extbase\Tests\Unit\Utility\Fixtures\MyExtension\Controller\ThirdController
Definition: ThirdController.php:20