2 declare(strict_types = 1);
27 use TYPO3\TestingFramework\Core\Functional\Framework\DataHandling\Scenario\DataHandlerFactory;
28 use TYPO3\TestingFramework\Core\Functional\Framework\DataHandling\Scenario\DataHandlerWriter;
29 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
34 'tableName' =>
'tt_content',
35 'routeFieldName' =>
'header',
40 'generatorOptions' => [
41 'prefixParentPageSlug' =>
false,
43 'fallbackCharacter' =>
'-',
44 'eval' =>
'required,uniqueInSite',
72 parent::setUpBeforeClass();
73 static::initializeDatabaseSnapshot();
78 static::destroyDatabaseSnapshot();
79 parent::tearDownAfterClass();
82 protected function setUp(): void
85 $this->withDatabaseSnapshot(
function () {
90 $tableName = self::ASPECT_CONFIGURATION[
'tableName'];
91 $fieldName = self::ASPECT_CONFIGURATION[
'routeFieldName'];
98 'locale' =>
'es_ES.UTF-8',
99 'fallbackType' =>
'fallback',
101 'title' =>
'Spanish',
106 'locale' =>
'fr_CA.UTF-8',
107 'fallbackType' =>
'fallback',
108 'fallbacks' => [1, 0],
109 'title' =>
'Franco-Canadian',
114 'locale' =>
'fr_FR.UTF-8',
115 'fallbackType' =>
'fallback',
121 'base' =>
'en_US.UTF-8',
122 'locale' =>
'/en-us/',
126 'acme' =>
new Site(
'acme-inc', 1000, [
127 'identifier' =>
'acme-inc',
128 'rootPageId' => 1000,
129 'base' =>
'https://acme.com/',
130 'languages' => $languages,
132 'other' =>
new Site(
'other-inc', 5000, [
133 'identifier' =>
'other-inc',
134 'rootPageId' => 5000,
135 'base' =>
'https://other.com/',
136 'languages' => $languages,
141 $this->subject =
new PersistedAliasMapper(self::ASPECT_CONFIGURATION);
142 $this->subject->setSiteLanguage($this->sites[
'acme']->getLanguageById(0));
143 $this->subject->setSite($this->sites[
'acme']);
148 $backendUser = $this->setUpBackendUserFromFixture(1);
151 $scenarioFile = __DIR__ .
'/Fixtures/AspectScenario.yaml';
152 $factory = DataHandlerFactory::fromYamlFile($scenarioFile);
153 $writer = DataHandlerWriter::withBackendUser($backendUser);
154 $writer->invokeFactory($factory);
155 if (!empty($writer->getErrors())) {
156 self::fail(var_export($writer->getErrors(),
true));
162 unset($this->subject, $this->sites);
169 'non-existing, default language' => [
'this-value-does-not-exist',
'default',
null],
171 '30xx-slug, default language' => [
'30xx-slug',
'default',
'3010'],
172 '30xx-slug, fr-fr language' => [
'30xx-slug',
'fr-fr',
'3010'],
173 '30xx-slug, fr-ca language' => [
'30xx-slug',
'fr-ca',
'3010'],
175 '30xx-slug-fr-ca, fr-ca language' => [
'30xx-slug-fr-ca',
'fr-ca',
'3010'],
177 '30xx-slug-fr-ca, fr-fr language' => [
'30xx-slug-fr-ca',
'fr-fr',
'3030'],
179 '30xx-slug-fr-ca, default language' => [
'30xx-slug-fr-ca',
'default',
'3030'],
181 '30xx-slug-fr, fr-ca language' => [
'30xx-slug-fr',
'fr-ca',
'3010'],
182 '30xx-slug-fr, fr-fr language' => [
'30xx-slug-fr',
'fr-fr',
'3010'],
184 '30xx-slug-fr, default language' => [
'30xx-slug-fr',
'default',
'3020'],
187 '40xx-slug, default language' => [
'40xx-slug',
'default',
'4040'],
188 '40xx-slug, fr-fr language' => [
'40xx-slug',
'fr-fr',
'4040'],
189 '40xx-slug, fr-ca language' => [
'40xx-slug',
'fr-ca',
'4040'],
191 '40xx-slug-fr-ca, fr-ca language' => [
'40xx-slug-fr-ca',
'fr-ca',
'4040'],
193 '40xx-slug-fr-ca, fr-fr language' => [
'40xx-slug-fr-ca',
'fr-fr',
'4030'],
195 '40xx-slug-fr-ca, default language' => [
'40xx-slug-fr-ca',
'default',
'4030'],
197 '40xx-slug-fr, fr-ca language' => [
'40xx-slug-fr',
'fr-ca',
'4040'],
198 '40xx-slug-fr, fr-fr language' => [
'40xx-slug-fr',
'fr-fr',
'4040'],
200 '40xx-slug-fr, default language' => [
'40xx-slug-fr',
'default',
'4020'],
205 foreach ([
'acme',
'other'] as $site) {
206 foreach ($baseDataSet as $key => $arguments) {
207 array_unshift($arguments, $site);
208 $dataSet[$site .
':' . $key] = $arguments;
225 $this->subject->setSiteLanguage(
226 $this->sites[$identifier]->getLanguageById(self::LANGUAGE_MAP[$language])
228 $this->subject->setSite(
229 $this->sites[$identifier]
231 if ($expectation !==
null) {
232 $expectation += self::SITE_ADDITION[$identifier];
233 $expectation = (string)$expectation;
235 self::assertSame($expectation, $this->subject->resolve($requestValue));
242 $visibleContext->setAspect(
246 $frontendGroupsContext =
new Context();
247 $frontendGroupsContext->setAspect(
252 $scheduledContext->setAspect(
258 'hidden-visibility-slug, raw context' => [
260 [
'slug' =>
'hidden-visibility-slug',
'uid' =>
'4051'],
264 'restricted-visibility-slug, raw context' => [
266 [
'slug' =>
'restricted-visibility-slug',
'uid' =>
'4052'],
269 'scheduled-visibility-slug, raw context' => [
271 [
'slug' =>
'scheduled-visibility-slug',
'uid' =>
'4053'],
274 'hidden-visibility-slug, visibility context (include hidden content)' => [
276 [
'slug' =>
'hidden-visibility-slug',
'uid' =>
'4051'],
280 'restricted-visibility-slug, frontend-groups context (13)' => [
281 $frontendGroupsContext,
282 [
'slug' =>
'restricted-visibility-slug',
'uid' =>
'4052'],
285 'scheduled-visibility-slug, scheduled context (timestamp 20000)' => [
287 [
'slug' =>
'scheduled-visibility-slug',
'uid' =>
'4053'],
303 $this->subject->setContext($context);
304 $expectedResult = $expectation ? $parameters[
'uid'] :
null;
305 self::assertSame($expectedResult, $this->subject->resolve($parameters[
'slug']));
318 $this->subject->setContext($context);
319 $expectedResult = $expectation ? $parameters[
'slug'] :
null;
320 self::assertSame($expectedResult, $this->subject->generate($parameters[
'uid']));
327 $path = $this->instancePath .
'/typo3conf/sites';
328 GeneralUtility::rmdir($path .
'/' . $site->
getIdentifier(),
true);
331 self::markTestSkipped($exception->getMessage());