‪TYPO3CMS  ‪main
AbstractEnhancerLinkGeneratorTestCase.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 
25 use TYPO3\TestingFramework\Core\Functional\Framework\DataHandling\Scenario\DataHandlerFactory;
26 use TYPO3\TestingFramework\Core\Functional\Framework\DataHandling\Scenario\DataHandlerWriter;
27 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest;
28 
30 {
31  protected function ‪setUp(): void
32  {
33  parent::setUp();
34 
36  'acme-com',
37  $this->‪buildSiteConfiguration(1000, 'https://acme.com/'),
38  [
39  $this->‪buildDefaultLanguageConfiguration('EN', 'https://acme.us/'),
40  $this->‪buildLanguageConfiguration('FR', 'https://acme.fr/', ['EN']),
41  $this->‪buildLanguageConfiguration('FR-CA', 'https://acme.ca/', ['FR', 'EN']),
42  ]
43  );
44 
46  'archive-acme-com',
47  $this->‪buildSiteConfiguration(3000, 'https://archive.acme.com/'),
48  [
49  $this->‪buildDefaultLanguageConfiguration('EN', '/'),
50  $this->‪buildLanguageConfiguration('FR', 'https://archive.acme.com/fr/', ['EN']),
51  $this->‪buildLanguageConfiguration('FR-CA', 'https://archive.acme.com/ca/', ['FR', 'EN']),
52  ]
53  );
54 
55  $this->withDatabaseSnapshot(function () {
56  $this->importCSVDataSet(__DIR__ . '/../../Fixtures/be_users.csv');
57  $backendUser = $this->setUpBackendUser(1);
58  ‪$GLOBALS['LANG'] = $this->get(LanguageServiceFactory::class)->createFromUserPreferences($backendUser);
59  $scenarioFile = __DIR__ . '/../Fixtures/SlugScenario.yaml';
60  $factory = DataHandlerFactory::fromYamlFile($scenarioFile);
61  $writer = DataHandlerWriter::withBackendUser($backendUser);
62  $writer->invokeFactory($factory);
63  static::failIfArrayIsNotEmpty($writer->getErrors());
64  $this->setUpFrontendRootPage(1000, ['EXT:frontend/Tests/Functional/SiteHandling/Fixtures/LinkGenerator.typoscript'], ['title' => 'ACME Root']);
65  });
66  }
67 
71  protected function ‪pageTypeDecoratorIsApplied(‪TestSet $testSet): void
72  {
73  $builder = ‪Builder::create();
74  $enhancerConfiguration = $builder->compileEnhancerConfiguration($testSet);
75  $pageTypeConfiguration = $builder->compilePageTypeConfiguration($testSet);
76  $additionalParameters = $builder->compileGenerateParameters($testSet);
78  $languageContext = $testSet->‪getSingleApplicable(LanguageContext::class);
79  $targetLanguageId = $languageContext->getLanguageId();
80  $expectation = $builder->compileUrl($testSet);
81 
82  $this->‪mergeSiteConfiguration('acme-com', [
83  'routeEnhancers' => [
84  'Enhancer' => $enhancerConfiguration,
85  'PageType' => $pageTypeConfiguration,
86  ],
87  ]);
88 
89  $this->‪mergeSiteConfiguration('archive-acme-com', [
90  'routeEnhancers' => [
91  'Enhancer' => $enhancerConfiguration,
92  'PageType' => $pageTypeConfiguration,
93  ],
94  ]);
95 
96  $response = $this->executeFrontendSubRequest(
97  (new InternalRequest('https://acme.us/'))
98  ->withPageId(1100)
99  ->withInstructions([
100  $this->createTypoLinkUrlInstruction([
101  'parameter' => $testSet->‪getTargetPageId(),
102  'language' => $targetLanguageId,
103  'additionalParams' => $additionalParameters,
104  'forceAbsoluteUrl' => 1,
105  ]),
106  ])
107  );
108 
109  self::assertStringStartsWith($expectation, (string)$response->getBody());
110  }
111 
118  protected function ‪assertGeneratedUriEquals(‪TestSet $testSet, bool $strict = true): void
119  {
120  $builder = ‪Builder::create();
121  $enhancerConfiguration = $builder->compileEnhancerConfiguration($testSet);
122  $additionalParameters = $builder->compileGenerateParameters($testSet);
124  $languageContext = $testSet->‪getSingleApplicable(LanguageContext::class);
125  $targetLanguageId = $languageContext->getLanguageId();
126  $expectation = $builder->compileUrl($testSet);
127 
128  $this->‪mergeSiteConfiguration('acme-com', [
129  'routeEnhancers' => ['Enhancer' => $enhancerConfiguration],
130  ]);
131  $this->‪mergeSiteConfiguration('archive-acme-com', [
132  'routeEnhancers' => ['Enhancer' => $enhancerConfiguration],
133  ]);
134 
135  $response = $this->executeFrontendSubRequest(
136  (new InternalRequest('https://acme.us/'))
137  ->withPageId(1100)
138  ->withInstructions([
139  $this->createTypoLinkUrlInstruction([
140  'parameter' => $testSet->‪getTargetPageId(),
141  'language' => $targetLanguageId,
142  'additionalParams' => $additionalParameters,
143  'forceAbsoluteUrl' => 1,
144  ]),
145  ])
146  );
147 
148  $actual = (string)$response->getBody();
149  if ($strict) {
150  self::assertSame($expectation, $actual);
151  } else {
152  self::assertStringStartsWith($expectation, $actual);
153  }
154  }
155 }
‪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\EnhancerLinkGenerator\AbstractEnhancerLinkGeneratorTestCase\assertGeneratedUriEquals
‪assertGeneratedUriEquals(TestSet $testSet, bool $strict=true)
Definition: AbstractEnhancerLinkGeneratorTestCase.php:118
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerLinkGenerator\AbstractEnhancerLinkGeneratorTestCase
Definition: AbstractEnhancerLinkGeneratorTestCase.php:30
‪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\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\TestSet\getSingleApplicable
‪getSingleApplicable(string $type)
Definition: TestSet.php:62
‪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\EnhancerLinkGenerator\AbstractEnhancerLinkGeneratorTestCase\setUp
‪setUp()
Definition: AbstractEnhancerLinkGeneratorTestCase.php:31
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\LanguageContext
Definition: LanguageContext.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerLinkGenerator\AbstractEnhancerLinkGeneratorTestCase\pageTypeDecoratorIsApplied
‪pageTypeDecoratorIsApplied(TestSet $testSet)
Definition: AbstractEnhancerLinkGeneratorTestCase.php:71
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\mergeSiteConfiguration
‪mergeSiteConfiguration(string $identifier, array $overrides)
Definition: SiteBasedTestTrait.php:73