‪TYPO3CMS  11.5
AbstractMenuContentObjectTest.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 Doctrine\DBAL\Result;
21 use PHPUnit\Framework\MockObject\MockObject;
22 use Prophecy\Argument;
23 use Prophecy\PhpUnit\ProphecyTrait;
40 use TYPO3\CMS\Core\Package\PackageManager;
45 use TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer;
48 use TYPO3\TestingFramework\Core\AccessibleObjectInterface;
49 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
50 
51 class ‪AbstractMenuContentObjectTest extends UnitTestCase
52 {
53  use ProphecyTrait;
54 
58  protected ‪$subject;
59 
63  protected function ‪setUp(): void
64  {
65  parent::setUp();
66  ‪$GLOBALS['TYPO3_REQUEST'] = (new ‪ServerRequest('https://www.example.com', 'GET'))
67  ->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_FE);
68  $this->subject = $this->getAccessibleMockForAbstractClass(AbstractMenuContentObject::class);
69  $site = new ‪Site('test', 1, [
70  'base' => 'https://www.example.com',
71  'languages' => [
72  [
73  'languageId' => 0,
74  'title' => 'English',
75  'locale' => 'en_UK',
76  'base' => '/',
77  ],
78  ],
79  ]);
80  $packageManagerProphecy = $this->prophesize(PackageManager::class);
81  $cacheManagerProphecy = $this->prophesize(CacheManager::class);
82  GeneralUtility::setSingletonInstance(CacheManager::class, $cacheManagerProphecy->reveal());
83  $cacheFrontendProphecy = $this->prophesize(FrontendInterface::class);
84  $cacheManagerProphecy->getCache('l10n')->willReturn($cacheFrontendProphecy->reveal());
85  $cacheFrontendProphecy->get(Argument::cetera())->willReturn(false);
86  $cacheFrontendProphecy->set(Argument::cetera())->willReturn(null);
87  $languageService = new ‪LanguageService(new ‪Locales(), new ‪LocalizationFactory(new ‪LanguageStore($packageManagerProphecy->reveal()), $cacheManagerProphecy->reveal()), $cacheFrontendProphecy->reveal());
88  $languageServiceFactoryProphecy = $this->prophesize(LanguageServiceFactory::class);
89  $languageServiceFactoryProphecy->createFromSiteLanguage(Argument::any())->willReturn($languageService);
90  GeneralUtility::addInstance(LanguageServiceFactory::class, $languageServiceFactoryProphecy->reveal());
91  $frontendUserProphecy = $this->prophesize(FrontendUserAuthentication::class);
92  ‪$GLOBALS['TSFE'] = $this->getMockBuilder(TypoScriptFrontendController::class)
93  ->setConstructorArgs([new ‪Context(), $site, $site->getDefaultLanguage(), new ‪PageArguments(1, '1', []), $frontendUserProphecy->reveal()])
94  ->onlyMethods(['initCaches'])
95  ->getMock();
96  ‪$GLOBALS['TSFE']->cObj = new ContentObjectRenderer();
97  ‪$GLOBALS['TSFE']->page = [];
98  }
99 
103  protected function ‪tearDown(): void
104  {
105  GeneralUtility::purgeInstances();
106  parent::tearDown();
107  }
108 
110  // Tests concerning sectionIndex
112 
115  protected function ‪prepareSectionIndexTest(): void
116  {
117  $connectionProphet = $this->prophesize(Connection::class);
118  $connectionProphet->getExpressionBuilder()->willReturn(new ‪ExpressionBuilder($connectionProphet->reveal()));
119  $connectionProphet->quoteIdentifier(Argument::cetera())->willReturnArgument(0);
120 
121  $connectionPoolProphet = $this->prophesize(ConnectionPool::class);
122  $connectionPoolProphet->getConnectionForTable('tt_content')->willReturn($connectionProphet->reveal());
123  GeneralUtility::addInstance(ConnectionPool::class, $connectionPoolProphet->reveal());
124  }
125 
130  {
132  $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
133  $pageRepository->expects(self::once())->method('getPage')->willReturn(null);
134  $this->subject->_set('sys_page', $pageRepository);
135  $result = $this->subject->_call('sectionIndex', 'field');
136  self::assertEquals([], $result);
137  }
138 
143  {
145  $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
146  $pageRepository->expects(self::once())->method('getPage')->willReturn(null)->with(10);
147  $this->subject->_set('sys_page', $pageRepository);
148  $this->subject->_set('id', 10);
149  $result = $this->subject->_call('sectionIndex', 'field');
150  self::assertEquals([], $result);
151  }
152 
157  {
158  $this->expectException(\UnexpectedValueException::class);
159  $this->expectExceptionCode(1337334849);
161  $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
162  $pageRepository->expects(self::once())->method('getPage')->willReturn([]);
163  $this->subject->_set('sys_page', $pageRepository);
164  $this->subject->_set('id', 10);
165 
166  $cObject = $this->getMockBuilder(ContentObjectRenderer::class)->getMock();
167  $cObject->expects(self::once())->method('exec_getQuery')->willReturn(0);
168  $this->subject->_set('parent_cObj', $cObject);
169 
170  $this->subject->_call('sectionIndex', 'field');
171  }
172 
177  {
178  $statementProphet = $this->prophesize(Result::class);
179  $statementProphet->fetchAssociative()->shouldBeCalledTimes(2)->willReturn(['uid' => 0, 'header' => 'NOT_OVERLAID'], false);
180 
182  $this->subject->_set('mconf', [
183  'sectionIndex.' => [
184  'type' => 'all',
185  ],
186  ]);
187  $context = GeneralUtility::makeInstance(Context::class);
188  $context->setAspect('language', new ‪LanguageAspect(1, 1, ‪LanguageAspect::OVERLAYS_MIXED));
189 
190  $pageRepository = $this->getMockBuilder(PageRepository::class)->setConstructorArgs([$context])->getMock();
191  $pageRepository->expects(self::once())->method('getPage')->willReturn(['_PAGES_OVERLAY_LANGUAGE' => 1]);
192  $pageRepository->expects(self::once())->method('getRecordOverlay')->willReturn(['uid' => 0, 'header' => 'OVERLAID']);
193  $this->subject->_set('sys_page', $pageRepository);
194 
195  $cObject = $this->getMockBuilder(ContentObjectRenderer::class)->getMock();
196  $cObject->expects(self::once())->method('exec_getQuery')->willReturn($statementProphet->reveal());
197  $this->subject->_set('parent_cObj', $cObject);
198 
199  $result = $this->subject->_call('sectionIndex', 'field');
200  self::assertEquals('OVERLAID', $result[0]['title']);
201  }
202 
206  public function ‪sectionIndexFiltersDataProvider(): array
207  {
208  return [
209  'unfiltered fields' => [
210  1,
211  [
212  'sectionIndex' => 1,
213  'header' => 'foo',
214  'header_layout' => 1,
215  ],
216  ],
217  'with unset section index' => [
218  0,
219  [
220  'sectionIndex' => 0,
221  'header' => 'foo',
222  'header_layout' => 1,
223  ],
224  ],
225  'with unset header' => [
226  0,
227  [
228  'sectionIndex' => 1,
229  'header' => '',
230  'header_layout' => 1,
231  ],
232  ],
233  'with header layout 100' => [
234  0,
235  [
236  'sectionIndex' => 1,
237  'header' => 'foo',
238  'header_layout' => 100,
239  ],
240  ],
241  ];
242  }
243 
250  public function ‪sectionIndexFilters(int $expectedAmount, array $dataRow): void
251  {
252  $statementProphet = $this->prophesize(Result::class);
253  $statementProphet->fetchAssociative()->willReturn($dataRow, false);
254 
256  $this->subject->_set('mconf', [
257  'sectionIndex.' => [
258  'type' => 'header',
259  ],
260  ]);
261 
262  $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
263  $pageRepository->expects(self::once())->method('getPage')->willReturn(['_PAGES_OVERLAY_LANGUAGE' => 1]);
264  $pageRepository->expects(self::once())->method('getPage')->willReturn([]);
265  $this->subject->_set('sys_page', $pageRepository);
266 
267  $cObject = $this->getMockBuilder(ContentObjectRenderer::class)->getMock();
268  $cObject->expects(self::once())->method('exec_getQuery')->willReturn($statementProphet->reveal());
269  $this->subject->_set('parent_cObj', $cObject);
270 
271  $result = $this->subject->_call('sectionIndex', 'field');
272  self::assertCount($expectedAmount, $result);
273  }
274 
279  {
280  return [
281  'no configuration' => [
282  [],
283  '0',
284  'colPos = 0',
285  ],
286  'with useColPos 2' => [
287  [
288  'useColPos' => 2,
289  ],
290  '2',
291  'colPos = 2',
292  ],
293  'with useColPos -1' => [
294  [
295  'useColPos' => -1,
296  ],
297  '-1',
298  '',
299  ],
300  'with stdWrap useColPos' => [
301  [
302  'useColPos.' => [
303  'wrap' => '2|',
304  ],
305  ],
306  '2',
307  'colPos = 2',
308  ],
309  ];
310  }
311 
319  public function ‪sectionIndexQueriesWithDifferentColPos(array $configuration, string $colPosFromStdWrapValue, string $whereClausePrefix): void
320  {
321  $statementProphet = $this->prophesize(Result::class);
322  $statementProphet->fetchAssociative()->willReturn([]);
323 
325  $this->subject->_set('mconf', ['sectionIndex.' => $configuration]);
326 
327  $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
328  $pageRepository->expects(self::once())->method('getPage')->willReturn([]);
329  $this->subject->_set('sys_page', $pageRepository);
330 
331  $queryConfiguration = [
332  'pidInList' => 12,
333  'orderBy' => 'field',
334  'languageField' => 'sys_language_uid',
335  'where' => $whereClausePrefix,
336  ];
337 
338  $cObject = $this->getMockBuilder(ContentObjectRenderer::class)->getMock();
339  $cObject
340  ->expects(self::once())
341  ->method('stdWrapValue')
342  ->with('useColPos', $configuration)
343  ->willReturn($colPosFromStdWrapValue);
344  $cObject
345  ->expects(self::once())
346  ->method('exec_getQuery')
347  ->with('tt_content', $queryConfiguration)
348  ->willReturn($statementProphet->reveal());
349  $this->subject->parent_cObj = $cObject;
350 
351  $this->subject->_call('sectionIndex', 'field', 12);
352  }
353 
355  // Tests concerning menu item states
357 
360  public function ‪ifsubHasToCheckExcludeUidListDataProvider(): array
361  {
362  return [
363  'none excluded' => [
364  [12, 34, 56],
365  '1, 23, 456',
366  true,
367  ],
368  'one excluded' => [
369  [1, 234, 567],
370  '1, 23, 456',
371  true,
372  ],
373  'three excluded' => [
374  [1, 23, 456],
375  '1, 23, 456',
376  false,
377  ],
378  'empty excludeList' => [
379  [1, 123, 45],
380  '',
381  true,
382  ],
383  'empty menu' => [
384  [],
385  '1, 23, 456',
386  false,
387  ],
388  ];
389  }
390 
398  public function ‪ifsubHasToCheckExcludeUidList(array $menuItems, string $excludeUidList, bool $expectedResult): void
399  {
400  $menu = [];
401  foreach ($menuItems as $page) {
402  $menu[] = ['uid' => $page];
403  }
404  $runtimeCacheMock = $this->getMockBuilder(VariableFrontend::class)->onlyMethods(['get', 'set'])->disableOriginalConstructor()->getMock();
405  $runtimeCacheMock->expects(self::once())->method('get')->with(self::anything())->willReturn(false);
406  $runtimeCacheMock->expects(self::once())->method('set')->with(self::anything(), ['result' => $expectedResult]);
407 
408  $this->subject = $this->getAccessibleMockForAbstractClass(AbstractMenuContentObject::class, [], '', true, true, true, ['getRuntimeCache']);
409  $cObjectMock = $this->getMockBuilder(ContentObjectRenderer::class)->getMock();
410  $cObjectMock
411  ->expects(self::once())
412  ->method('stdWrapValue')
413  ->with('excludeUidList', ['excludeUidList' => $excludeUidList])
414  ->willReturn($excludeUidList);
415 
416  $typoScriptFrontendControllerMock = $this->createMock(TypoScriptFrontendController::class);
417  $cObjectMock->method('getTypoScriptFrontendController')->willReturn($typoScriptFrontendControllerMock);
418 
419  $this->subject->parent_cObj = $cObjectMock;
420  $this->subject->expects(self::once())->method('getRuntimeCache')->willReturn($runtimeCacheMock);
422 
423  $pageRepository = $this->getMockBuilder(PageRepository::class)->getMock();
424  $pageRepository->expects(self::once())->method('getMenu')->willReturn($menu);
425  $this->subject->_set('sys_page', $pageRepository);
426  $this->subject->_set('menuArr', [
427  0 => ['uid' => 1],
428  ]);
429  $this->subject->_set('conf', ['excludeUidList' => $excludeUidList]);
430 
431  self::assertEquals($expectedResult, $this->subject->_call('isItemState', 'IFSUB', 0));
432  }
433 
438  {
439  return [
440  'standard parameter without access protected setting' => [
441  [
442  'parameter' => 1,
443  ],
444  [
445  'showAccessRestrictedPages' => false,
446  ],
447  ['uid' => 1],
448  '',
449  0,
450  '',
451  ],
452  'standard parameter with access protected setting' => [
453  [
454  'parameter' => 10,
455  ],
456  [
457  'showAccessRestrictedPages' => true,
458  ],
459  ['uid' => 10],
460  '',
461  0,
462  '',
463  ],
464  'standard parameter with access protected setting "NONE" casts to boolean linkAccessRestrictedPages (delegates resolving to typoLink method internals)' => [
465  [
466  'parameter' => 10,
467  ],
468  [
469  'showAccessRestrictedPages' => 'NONE',
470  ],
471  ['uid' => 10],
472  '',
473  0,
474  '',
475  ],
476  'standard parameter with access protected setting (int)67 casts to boolean linkAccessRestrictedPages (delegates resolving to typoLink method internals)' => [
477  [
478  'parameter' => 10,
479  ],
480  [
481  'showAccessRestrictedPages' => 67,
482  ],
483  ['uid' => 10],
484  '',
485  0,
486  '',
487  ],
488  'standard parameter with target' => [
489  [
490  'parameter' => 1,
491  'target' => '_blank',
492  ],
493  [
494  'showAccessRestrictedPages' => false,
495  ],
496  ['uid' => 1],
497  '_blank',
498  0,
499  '',
500  ],
501  'parameter with typeOverride=10' => [
502  [
503  'parameter' => '10,10',
504  ],
505  [
506  'showAccessRestrictedPages' => false,
507  ],
508  ['uid' => 10],
509  '',
510  '',
511  10,
512  ],
513  'parameter with target and typeOverride=10' => [
514  [
515  'parameter' => '10,10',
516  'target' => '_self',
517  ],
518  [
519  'showAccessRestrictedPages' => false,
520  ],
521  ['uid' => 10],
522  '_self',
523  '',
524  '10',
525  ],
526  'parameter with invalid value in typeOverride=foobar ignores typeOverride' => [
527  [
528  'parameter' => 20,
529  'target' => '_self',
530  ],
531  [
532  'showAccessRestrictedPages' => false,
533  ],
534  ['uid' => 20],
535  '_self',
536  '',
537  'foobar',
538  20,
539  ],
540  'standard parameter with section name' => [
541  [
542  'parameter' => 10,
543  'target' => '_blank',
544  'section' => 'section-name',
545  ],
546  [
547  'showAccessRestrictedPages' => false,
548  ],
549  [
550  'uid' => 10,
551  'sectionIndex_uid' => 'section-name',
552  ],
553  '_blank',
554  '',
555  '',
556  ],
557  'standard parameter with additional parameters' => [
558  [
559  'parameter' => 10,
560  'section' => 'section-name',
561  'additionalParams' => '&test=foobar',
562  ],
563  [
564  'showAccessRestrictedPages' => false,
565  ],
566  [
567  'uid' => 10,
568  'sectionIndex_uid' => 'section-name',
569  ],
570  '',
571  '&test=foobar',
572  '',
573  ],
574  'overridden page array uid value gets used as parameter' => [
575  [
576  'parameter' => 99,
577  'section' => 'section-name',
578  ],
579  [
580  'showAccessRestrictedPages' => false,
581  ],
582  [
583  'uid' => 10,
584  'sectionIndex_uid' => 'section-name',
585  ],
586  '',
587  '',
588  '',
589  99,
590  ],
591  ];
592  }
593 
605  public function ‪menuTypoLinkCreatesExpectedTypoLinkConfiguration(array $expected, array $mconf, array $page, string $oTarget, $addParams = '', $typeOverride = '', $overrideId = null): void
606  {
607  $cObject = $this->getMockBuilder(ContentObjectRenderer::class)
608  ->onlyMethods(['typoLink'])
609  ->getMock();
610  $cObject->expects(self::once())->method('typoLink')->with('|', $expected);
611  $this->subject->_set('parent_cObj', $cObject);
612  $this->subject->_set('mconf', $mconf);
613  $this->subject->_call('menuTypoLink', $page, $oTarget, $addParams, $typeOverride, $overrideId);
614  }
615 }
‪TYPO3\CMS\Core\Localization\LanguageServiceFactory
Definition: LanguageServiceFactory.php:25
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\ifsubHasToCheckExcludeUidList
‪ifsubHasToCheckExcludeUidList(array $menuItems, string $excludeUidList, bool $expectedResult)
Definition: AbstractMenuContentObjectTest.php:396
‪TYPO3\CMS\Core\Routing\PageArguments
Definition: PageArguments.php:26
‪TYPO3\CMS\Core\Database\Query\Expression\ExpressionBuilder
Definition: ExpressionBuilder.php:36
‪TYPO3\CMS\Core\Context\LanguageAspect\OVERLAYS_MIXED
‪const OVERLAYS_MIXED
Definition: LanguageAspect.php:75
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\sectionIndexReturnsOverlaidRowBasedOnTheLanguageOfTheGivenPage
‪sectionIndexReturnsOverlaidRowBasedOnTheLanguageOfTheGivenPage()
Definition: AbstractMenuContentObjectTest.php:174
‪TYPO3\CMS\Core\Localization\LocalizationFactory
Definition: LocalizationFactory.php:31
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder
Definition: SystemEnvironmentBuilder.php:41
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\sectionIndexUsesTheInternalIdIfNoPageIdWasGiven
‪sectionIndexUsesTheInternalIdIfNoPageIdWasGiven()
Definition: AbstractMenuContentObjectTest.php:140
‪TYPO3\CMS\Core\Localization\Locales
Definition: Locales.php:30
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\sectionIndexFiltersDataProvider
‪array sectionIndexFiltersDataProvider()
Definition: AbstractMenuContentObjectTest.php:204
‪TYPO3\CMS\Frontend\ContentObject\Menu\AbstractMenuContentObject
Definition: AbstractMenuContentObject.php:48
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:53
‪TYPO3\CMS\Core\Site\Entity\Site
Definition: Site.php:42
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\menuTypoLinkCreatesExpectedTypoLinkConfigurationDataProvider
‪array menuTypoLinkCreatesExpectedTypoLinkConfigurationDataProvider()
Definition: AbstractMenuContentObjectTest.php:435
‪TYPO3\CMS\Core\Localization\LanguageStore
Definition: LanguageStore.php:29
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\sectionIndexFilters
‪sectionIndexFilters(int $expectedAmount, array $dataRow)
Definition: AbstractMenuContentObjectTest.php:248
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\tearDown
‪tearDown()
Definition: AbstractMenuContentObjectTest.php:101
‪TYPO3\CMS\Core\Cache\Frontend\VariableFrontend
Definition: VariableFrontend.php:25
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\setUp
‪setUp()
Definition: AbstractMenuContentObjectTest.php:61
‪TYPO3\CMS\Core\Cache\CacheManager
Definition: CacheManager.php:36
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:37
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\sectionIndexReturnsEmptyArrayIfTheRequestedPageCouldNotBeFetched
‪sectionIndexReturnsEmptyArrayIfTheRequestedPageCouldNotBeFetched()
Definition: AbstractMenuContentObjectTest.php:127
‪TYPO3\CMS\Core\Context\LanguageAspect
Definition: LanguageAspect.php:57
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\menuTypoLinkCreatesExpectedTypoLinkConfiguration
‪menuTypoLinkCreatesExpectedTypoLinkConfiguration(array $expected, array $mconf, array $page, string $oTarget, $addParams='', $typeOverride='', $overrideId=null)
Definition: AbstractMenuContentObjectTest.php:603
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest
Definition: AbstractMenuContentObjectTest.php:52
‪TYPO3\CMS\Core\Database\Connection
Definition: Connection.php:38
‪TYPO3\CMS\Core\Cache\Frontend\FrontendInterface
Definition: FrontendInterface.php:22
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\$subject
‪AbstractMenuContentObject MockObject AccessibleObjectInterface $subject
Definition: AbstractMenuContentObjectTest.php:56
‪TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
Definition: TypoScriptFrontendController.php:104
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\ifsubHasToCheckExcludeUidListDataProvider
‪array ifsubHasToCheckExcludeUidListDataProvider()
Definition: AbstractMenuContentObjectTest.php:358
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\sectionIndexQueriesWithDifferentColPos
‪sectionIndexQueriesWithDifferentColPos(array $configuration, string $colPosFromStdWrapValue, string $whereClausePrefix)
Definition: AbstractMenuContentObjectTest.php:317
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\prepareSectionIndexTest
‪prepareSectionIndexTest()
Definition: AbstractMenuContentObjectTest.php:113
‪TYPO3\CMS\Core\Localization\LanguageService
Definition: LanguageService.php:42
‪TYPO3\CMS\Frontend\Authentication\FrontendUserAuthentication
Definition: FrontendUserAuthentication.php:32
‪TYPO3\CMS\Core\Domain\Repository\PageRepository
Definition: PageRepository.php:53
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\sectionIndexQueriesWithDifferentColPosDataProvider
‪array sectionIndexQueriesWithDifferentColPosDataProvider()
Definition: AbstractMenuContentObjectTest.php:276
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder\REQUESTTYPE_FE
‪const REQUESTTYPE_FE
Definition: SystemEnvironmentBuilder.php:43
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu\AbstractMenuContentObjectTest\sectionIndexThrowsAnExceptionIfTheInternalQueryFails
‪sectionIndexThrowsAnExceptionIfTheInternalQueryFails()
Definition: AbstractMenuContentObjectTest.php:154
‪TYPO3\CMS\Frontend\Tests\Unit\ContentObject\Menu
Definition: AbstractMenuContentObjectTest.php:18