‪TYPO3CMS  ‪main
PageViewHelperTest.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;
32 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
33 
34 final class ‪PageViewHelperTest extends FunctionalTestCase
35 {
37 
38  protected const ‪LANGUAGE_PRESETS = [
39  'EN' => ['id' => 0, 'title' => 'English', 'locale' => 'en_US.UTF8'],
40  ];
41 
42  protected array ‪$configurationToUseInTestInstance = [
43  'FE' => [
44  'cacheHash' => [
45  'excludedParameters' => [
46  'untrusted',
47  ],
48  ],
49  ],
50  ];
51 
52  #[Test]
53  public function ‪renderThrowsExceptionWithoutRequest(): void
54  {
55  $this->expectException(\RuntimeException::class);
56  $this->expectExceptionCode(1639820200);
57  $view = new ‪StandaloneView();
58  $view->setRequest();
59  $view->setTemplateSource('<f:uri.page />');
60  $view->render();
61  }
62 
63  #[Test]
65  {
66  $request = new ‪ServerRequest('http://localhost/typo3/');
67  $request = $request->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
68  $view = new ‪StandaloneView();
69  $view->setRequest($request);
70  $view->setTemplateSource('<f:uri.page>foo</f:uri.page>');
71  $result = $view->render();
72  self::assertSame('', $result);
73  }
74 
75  #[Test]
77  {
78  $request = new ‪ServerRequest('http://localhost/typo3/');
79  $request = $request->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
80  $request = $request->withQueryParams(['route' => 'web_layout']);
81  $view = new ‪StandaloneView();
82  $view->setRequest($request);
83  $view->setTemplateSource('<f:uri.page addQueryString="1" pageUid="42">foo</f:uri.page>');
84  $result = $view->render();
85  self::assertSame('/typo3/module/web/layout?token=dummyToken&amp;id=42', $result);
86  }
87 
88  #[Test]
90  {
91  $request = new ‪ServerRequest('http://localhost/typo3/');
92  $request = $request->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
93  $view = new ‪StandaloneView();
94  $view->setRequest($request);
95  $view->setTemplateSource('<f:uri.page additionalParams="{\'route\': \'web_layout\'}" pageUid="42">foo</f:uri.page>');
96  $result = $view->render();
97  self::assertSame('/typo3/module/web/layout?token=dummyToken&amp;id=42', $result);
98  }
99 
100  #[Test]
102  {
103  $request = new ‪ServerRequest('http://localhost/typo3/');
104  $request = $request->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
105  $request = $request->withAttribute('route', new ‪Route('dummy', ['_identifier' => 'web_layout']));
106  $view = new ‪StandaloneView();
107  $view->setRequest($request);
108  $view->setTemplateSource('<f:uri.page pageUid="42">foo</f:uri.page>');
109  $result = $view->render();
110  self::assertSame('/typo3/module/web/layout?token=dummyToken&amp;id=42', $result);
111  }
112 
113  #[Test]
114  public function ‪renderInBackendCoreContextAddsSection(): void
115  {
116  $request = new ‪ServerRequest('http://localhost/typo3/');
117  $request = $request->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
118  $request = $request->withAttribute('route', new ‪Route('dummy', ['_identifier' => 'web_layout']));
119  $view = new ‪StandaloneView();
120  $view->setRequest($request);
121  $view->setTemplateSource('<f:uri.page pageUid="42" section="mySection">foo</f:uri.page>');
122  $result = $view->render();
123  self::assertSame('/typo3/module/web/layout?token=dummyToken&amp;id=42#mySection', $result);
124  }
125 
126  #[Test]
128  {
129  $request = new ‪ServerRequest('http://localhost/typo3/', null, 'php://input', [], ['HTTP_HOST' => 'localhost', 'SCRIPT_NAME' => '/index.php']);
130  $request = $request->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
131  $request = $request->withAttribute('route', new ‪Route('dummy', ['_identifier' => 'web_layout']));
132  ‪$GLOBALS['TYPO3_REQUEST'] = $request;
133  $view = new ‪StandaloneView();
134  $view->setRequest($request);
135  $view->setTemplateSource('<f:uri.page pageUid="42" absolute="1">foo</f:uri.page>');
136  $result = $view->render();
137  self::assertSame('http://localhost/typo3/module/web/layout?token=dummyToken&amp;id=42', $result);
138  }
139 
140  #[Test]
142  {
143  $request = new ‪ServerRequest('http://localhost/typo3/');
144  $request = $request->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
145  $request = $request->withAttribute('route', new ‪Route('module/web/layout', ['_identifier' => 'web_layout']));
146  $request = $request->withAttribute('extbase', new ‪ExtbaseRequestParameters());
147  $request = $request->withQueryParams(['id' => 42]);
148  $request = new ‪Request($request);
149  $view = new ‪StandaloneView();
150  $view->setRequest($request);
151  $view->setTemplateSource('<f:uri.page>foo</f:uri.page>');
152  $result = $view->render();
153  self::assertSame('/typo3/module/web/layout?token=dummyToken&amp;id=42', $result);
154  }
155 
156  #[Test]
158  {
159  $request = new ‪ServerRequest('http://localhost/typo3/', null, 'php://input', [], ['HTTP_HOST' => 'localhost', 'SCRIPT_NAME' => 'typo3/index.php']);
160  $request = $request->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_BE);
161  $request = $request->withAttribute('route', new ‪Route('module/web/layout', ['_identifier' => 'web_layout']));
162  $request = $request->withAttribute('extbase', new ‪ExtbaseRequestParameters());
163  $request = $request->withQueryParams(['id' => 42]);
164  $request = new ‪Request($request);
165  $view = new ‪StandaloneView();
166  $view->setRequest($request);
167  $view->setTemplateSource('<f:uri.page absolute="1">foo</f:uri.page>');
168  $result = $view->render();
169  self::assertSame('http://localhost/typo3/module/web/layout?token=dummyToken&amp;id=42', $result);
170  }
171 
172  public static function ‪renderDataProvider(): array
173  {
174  return [
175  'renderProvidesATagForValidLinkTarget' => [
176  '<f:uri.page>index.php</f:uri.page>',
177  '/',
178  ],
179  'renderWillProvideEmptyATagForNonValidLinkTarget' => [
180  '<f:uri.page></f:uri.page>',
181  '/',
182  ],
183  'link to root page' => [
184  '<f:uri.page pageUid="1" />',
185  '/',
186  ],
187  'link to root page with section' => [
188  '<f:uri.page pageUid="1" section="c13" />',
189  '/#c13',
190  ],
191  'link to root page with page type' => [
192  '<f:uri.page pageUid="1" pageType="1234" />',
193  '/?type=1234',
194  ],
195  'link to root page with untrusted query arguments' => [
196  '<f:uri.page pageUid="1" addQueryString="untrusted" />',
197  '/?untrusted=123',
198  ],
199  'link to page sub page' => [
200  '<f:uri.page pageUid="3" />',
201  '/dummy-1-2/dummy-1-2-3',
202  ],
203  'additional parameters one level' => [
204  '<f:uri.page pageUid="3" additionalParams="{tx_examples_haiku: \'foo\'}">haiku title</f:uri.page>',
205  '/dummy-1-2/dummy-1-2-3?tx_examples_haiku=foo&amp;cHash=3ed8716f46e97ba37335fa4b28ce2d8a',
206  ],
207  'additional parameters two levels' => [
208  '<f:uri.page pageUid="3" additionalParams="{tx_examples_haiku: {action: \'show\', haiku: 42}}">haiku title</f:uri.page>',
209  '/dummy-1-2/dummy-1-2-3?tx_examples_haiku%5Baction%5D=show&amp;tx_examples_haiku%5Bhaiku%5D=42&amp;cHash=1e0eb1e54d6bacf0138a50107c6ae29a',
210  ],
211  ];
212  }
213 
214  #[DataProvider('renderDataProvider')]
215  #[Test]
216  public function ‪renderInFrontendWithCoreContext(string $template, string $expected): void
217  {
218  $this->importCSVDataSet(__DIR__ . '/../../Fixtures/pages.csv');
220  'test',
221  $this->‪buildSiteConfiguration(1, '/'),
222  );
223  $request = new ‪ServerRequest();
224  $request = $request->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_FE);
225  $request = $request->withAttribute('routing', new ‪PageArguments(1, '0', ['untrusted' => 123]));
226  $pageInformation = new ‪PageInformation();
227  $pageInformation->setId(1);
228  $request = $request->withAttribute('frontend.page.information', $pageInformation);
229  ‪$GLOBALS['TYPO3_REQUEST'] = $request;
230  $view = new ‪StandaloneView();
231  $view->setRequest($request);
232  $view->setTemplateSource($template);
233  $result = $view->render();
234  self::assertSame($expected, $result);
235  }
236 
237  #[DataProvider('renderDataProvider')]
238  #[Test]
239  public function ‪renderInFrontendWithExtbaseContext(string $template, string $expected): void
240  {
241  $this->importCSVDataSet(__DIR__ . '/../../Fixtures/pages.csv');
243  'test',
244  $this->‪buildSiteConfiguration(1, '/'),
245  );
246  $request = new ‪ServerRequest();
247  $request = $request->withAttribute('applicationType', ‪SystemEnvironmentBuilder::REQUESTTYPE_FE);
248  $request = $request->withAttribute('routing', new ‪PageArguments(1, '0', ['untrusted' => 123]));
249  $request = $request->withAttribute('extbase', new ‪ExtbaseRequestParameters());
250  $request = $request->withAttribute('currentContentObject', $this->get(ContentObjectRenderer::class));
251  $pageInformation = new ‪PageInformation();
252  $pageInformation->setId(1);
253  $request = $request->withAttribute('frontend.page.information', $pageInformation);
254  $request = new ‪Request($request);
255  ‪$GLOBALS['TYPO3_REQUEST'] = $request;
256  $view = new ‪StandaloneView();
257  $view->setRequest($request);
258  $view->setTemplateSource($template);
259  $result = $view->render();
260  self::assertSame($expected, $result);
261  }
262 }
‪TYPO3\CMS\Core\Routing\PageArguments
Definition: PageArguments.php:26
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\renderInBackendCoreContextCreatesUriWithRouteFromAdditionalParams
‪renderInBackendCoreContextCreatesUriWithRouteFromAdditionalParams()
Definition: PageViewHelperTest.php:88
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\renderInBackendCoreContextCreatesUriWithRouteFromRequest
‪renderInBackendCoreContextCreatesUriWithRouteFromRequest()
Definition: PageViewHelperTest.php:100
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder
Definition: SystemEnvironmentBuilder.php:41
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait
Definition: SiteBasedTestTrait.php:37
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\renderInBackendCoreContextCreatesUriWithRouteFromQueryString
‪renderInBackendCoreContextCreatesUriWithRouteFromQueryString()
Definition: PageViewHelperTest.php:75
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\renderInBackendCoreContextCreatesAbsoluteUri
‪renderInBackendCoreContextCreatesAbsoluteUri()
Definition: PageViewHelperTest.php:126
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\writeSiteConfiguration
‪writeSiteConfiguration(string $identifier, array $site=[], array $languages=[], array $errorHandling=[])
Definition: SiteBasedTestTrait.php:50
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\renderInBackendCoreContextAddsSection
‪renderInBackendCoreContextAddsSection()
Definition: PageViewHelperTest.php:113
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder\REQUESTTYPE_BE
‪const REQUESTTYPE_BE
Definition: SystemEnvironmentBuilder.php:45
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildSiteConfiguration
‪buildSiteConfiguration(int $rootPageId, string $base='')
Definition: SiteBasedTestTrait.php:88
‪TYPO3\CMS\Backend\Routing\Route
Definition: Route.php:24
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\renderInBackendExtbaseContextCreatesUriWithId
‪renderInBackendExtbaseContextCreatesUriWithId()
Definition: PageViewHelperTest.php:140
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\LANGUAGE_PRESETS
‪const LANGUAGE_PRESETS
Definition: PageViewHelperTest.php:37
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest
Definition: PageViewHelperTest.php:35
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\renderDataProvider
‪static renderDataProvider()
Definition: PageViewHelperTest.php:171
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\renderInBackendExtbaseContextCreatesAbsoluteUriWithId
‪renderInBackendExtbaseContextCreatesAbsoluteUriWithId()
Definition: PageViewHelperTest.php:156
‪TYPO3\CMS\Core\Http\ServerRequest
Definition: ServerRequest.php:39
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\renderInFrontendWithExtbaseContext
‪renderInFrontendWithExtbaseContext(string $template, string $expected)
Definition: PageViewHelperTest.php:238
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri
Definition: ActionViewHelperTest.php:18
‪TYPO3\CMS\Fluid\View\StandaloneView
Definition: StandaloneView.php:30
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Frontend\ContentObject\ContentObjectRenderer
Definition: ContentObjectRenderer.php:102
‪TYPO3\CMS\Extbase\Mvc\ExtbaseRequestParameters
Definition: ExtbaseRequestParameters.php:35
‪TYPO3\CMS\Core\Core\SystemEnvironmentBuilder\REQUESTTYPE_FE
‪const REQUESTTYPE_FE
Definition: SystemEnvironmentBuilder.php:43
‪TYPO3\CMS\Extbase\Mvc\Request
Definition: Request.php:35
‪TYPO3\CMS\Frontend\Page\PageInformation
Definition: PageInformation.php:28
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\renderThrowsExceptionWithoutRequest
‪renderThrowsExceptionWithoutRequest()
Definition: PageViewHelperTest.php:52
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\renderInBackendCoreContextCreatesNoUriWithoutRoute
‪renderInBackendCoreContextCreatesNoUriWithoutRoute()
Definition: PageViewHelperTest.php:63
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\renderInFrontendWithCoreContext
‪renderInFrontendWithCoreContext(string $template, string $expected)
Definition: PageViewHelperTest.php:215
‪TYPO3\CMS\Fluid\Tests\Functional\ViewHelpers\Uri\PageViewHelperTest\$configurationToUseInTestInstance
‪array $configurationToUseInTestInstance
Definition: PageViewHelperTest.php:41