‪TYPO3CMS  ‪main
AbstractEnhancerSiteRequestTestCase.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 
31 {
32  protected function ‪setUp(): void
33  {
34  parent::setUp();
35 
37  'acme-com',
38  $this->‪buildSiteConfiguration(1000, 'https://acme.com/'),
39  [
40  $this->‪buildDefaultLanguageConfiguration('EN', 'https://acme.us/'),
41  $this->‪buildLanguageConfiguration('FR', 'https://acme.fr/', ['EN']),
42  $this->‪buildLanguageConfiguration('FR-CA', 'https://acme.ca/', ['FR', 'EN']),
43  ]
44  );
45 
47  'archive-acme-com',
48  $this->‪buildSiteConfiguration(3000, 'https://archive.acme.com/'),
49  [
50  $this->‪buildDefaultLanguageConfiguration('EN', '/'),
51  $this->‪buildLanguageConfiguration('FR', 'https://archive.acme.com/fr/', ['EN']),
52  $this->‪buildLanguageConfiguration('FR-CA', 'https://archive.acme.com/ca/', ['FR', 'EN']),
53  ]
54  );
55 
56  $this->withDatabaseSnapshot(function () {
57  $this->importCSVDataSet(__DIR__ . '/../../Fixtures/be_users.csv');
58  $backendUser = $this->setUpBackendUser(1);
59  ‪$GLOBALS['LANG'] = $this->get(LanguageServiceFactory::class)->createFromUserPreferences($backendUser);
60  $scenarioFile = __DIR__ . '/../Fixtures/SlugScenario.yaml';
61  $factory = DataHandlerFactory::fromYamlFile($scenarioFile);
62  $writer = DataHandlerWriter::withBackendUser($backendUser);
63  $writer->invokeFactory($factory);
64  static::failIfArrayIsNotEmpty($writer->getErrors());
65  $this->setUpFrontendRootPage(1000, ['EXT:frontend/Tests/Functional/SiteHandling/Fixtures/LinkRequest.typoscript'], ['title' => 'ACME Root']);
66  $this->setUpFrontendRootPage(3000, ['EXT:frontend/Tests/Functional/SiteHandling/Fixtures/LinkRequest.typoscript'], ['title' => 'ACME Archive']);
67  });
68  }
69 
73  protected function ‪pageTypeDecoratorIsApplied(‪TestSet $testSet): void
74  {
75  $builder = ‪Builder::create();
76  $enhancerConfiguration = $builder->compileEnhancerConfiguration($testSet);
77  $pageTypeConfiguration = $builder->compilePageTypeConfiguration($testSet);
78  $targetUri = $builder->compileUrl($testSet);
80  $languageContext = $testSet->‪getSingleApplicable(LanguageContext::class);
81  $expectedLanguageId = $languageContext->getLanguageId();
82  $expectation = $builder->compileResolveArguments($testSet);
83 
84  $overrides = [
85  'routeEnhancers' => [
86  'PageType' => $pageTypeConfiguration,
87  ],
88  ];
89  if ($enhancerConfiguration) {
90  $overrides['routeEnhancers']['Enhancer'] = $enhancerConfiguration;
91  }
92  $this->‪mergeSiteConfiguration('acme-com', $overrides);
93  $this->‪mergeSiteConfiguration('archive-acme-com', $overrides);
94 
95  $allParameters = array_replace_recursive(
96  $expectation['dynamicArguments'],
97  $expectation['staticArguments']
98  );
99  $expectation['pageId'] = $testSet->‪getTargetPageId();
100  $expectation['languageId'] = $expectedLanguageId;
101  $expectation['requestQueryParams'] = $allParameters;
102  $expectation['_GET'] = $allParameters;
103 
104  $response = $this->executeFrontendSubRequest(
105  new InternalRequest($targetUri),
106  null,
107  true
108  );
109 
110  $pageArguments = json_decode((string)$response->getBody(), true);
111  self::assertEquals($expectation, $pageArguments);
112  }
113 
114  protected function ‪assertPageArgumentsEquals(‪TestSet $testSet): void
115  {
116  $builder = ‪Builder::create();
117  $enhancerConfiguration = $builder->compileEnhancerConfiguration($testSet);
118  $targetUri = $builder->compileUrl($testSet);
120  $languageContext = $testSet->‪getSingleApplicable(LanguageContext::class);
121  $expectedLanguageId = $languageContext->getLanguageId();
122  $expectation = $builder->compileResolveArguments($testSet);
123 
124  $this->‪mergeSiteConfiguration('acme-com', [
125  'routeEnhancers' => ['Enhancer' => $enhancerConfiguration],
126  ]);
127  $this->‪mergeSiteConfiguration('archive-acme-com', [
128  'routeEnhancers' => ['Enhancer' => $enhancerConfiguration],
129  ]);
130 
131  $allParameters = array_replace_recursive(
132  $expectation['dynamicArguments'],
133  $expectation['staticArguments']
134  );
135  $expectation['pageId'] = $testSet->‪getTargetPageId();
136  $expectation['pageType'] = '0';
137  $expectation['languageId'] = $expectedLanguageId;
138  $expectation['requestQueryParams'] = $allParameters;
139  $expectation['_GET'] = $allParameters;
140 
141  $response = $this->executeFrontendSubRequest(
142  new InternalRequest($targetUri),
143  null,
144  true
145  );
146 
148  $exceptionDeclaration = $testSet->‪getSingleApplicable(ExceptionExpectation::class);
149  if ($exceptionDeclaration !== null) {
150  // @todo This part is "ugly"...
151  self::assertSame(404, $response->getStatusCode());
152  self::assertStringContainsString(
153  // searching in HTML content...
154  htmlspecialchars($exceptionDeclaration->getMessage()),
155  (string)$response->getBody()
156  );
157  } else {
158  $pageArguments = json_decode((string)$response->getBody(), true);
159  self::assertSame(200, $response->getStatusCode());
160  self::assertEquals($expectation, $pageArguments);
161  }
162  }
163 }
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest
Definition: AbstractEnhancerSiteRequestTestCase.php:18
‪TYPO3\CMS\Core\Localization\LanguageServiceFactory
Definition: LanguageServiceFactory.php:25
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildLanguageConfiguration
‪buildLanguageConfiguration(string $identifier, string $base, array $fallbackIdentifiers=[], string $fallbackType=null)
Definition: SiteBasedTestTrait.php:108
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\AbstractEnhancerSiteRequestTestCase\pageTypeDecoratorIsApplied
‪pageTypeDecoratorIsApplied(TestSet $testSet)
Definition: AbstractEnhancerSiteRequestTestCase.php:73
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\AbstractEnhancerSiteRequestTestCase\assertPageArgumentsEquals
‪assertPageArgumentsEquals(TestSet $testSet)
Definition: AbstractEnhancerSiteRequestTestCase.php:114
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\writeSiteConfiguration
‪writeSiteConfiguration(string $identifier, array $site=[], array $languages=[], array $errorHandling=[])
Definition: SiteBasedTestTrait.php:50
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\AbstractEnhancerSiteRequestTestCase\setUp
‪setUp()
Definition: AbstractEnhancerSiteRequestTestCase.php:32
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\AbstractTestCase
Definition: AbstractTestCase.php:29
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildSiteConfiguration
‪buildSiteConfiguration(int $rootPageId, string $base='')
Definition: SiteBasedTestTrait.php:88
‪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\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:62
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequest\AbstractEnhancerSiteRequestTestCase
Definition: AbstractEnhancerSiteRequestTestCase.php:31
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildDefaultLanguageConfiguration
‪buildDefaultLanguageConfiguration(string $identifier, string $base)
Definition: SiteBasedTestTrait.php:98
‪$GLOBALS
‪$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['adminpanel']['modules']
Definition: ext_localconf.php:25
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\TestSet\getTargetPageId
‪getTargetPageId()
Definition: TestSet.php:46
‪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:73