‪TYPO3CMS  11.5
AbstractEnhancerSiteRequestTest.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 
26 use TYPO3\TestingFramework\Core\Functional\Framework\DataHandling\Scenario\DataHandlerFactory;
27 use TYPO3\TestingFramework\Core\Functional\Framework\DataHandling\Scenario\DataHandlerWriter;
28 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest;
29 
34 {
35  protected function ‪setUp(): void
36  {
37  parent::setUp();
38 
40  'acme-com',
41  $this->‪buildSiteConfiguration(1000, 'https://acme.com/'),
42  [
43  $this->‪buildDefaultLanguageConfiguration('EN', 'https://acme.us/'),
44  $this->‪buildLanguageConfiguration('FR', 'https://acme.fr/', ['EN']),
45  $this->‪buildLanguageConfiguration('FR-CA', 'https://acme.ca/', ['FR', 'EN']),
46  ]
47  );
48 
50  'archive-acme-com',
51  $this->‪buildSiteConfiguration(3000, 'https://archive.acme.com/'),
52  [
53  $this->‪buildDefaultLanguageConfiguration('EN', '/'),
54  $this->‪buildLanguageConfiguration('FR', 'https://archive.acme.com/fr/', ['EN']),
55  $this->‪buildLanguageConfiguration('FR-CA', 'https://archive.acme.com/ca/', ['FR', 'EN']),
56  ]
57  );
58 
59  $this->withDatabaseSnapshot(function () {
60  $this->‪setUpDatabase();
61  });
62  }
63 
64  protected function ‪setUpDatabase(): void
65  {
66  $backendUser = $this->setUpBackendUserFromFixture(1);
68 
69  $scenarioFile = __DIR__ . '/../Fixtures/SlugScenario.yaml';
70  $factory = DataHandlerFactory::fromYamlFile($scenarioFile);
71  $writer = DataHandlerWriter::withBackendUser($backendUser);
72  $writer->invokeFactory($factory);
73  static::failIfArrayIsNotEmpty(
74  $writer->getErrors()
75  );
76 
77  $this->setUpFrontendRootPage(
78  1000,
79  [
80  'typo3/sysext/frontend/Tests/Functional/SiteHandling/Fixtures/LinkRequest.typoscript',
81  ],
82  [
83  'title' => 'ACME Root',
84  ]
85  );
86 
87  $this->setUpFrontendRootPage(
88  3000,
89  [
90  'typo3/sysext/frontend/Tests/Functional/SiteHandling/Fixtures/LinkRequest.typoscript',
91  ],
92  [
93  'title' => 'ACME Archive',
94  ]
95  );
96  }
97 
103  protected function ‪pageTypeDecoratorIsApplied(‪TestSet $testSet): void
104  {
105  $builder = ‪Builder::create();
106  $enhancerConfiguration = $builder->compileEnhancerConfiguration($testSet);
107  $pageTypeConfiguration = $builder->compilePageTypeConfiguration($testSet);
108  $targetUri = $builder->compileUrl($testSet);
110  $languageContext = $testSet->‪getSingleApplicable(LanguageContext::class);
111  $expectedLanguageId = $languageContext->getLanguageId();
112  $expectation = $builder->compileResolveArguments($testSet);
113 
114  $overrides = [
115  'routeEnhancers' => [
116  'PageType' => $pageTypeConfiguration,
117  ],
118  ];
119  if ($enhancerConfiguration) {
120  $overrides['routeEnhancers']['Enhancer'] = $enhancerConfiguration;
121  }
122  $this->‪mergeSiteConfiguration('acme-com', $overrides);
123  $this->‪mergeSiteConfiguration('archive-acme-com', $overrides);
124 
125  $allParameters = array_replace_recursive(
126  $expectation['dynamicArguments'],
127  $expectation['staticArguments']
128  );
129  $expectation['pageId'] = $testSet->‪getTargetPageId();
130  $expectation['languageId'] = $expectedLanguageId;
131  $expectation['requestQueryParams'] = $allParameters;
132  $expectation['_GET'] = $allParameters;
133 
134  $response = $this->executeFrontendSubRequest(
135  new InternalRequest($targetUri),
136  null,
137  true
138  );
139 
140  $pageArguments = json_decode((string)$response->getBody(), true);
141  self::assertEquals($expectation, $pageArguments);
142  }
143 
147  protected function ‪assertPageArgumentsEquals(‪TestSet $testSet): void
148  {
149  $builder = ‪Builder::create();
150  $enhancerConfiguration = $builder->compileEnhancerConfiguration($testSet);
151  $targetUri = $builder->compileUrl($testSet);
153  $languageContext = $testSet->‪getSingleApplicable(LanguageContext::class);
154  $expectedLanguageId = $languageContext->getLanguageId();
155  $expectation = $builder->compileResolveArguments($testSet);
156 
157  $this->‪mergeSiteConfiguration('acme-com', [
158  'routeEnhancers' => ['Enhancer' => $enhancerConfiguration],
159  ]);
160  $this->‪mergeSiteConfiguration('archive-acme-com', [
161  'routeEnhancers' => ['Enhancer' => $enhancerConfiguration],
162  ]);
163 
164  $allParameters = array_replace_recursive(
165  $expectation['dynamicArguments'],
166  $expectation['staticArguments']
167  );
168  $expectation['pageId'] = $testSet->‪getTargetPageId();
169  $expectation['pageType'] = '0';
170  $expectation['languageId'] = $expectedLanguageId;
171  $expectation['requestQueryParams'] = $allParameters;
172  $expectation['_GET'] = $allParameters;
173 
174  $response = $this->executeFrontendSubRequest(
175  new InternalRequest($targetUri),
176  null,
177  true
178  );
179 
181  $exceptionDeclaration = $testSet->‪getSingleApplicable(ExceptionExpectation::class);
182  if ($exceptionDeclaration !== null) {
183  // @todo This part is "ugly"...
184  self::assertSame(404, $response->getStatusCode());
185  self::assertStringContainsString(
186  // searching in HTML content...
187  htmlspecialchars($exceptionDeclaration->getMessage()),
188  (string)$response->getBody()
189  );
190  } else {
191  $pageArguments = json_decode((string)$response->getBody(), true);
192  self::assertSame(200, $response->getStatusCode());
193  self::assertEquals($expectation, $pageArguments);
194  }
195  }
196 }
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest
Definition: AbstractEnhancerSiteRequestTest.php:18
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildLanguageConfiguration
‪array buildLanguageConfiguration(string $identifier, string $base, array $fallbackIdentifiers=[], string $fallbackType=null)
Definition: SiteBasedTestTrait.php:144
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\AbstractEnhancerSiteRequestTest\setUpDatabase
‪setUpDatabase()
Definition: AbstractEnhancerSiteRequestTest.php:64
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\writeSiteConfiguration
‪writeSiteConfiguration(string $identifier, array $site=[], array $languages=[], array $errorHandling=[])
Definition: SiteBasedTestTrait.php:58
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\AbstractTestCase
Definition: AbstractTestCase.php:29
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\TestSet
Definition: TestSet.php:21
‪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\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildDefaultLanguageConfiguration
‪array buildDefaultLanguageConfiguration(string $identifier, string $base)
Definition: SiteBasedTestTrait.php:126
‪TYPO3\CMS\Core\Core\Bootstrap\initializeLanguageObject
‪static initializeLanguageObject()
Definition: Bootstrap.php:598
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\AbstractEnhancerSiteRequestTest
Definition: AbstractEnhancerSiteRequestTest.php:34
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\AbstractEnhancerSiteRequestTest\assertPageArgumentsEquals
‪assertPageArgumentsEquals(TestSet $testSet)
Definition: AbstractEnhancerSiteRequestTest.php:147
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\TestSet\getTargetPageId
‪int null getTargetPageId()
Definition: TestSet.php:61
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\ExceptionExpectation
Definition: ExceptionExpectation.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\TestSet\getSingleApplicable
‪getSingleApplicable(string $type)
Definition: TestSet.php:78
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\AbstractEnhancerSiteRequestTest\setUp
‪setUp()
Definition: AbstractEnhancerSiteRequestTest.php:35
‪TYPO3\CMS\Core\Core\Bootstrap
Definition: Bootstrap.php:70
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\AbstractEnhancerSiteRequestTest\pageTypeDecoratorIsApplied
‪pageTypeDecoratorIsApplied(TestSet $testSet)
Definition: AbstractEnhancerSiteRequestTest.php:103
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildSiteConfiguration
‪array buildSiteConfiguration(int $rootPageId, string $base='')
Definition: SiteBasedTestTrait.php:111
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\LanguageContext
Definition: LanguageContext.php:21
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\mergeSiteConfiguration
‪mergeSiteConfiguration(string $identifier, array $overrides)
Definition: SiteBasedTestTrait.php:89