‪TYPO3CMS  ‪main
PageTypeDecoratorTest.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;
30 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest;
31 
33 {
34  public static function ‪pageTypeDecoratorIsAppliedDataProvider(): array
35  {
36  $testSets = [];
37  foreach (‪Builder::create()->declarePageTypes() as $pageTypeDeclaration) {
38  $testSet = ‪TestSet::create()
39  ->withMergedApplicables($pageTypeDeclaration)
40  ->withVariables($pageTypeDeclaration->getVariables());
41 
42  $testSetWithoutEnhancers =
43  ‪TestSet::create($testSet)
44  ->withMergedApplicables(‪LanguageContext::create(0))
45  ->withTargetPageId(3000)
46  ->withUrl(
48  'https://archive.acme.com/[[index]][[pathSuffix]]',
49  ‪Variables::create(['pathSuffix' => '', 'index' => ''])
50  )
51  )
52  ;
53  $testSets = array_merge(
54  $testSets,
55  [$testSetWithoutEnhancers->describe() => [$testSetWithoutEnhancers]],
56  );
57  }
58  return $testSets;
59  }
60 
61  #[DataProvider('pageTypeDecoratorIsAppliedDataProvider')]
62  #[Test]
63  public function ‪pageTypeDecoratorIsApplied(‪TestSet $testSet): void
64  {
65  parent::pageTypeDecoratorIsApplied($testSet);
66  }
67 
69  {
70  $testSets = [];
71  foreach (‪Builder::create()->declarePageTypes() as $pageTypeDeclaration) {
72  $testSet = ‪TestSet::create()
73  ->withMergedApplicables($pageTypeDeclaration)
74  ->withVariables($pageTypeDeclaration->getVariables());
75 
76  $testSetForPageContainingIndexInSlug =
77  ‪TestSet::create($testSet)
78  ->withMergedApplicables(‪LanguageContext::create(0))
79  ->withTargetPageId(3200)
80  ->withUrl(
82  'https://archive.acme.com/stock-index[[pathSuffix]]',
83  ‪Variables::create(['pathSuffix' => ''])
84  )
85  )
86  ;
87  $testSets = array_merge(
88  $testSets,
89  [$testSetForPageContainingIndexInSlug->describe() => [$testSetForPageContainingIndexInSlug]]
90  );
91  }
92  return $testSets;
93  }
94 
95  #[DataProvider('pageTypeDecoratorIndexCanBePartOfSlugDataProvider')]
96  #[Test]
97  public function ‪pageTypeDecoratorIndexCanBePartOfSlug(‪TestSet $testSet): void
98  {
99  $builder = ‪Builder::create();
100  $targetUri = $builder->compileUrl($testSet);
102  $languageContext = $testSet->‪getSingleApplicable(LanguageContext::class);
103  $expectedLanguageId = $languageContext->getLanguageId();
104  $expectation = $builder->compileResolveArguments($testSet);
105 
106  $overrides = [
107  'routeEnhancers' => [
108  'PageType' => $builder->compilePageTypeConfiguration($testSet),
109  ],
110  ];
111  $this->‪mergeSiteConfiguration('archive-acme-com', $overrides);
112 
113  $allParameters = array_replace_recursive(
114  $expectation['dynamicArguments'],
115  $expectation['staticArguments']
116  );
117  $expectation['pageId'] = $testSet->‪getTargetPageId();
118  $expectation['languageId'] = $expectedLanguageId;
119  $expectation['requestQueryParams'] = $allParameters;
120  $expectation['_GET'] = $allParameters;
121 
122  $response = $this->executeFrontendSubRequest(
123  new InternalRequest($targetUri),
124  null,
125  true
126  );
127 
128  $pageArguments = json_decode((string)$response->getBody(), true);
129  self::assertEquals($expectation, $pageArguments);
130  }
131 
132  #[Test]
134  {
135  $this->‪mergeSiteConfiguration('archive-acme-com', [
136  'routeEnhancers' => [
137  'PageType' => [
138  'type' => 'PageType',
139  'default' => '/',
140  'index' => '',
141  'map' => [
142  '/' => 0,
143  'sitemap.xml' => '1533906435',
144  ],
145  ],
146  ],
147  ]);
148 
149  GeneralUtility::makeInstance(SiteConfiguration::class)->resolveAllExistingSites(false);
150  $site = GeneralUtility::makeInstance(SiteFinder::class)->getSiteByIdentifier('archive-acme-com');
151  $uri = $site->getRouter()->generateUri(3000);
152  self::assertEquals('https://archive.acme.com/', (string)$uri);
153  $uri = $site->getRouter()->generateUri(3000, ['type' => '1533906435']);
154  self::assertEquals('https://archive.acme.com/sitemap.xml', (string)$uri);
155  $uri = $site->getRouter()->generateUri(3000, ['type' => '13']);
156  self::assertEquals('https://archive.acme.com/?type=13', (string)$uri);
157  }
158 }
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest
Definition: AbstractEnhancerSiteRequestTestCase.php:18
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\PageTypeDecoratorTest\pageTypeDecoratorIndexCanBePartOfSlugDataProvider
‪static pageTypeDecoratorIndexCanBePartOfSlugDataProvider()
Definition: PageTypeDecoratorTest.php:68
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\PageTypeDecoratorTest\pageTypeDecoratorIsAppliedDataProvider
‪static pageTypeDecoratorIsAppliedDataProvider()
Definition: PageTypeDecoratorTest.php:34
‪TYPO3\CMS\Core\Site\SiteFinder
Definition: SiteFinder.php:31
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\PageTypeDecoratorTest\unmappedPageTypeDecoratorIsAddedAsRegularQueryParam
‪unmappedPageTypeDecoratorIsAddedAsRegularQueryParam()
Definition: PageTypeDecoratorTest.php:133
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Variables
Definition: Variables.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\PageTypeDecoratorTest\pageTypeDecoratorIndexCanBePartOfSlug
‪pageTypeDecoratorIndexCanBePartOfSlug(TestSet $testSet)
Definition: PageTypeDecoratorTest.php:97
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\TestSet
Definition: TestSet.php:21
‪TYPO3\CMS\Core\Configuration\SiteConfiguration
Definition: SiteConfiguration.php:47
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Builder
Definition: Builder.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Builder\create
‪static create()
Definition: Builder.php:22
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue\create
‪static create(string $value, Variables $defaultVariables=null)
Definition: VariableValue.php:37
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Variables\create
‪static create(array $items=[])
Definition: Variables.php:22
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\TestSet\getSingleApplicable
‪getSingleApplicable(string $type)
Definition: TestSet.php:62
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\AbstractEnhancerSiteRequestTestCase
Definition: AbstractEnhancerSiteRequestTestCase.php:31
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\TestSet\getTargetPageId
‪getTargetPageId()
Definition: TestSet.php:46
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\PageTypeDecoratorTest
Definition: PageTypeDecoratorTest.php:33
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\LanguageContext
Definition: LanguageContext.php:21
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:52
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue
Definition: VariableValue.php:21
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\mergeSiteConfiguration
‪mergeSiteConfiguration(string $identifier, array $overrides)
Definition: SiteBasedTestTrait.php:73
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\TestSet\create
‪static create($parentSet=null)
Definition: TestSet.php:33
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\PageTypeDecoratorTest\pageTypeDecoratorIsApplied
‪pageTypeDecoratorIsApplied(TestSet $testSet)
Definition: PageTypeDecoratorTest.php:63
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\LanguageContext\create
‪static create(int $languageId)
Definition: LanguageContext.php:24