‪TYPO3CMS  11.5
TemplateServiceTest.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\MockObject\MockObject;
21 use Prophecy\Argument;
22 use Prophecy\PhpUnit\ProphecyTrait;
23 use Prophecy\Prophecy\ObjectProphecy;
26 use TYPO3\CMS\Core\Database\Query\QueryBuilder;
28 use TYPO3\CMS\Core\Package\PackageManager;
35 use TYPO3\TestingFramework\Core\AccessibleObjectInterface;
36 use TYPO3\TestingFramework\Core\Unit\UnitTestCase;
37 
41 class ‪TemplateServiceTest extends UnitTestCase
42 {
43  use ProphecyTrait;
44 
46 
51 
52  protected ?PackageManager ‪$backupPackageManager;
53 
55  protected ObjectProphecy ‪$packageManagerProphecy;
56 
60  protected function ‪setUp(): void
61  {
62  parent::setUp();
63  ‪$GLOBALS['SIM_ACCESS_TIME'] = time();
64  ‪$GLOBALS['ACCESS_TIME'] = time();
65  $this->packageManagerProphecy = $this->prophesize(PackageManager::class);
66  $frontendController = $this->prophesize(TypoScriptFrontendController::class);
67  $frontendController->getSite()->willReturn(new ‪Site('dummy', 13, [
68  'base' => 'https://example.com',
69  'settings' => [
70  'random' => 'value',
71  'styles' => [
72  'content' => [
73  'loginform' => [
74  'pid' => 123,
75  ],
76  ],
77  ],
78  'numberedThings' => [
79  1 => 'foo',
80  99 => 'bar',
81  ],
82  ],
83  ]));
84  $this->templateService = new ‪TemplateService(
85  new ‪Context(),
86  $this->packageManagerProphecy->reveal(),
87  $frontendController->reveal()
88  );
90  }
91 
95  public function ‪tearDown(): void
96  {
98  parent::tearDown();
99  }
100 
105  {
106  $queryBuilderProphet = $this->prophesize(QueryBuilder::class);
107  $connectionPoolProphet = $this->prophesize(ConnectionPool::class);
108  $connectionPoolProphet->getQueryBuilderForTable(Argument::cetera())->willReturn($queryBuilderProphet->reveal());
109  GeneralUtility::addInstance(ConnectionPool::class, $connectionPoolProphet->reveal());
110 
111  $this->packageManagerProphecy->getActivePackages()->shouldNotBeCalled();
112 
113  $this->templateService->runThroughTemplates([], 0);
114  self::assertNotContains(
115  'test.Core.TypoScript = 1',
116  $this->templateService->config
117  );
118  }
119 
124  {
125  $queryBuilderProphet = $this->prophesize(QueryBuilder::class);
126  $connectionPoolProphet = $this->prophesize(ConnectionPool::class);
127  $connectionPoolProphet->getQueryBuilderForTable(Argument::cetera())->willReturn($queryBuilderProphet->reveal());
128  GeneralUtility::addInstance(ConnectionPool::class, $connectionPoolProphet->reveal());
129 
130  $mockPackage = $this->getMockBuilder(Package::class)
131  ->onlyMethods(['getPackagePath', 'getPackageKey'])
132  ->disableOriginalConstructor()
133  ->getMock();
134  $mockPackage->method('getPackagePath')->willReturn(__DIR__ . '/Fixtures/');
135  $mockPackage->method('getPackageKey')->willReturn('core');
136 
137  $mockPackageManager = $this->getMockBuilder(PackageManager::class)
138  ->onlyMethods(['isPackageActive', 'getPackage'])
139  ->disableOriginalConstructor()
140  ->getMock();
141  $mockPackageManager->method('isPackageActive')->willReturn(true);
142  $mockPackageManager->method('getPackage')->willReturn($mockPackage);
144  $this->packageManagerProphecy->getActivePackages()->willReturn(['core' => $mockPackage]);
145 
146  $this->templateService->setProcessExtensionStatics(true);
147  $this->templateService->runThroughTemplates([], 0);
148 
149  self::assertContains(
150  'test.Core.TypoScript = 1',
151  $this->templateService->config
152  );
153  }
154 
158  public function ‪updateRootlineDataOverwritesOwnArrayData(): void
159  {
160  $originalRootline = [
161  0 => ['uid' => 2, 'title' => 'originalTitle'],
162  1 => ['uid' => 3, 'title' => 'originalTitle2'],
163  ];
164 
165  $updatedRootline = [
166  0 => ['uid' => 1, 'title' => 'newTitle'],
167  1 => ['uid' => 2, 'title' => 'newTitle2'],
168  2 => ['uid' => 3, 'title' => 'newTitle3'],
169  ];
170 
171  $expectedRootline = [
172  0 => ['uid' => 2, 'title' => 'newTitle2'],
173  1 => ['uid' => 3, 'title' => 'newTitle3'],
174  ];
175 
176  $this->templateService->rootLine = $originalRootline;
177  $this->templateService->updateRootlineData($updatedRootline);
178  self::assertEquals($expectedRootline, $this->templateService->rootLine);
179  }
180 
185  {
186  $originalRootline = [
187  0 => ['uid' => 2, 'title' => 'originalTitle'],
188  1 => ['uid' => 3, 'title' => 'originalTitle2'],
189  ];
190 
191  $newInvalidRootline = [
192  0 => ['uid' => 1, 'title' => 'newTitle'],
193  1 => ['uid' => 2, 'title' => 'newTitle2'],
194  ];
195 
196  $this->expectException(\RuntimeException::class);
197  $this->expectExceptionCode(1370419654);
198 
199  $this->templateService->rootLine = $originalRootline;
200  $this->templateService->updateRootlineData($newInvalidRootline);
201  }
202 }
‪TYPO3\CMS\Core\Tests\Unit\TypoScript\TemplateServiceTest\$templateService
‪TemplateService $templateService
Definition: TemplateServiceTest.php:44
‪TYPO3\CMS\Core\Tests\Unit\TypoScript\TemplateServiceTest\$packageManagerProphecy
‪ObjectProphecy $packageManagerProphecy
Definition: TemplateServiceTest.php:53
‪TYPO3\CMS\Core\Tests\Unit\TypoScript
Definition: ExtendedTemplateServiceTest.php:18
‪TYPO3\CMS\Core\Tests\Unit\TypoScript\TemplateServiceTest\$backupPackageManager
‪PackageManager $backupPackageManager
Definition: TemplateServiceTest.php:50
‪TYPO3\CMS\Core\Context\Context
Definition: Context.php:53
‪TYPO3\CMS\Core\Tests\Unit\TypoScript\TemplateServiceTest\updateRootlineDataOverwritesOwnArrayData
‪updateRootlineDataOverwritesOwnArrayData()
Definition: TemplateServiceTest.php:156
‪TYPO3\CMS\Core\Site\Entity\Site
Definition: Site.php:42
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility
Definition: ExtensionManagementUtility.php:43
‪TYPO3\CMS\Core\Tests\Unit\TypoScript\TemplateServiceTest\$templateServiceMock
‪MockObject AccessibleObjectInterface TemplateService $templateServiceMock
Definition: TemplateServiceTest.php:48
‪TYPO3\CMS\Core\Tests\Unit\TypoScript\TemplateServiceTest
Definition: TemplateServiceTest.php:42
‪TYPO3\CMS\Core\Tests\Unit\TypoScript\TemplateServiceTest\extensionStaticFilesAreNotProcessedIfNotExplicitlyRequested
‪extensionStaticFilesAreNotProcessedIfNotExplicitlyRequested()
Definition: TemplateServiceTest.php:102
‪TYPO3\CMS\Core\Utility\ExtensionManagementUtility\setPackageManager
‪static setPackageManager(PackageManager $packageManager)
Definition: ExtensionManagementUtility.php:66
‪TYPO3\CMS\Core\Tests\Unit\TypoScript\TemplateServiceTest\updateRootlineDataWithInvalidNewRootlineThrowsException
‪updateRootlineDataWithInvalidNewRootlineThrowsException()
Definition: TemplateServiceTest.php:182
‪TYPO3\CMS\Core\Package\Package
Definition: Package.php:28
‪TYPO3\CMS\Core\Tests\Unit\TypoScript\TemplateServiceTest\tearDown
‪tearDown()
Definition: TemplateServiceTest.php:93
‪TYPO3\CMS\Core\Tests\Unit\TypoScript\TemplateServiceTest\setUp
‪setUp()
Definition: TemplateServiceTest.php:58
‪TYPO3\CMS\Core\Tests\Unit\Utility\AccessibleProxies\ExtensionManagementUtilityAccessibleProxy\getPackageManager
‪static getPackageManager()
Definition: ExtensionManagementUtilityAccessibleProxy.php:35
‪TYPO3\CMS\Core\TypoScript\TemplateService
Definition: TemplateService.php:46
‪TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
Definition: TypoScriptFrontendController.php:104
‪TYPO3\CMS\Core\Tests\Unit\TypoScript\TemplateServiceTest\extensionStaticsAreProcessedIfExplicitlyRequested
‪extensionStaticsAreProcessedIfExplicitlyRequested()
Definition: TemplateServiceTest.php:121
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Core\Database\ConnectionPool
Definition: ConnectionPool.php:46
‪TYPO3\CMS\Core\Tests\Unit\Utility\AccessibleProxies\ExtensionManagementUtilityAccessibleProxy
Definition: ExtensionManagementUtilityAccessibleProxy.php:29
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:50