‪TYPO3CMS  9.5
EnhancerSiteRequestTest.php
Go to the documentation of this file.
1 <?php
2 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 
33 use TYPO3\TestingFramework\Core\Functional\Framework\DataHandling\Scenario\DataHandlerFactory;
34 use TYPO3\TestingFramework\Core\Functional\Framework\DataHandling\Scenario\DataHandlerWriter;
35 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest;
36 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequestContext;
37 
42 {
44 
48  private ‪$siteTitle = 'A Company that Manufactures Everything Inc';
49 
54 
55  public static function ‪setUpBeforeClass()
56  {
57  parent::setUpBeforeClass();
58  static::initializeDatabaseSnapshot();
59  }
60 
61  public static function ‪tearDownAfterClass()
62  {
63  static::destroyDatabaseSnapshot();
64  parent::tearDownAfterClass();
65  }
66 
67  protected function ‪setUp()
68  {
69  parent::setUp();
70 
71  // these settings are forwarded to the frontend sub-request as well
72  $this->internalRequestContext = (new InternalRequestContext())
73  ->withGlobalSettings(['TYPO3_CONF_VARS' => static::TYPO3_CONF_VARS]);
74 
76  'acme-com',
77  $this->‪buildSiteConfiguration(1000, 'https://acme.com/'),
78  [
79  $this->‪buildDefaultLanguageConfiguration('EN', 'https://acme.us/'),
80  $this->‪buildLanguageConfiguration('FR', 'https://acme.fr/', ['EN']),
81  $this->‪buildLanguageConfiguration('FR-CA', 'https://acme.ca/', ['FR', 'EN']),
82  ]
83  );
84 
86  'archive-acme-com',
87  $this->‪buildSiteConfiguration(3000, 'https://archive.acme.com/'),
88  [
89  $this->‪buildDefaultLanguageConfiguration('EN', '/'),
90  $this->‪buildLanguageConfiguration('FR', 'https://archive.acme.com/fr/', ['EN']),
91  $this->‪buildLanguageConfiguration('FR-CA', 'https://archive.acme.com/ca/', ['FR', 'EN'])
92  ]
93  );
94 
95  $this->withDatabaseSnapshot(function () {
96  $this->‪setUpDatabase();
97  });
98  }
99 
100  protected function ‪setUpDatabase()
101  {
102  $backendUser = $this->setUpBackendUserFromFixture(1);
104 
105  $scenarioFile = __DIR__ . '/Fixtures/SlugScenario.yaml';
106  $factory = DataHandlerFactory::fromYamlFile($scenarioFile);
107  $writer = DataHandlerWriter::withBackendUser($backendUser);
108  $writer->invokeFactory($factory);
109  static::failIfArrayIsNotEmpty(
110  $writer->getErrors()
111  );
112 
113  $this->setUpFrontendRootPage(
114  1000,
115  [
116  'typo3/sysext/frontend/Tests/Functional/SiteHandling/Fixtures/LinkRequest.typoscript',
117  ],
118  [
119  'title' => 'ACME Root',
120  'sitetitle' => $this->siteTitle,
121  ]
122  );
123 
124  $this->setUpFrontendRootPage(
125  3000,
126  [
127  'typo3/sysext/frontend/Tests/Functional/SiteHandling/Fixtures/LinkRequest.typoscript',
128  ],
129  [
130  'title' => 'ACME Archive',
131  'sitetitle' => $this->siteTitle,
132  ]
133  );
134  }
135 
136  protected function ‪tearDown()
137  {
138  unset($this->internalRequestContext);
139  parent::tearDown();
140  }
141 
146  public function ‪localeModifierDataProvider($parentSet = null): array
147  {
148  $builder = ‪Builder::create();
149  // variables (applied when invoking expectations)
150  $variables = ‪Variables::create()->define([
151  'value' => 100,
152  'resolveValue' => 100,
153  'routePrefix' => '{enhance_name}',
154  'aspectName' => 'enhance_name',
155  'inArguments' => 'dynamicArguments' // either 'dynamicArguments' or 'staticArguments'
156  ]);
157  $enhancers = $builder->declareEnhancers();
158  $variableContexts = [
161  'cHash' => '46227b4ce096dc78a4e71463326c9020',
162  'cHash2' => 'f80d112e877175ce8e7d54c35bebe12c'
163  ])
164  )->withRequiredApplicables($enhancers['Simple']),
167  'cHash' => 'e24d3d2d5503baba670d827c3b9470c8',
168  'cHash2' => '54f45ea94a5e812fbae944792dac940d'
169  ])
170  )->withRequiredApplicables($enhancers['Plugin']),
173  'cHash' => 'eef21771ab3c3dac3514b4479eedd5ff',
174  'cHash2' => 'c822555d4ebd106b0d1687e43a4db9c9'
175  ])
176  )->withRequiredApplicables($enhancers['Extbase']),
177  ];
178  return ‪Permutation::create($variables)
179  ->withTargets(
180  ‪TestSet::create($parentSet)
181  ->withMergedApplicables(‪LanguageContext::create(0))
182  ->withTargetPageId(1100)
183  ->withUrl(
185  'https://acme.us/welcome/enhance/[[value]][[pathSuffix]]?cHash=[[cHash]]',
186  ‪Variables::create(['pathSuffix' => ''])
187  )
188  ),
189  ‪TestSet::create($parentSet)
190  ->withMergedApplicables(‪LanguageContext::create(1))
191  ->withTargetPageId(1100)
192  ->withUrl(
194  'https://acme.fr/bienvenue/augmenter/[[value]][[pathSuffix]]?cHash=[[cHash]]',
195  ‪Variables::create(['pathSuffix' => ''])
196  )
197  ),
198  ‪TestSet::create($parentSet)
199  ->withMergedApplicables(‪LanguageContext::create(0))
200  ->withTargetPageId(3000)
201  ->withUrl(
203  'https://archive.acme.com/enhance/[[value]][[pathSuffix]]?cHash=[[cHash2]]',
204  ‪Variables::create(['pathSuffix' => ''])
205  )
206  ),
207  ‪TestSet::create($parentSet)
208  ->withMergedApplicables(‪LanguageContext::create(1))
209  ->withTargetPageId(3000)
210  ->withUrl(
212  'https://archive.acme.com/fr/augmenter/[[value]][[pathSuffix]]?cHash=[[cHash2]]',
213  ‪Variables::create(['pathSuffix' => ''])
214  )
215  )
216  )
217  ->withApplicableItems($variableContexts)
218  ->withApplicableItems($enhancers)
219  ->withApplicableSet(
220  ‪AspectDeclaration::create('LocaleModifier')->withConfiguration([
221  ‪VariableItem::create('aspectName', [
222  'type' => 'LocaleModifier',
223  'default' => 'enhance',
224  'localeMap' => [
225  [
226  'locale' => 'fr_FR',
227  'value' => 'augmenter'
228  ]
229  ],
230  ])
231  ])
232  )
233  ->permute()
234  ->getTargetsForDataProvider();
235  }
236 
243  public function ‪localeModifierIsApplied(TestSet $testSet): void
244  {
245  $this->‪assertPageArgumentsEquals($testSet);
246  }
247 
252  public function ‪persistedAliasMapperDataProvider($parentSet = null): array
253  {
254  $builder = ‪Builder::create();
255  // variables (applied when invoking expectations)
256  $variables = ‪Variables::create()->define([
257  'value' => 1100,
258  'resolveValue' => 1100,
259  'routePrefix' => 'enhance',
260  'aspectName' => 'value',
261  'inArguments' => 'staticArguments' // either 'dynamicArguments' or 'staticArguments'
262  ]);
263  return ‪Permutation::create($variables)
264  ->withTargets(
265  ‪TestSet::create($parentSet)
266  ->withMergedApplicables(‪LanguageContext::create(0))
267  ->withTargetPageId(1100)
268  ->withUrl(
270  'https://acme.us/welcome/enhance/welcome[[pathSuffix]]',
271  ‪Variables::create(['pathSuffix' => ''])
272  )
273  ),
274  ‪TestSet::create($parentSet)
275  ->withMergedApplicables(‪LanguageContext::create(1))
276  ->withTargetPageId(1100)
277  ->withUrl(
279  'https://acme.fr/bienvenue/enhance/bienvenue[[pathSuffix]]',
280  ‪Variables::create(['pathSuffix' => ''])
281  )
282  )
283  )
284  ->withApplicableItems($builder->declareEnhancers())
285  ->withApplicableSet(
286  ‪AspectDeclaration::create('PersistedAliasMapper')->withConfiguration([
287  ‪VariableItem::create('aspectName', [
288  'type' => 'PersistedAliasMapper',
289  'tableName' => 'pages',
290  'routeFieldName' => 'slug',
291  'routeValuePrefix' => '/',
292  ])
293  ])
294  )
295  ->permute()
296  ->getTargetsForDataProvider();
297  }
298 
305  public function ‪persistedAliasMapperIsApplied(TestSet $testSet): void
306  {
307  $this->‪assertPageArgumentsEquals($testSet);
308  }
309 
314  public function ‪persistedPatternMapperDataProvider($parentSet = null): array
315  {
316  $builder = ‪Builder::create();
317  // variables (applied when invoking expectations)
318  $variables = ‪Variables::create()->define([
319  'value' => 1100,
320  'resolveValue' => 1100,
321  'routePrefix' => 'enhance',
322  'aspectName' => 'value',
323  'inArguments' => 'staticArguments' // either 'dynamicArguments' or 'staticArguments'
324  ]);
325  return ‪Permutation::create($variables)
326  ->withTargets(
327  ‪TestSet::create($parentSet)
328  ->withMergedApplicables(‪LanguageContext::create(0))
329  ->withTargetPageId(1100)
330  ->withUrl(
332  'https://acme.us/welcome/enhance/hello-and-welcome-[[value]][[pathSuffix]]',
333  ‪Variables::create(['pathSuffix' => ''])
334  )
335  ),
336  ‪TestSet::create($parentSet)
337  ->withMergedApplicables(‪LanguageContext::create(1))
338  ->withTargetPageId(1100)
339  ->withUrl(
341  'https://acme.fr/bienvenue/enhance/salut-et-bienvenue-[[value]][[pathSuffix]]',
342  ‪Variables::create(['pathSuffix' => ''])
343  )
344  )
345  )
346  ->withApplicableItems($builder->declareEnhancers())
347  ->withApplicableSet(
348  ‪AspectDeclaration::create('PersistedPatternMapper')->withConfiguration([
349  ‪VariableItem::create('aspectName', [
350  'type' => 'PersistedPatternMapper',
351  'tableName' => 'pages',
352  'routeFieldPattern' => '^(?P<subtitle>.+)-(?P<uid>\d+)$',
353  'routeFieldResult' => '{subtitle}-{uid}',
354  ])
355  ])
356  )
357  ->permute()
358  ->getTargetsForDataProvider();
359  }
360 
367  public function ‪persistedPatternMapperIsApplied(TestSet $testSet): void
368  {
369  $this->‪assertPageArgumentsEquals($testSet);
370  }
371 
376  public function ‪staticValueMapperDataProvider($parentSet = null): array
377  {
378  $builder = ‪Builder::create();
379  // variables (applied when invoking expectations)
380  $variables = ‪Variables::create()->define([
381  'value' => 100,
382  'resolveValue' => 100,
383  'routePrefix' => 'enhance',
384  'aspectName' => 'value',
385  'inArguments' => 'staticArguments' // either 'dynamicArguments' or 'staticArguments'
386  ]);
387  return ‪Permutation::create($variables)
388  ->withTargets(
389  ‪TestSet::create($parentSet)
390  ->withMergedApplicables(‪LanguageContext::create(0))
391  ->withTargetPageId(1100)
392  ->withUrl(
394  'https://acme.us/welcome/enhance/hundred[[pathSuffix]]',
395  ‪Variables::create(['pathSuffix' => ''])
396  )
397  ),
398  ‪TestSet::create($parentSet)
399  ->withMergedApplicables(‪LanguageContext::create(1))
400  ->withTargetPageId(1100)
401  ->withUrl(
403  'https://acme.fr/bienvenue/enhance/cent[[pathSuffix]]',
404  ‪Variables::create(['pathSuffix' => ''])
405  )
406  )
407  )
408  ->withApplicableItems($builder->declareEnhancers())
409  ->withApplicableSet(
410  ‪AspectDeclaration::create('StaticValueMapper')->withConfiguration([
411  ‪VariableItem::create('aspectName', [
412  'type' => 'StaticValueMapper',
413  'map' => [
414  'hundred' => 100,
415  ],
416  'localeMap' => [
417  [
418  'locale' => 'fr_FR',
419  'map' => [
420  'cent' => 100,
421  ],
422  ]
423  ],
424  ])
425  ])
426  )
427  ->permute()
428  ->getTargetsForDataProvider();
429  }
430 
437  public function ‪staticValueMapperIsApplied(TestSet $testSet): void
438  {
439  $this->‪assertPageArgumentsEquals($testSet);
440  }
441 
446  public function ‪staticRangeMapperDataProvider($parentSet = null): array
447  {
448  $variableContexts = array_map(
449  function ($value) {
452  'value' => $value,
453  'resolveValue' => $value,
454  ])
455  );
456  },
457  range(10, 100, 30)
458  );
459 
460  $builder = ‪Builder::create();
461  // variables (applied when invoking expectations)
462  $variables = ‪Variables::create()->define([
463  'routePrefix' => 'enhance',
464  'aspectName' => 'value',
465  'inArguments' => 'staticArguments' // either 'dynamicArguments' or 'staticArguments'
466  ]);
467  return ‪Permutation::create($variables)
468  ->withTargets(
469  ‪TestSet::create($parentSet)
470  ->withMergedApplicables(‪LanguageContext::create(0))
471  ->withTargetPageId(1100)
472  ->withUrl(
474  'https://acme.us/welcome/enhance/[[value]][[pathSuffix]]',
475  ‪Variables::create(['pathSuffix' => ''])
476  )
477  ),
478  ‪TestSet::create($parentSet)
479  ->withMergedApplicables(‪LanguageContext::create(1))
480  ->withTargetPageId(1100)
481  ->withUrl(
483  'https://acme.fr/bienvenue/enhance/[[value]][[pathSuffix]]',
484  ‪Variables::create(['pathSuffix' => ''])
485  )
486  )
487  )
488  ->withApplicableItems($variableContexts)
489  ->withApplicableItems($builder->declareEnhancers())
490  ->withApplicableSet(
491  ‪AspectDeclaration::create('StaticRangeMapper')->withConfiguration([
492  ‪VariableItem::create('aspectName', [
493  'type' => 'StaticRangeMapper',
494  'start' => '1',
495  'end' => '100',
496  ])
497  ])
498  )
499  ->permute()
500  ->getTargetsForDataProvider();
501  }
502 
509  public function ‪staticRangeMapperIsApplied(TestSet $testSet): void
510  {
511  $this->‪assertPageArgumentsEquals($testSet);
512  }
513 
517  public function ‪pageTypeDecoratorIsAppliedDataProvider(): array
518  {
519  $testSets = [];
520  foreach (‪Builder::create()->declarePageTypes() as $pageTypeDeclaration) {
521  $testSet = ‪TestSet::create()
522  ->withMergedApplicables($pageTypeDeclaration)
523  ->withVariables($pageTypeDeclaration->getVariables());
524 
525  $testSetWithoutEnhancers =
526  ‪TestSet::create($testSet)
527  ->withMergedApplicables(‪LanguageContext::create(0))
528  ->withTargetPageId(3000)
529  ->withUrl(
531  'https://archive.acme.com/[[index]][[pathSuffix]]',
532  ‪Variables::create(['pathSuffix' => '', 'index' => ''])
533  )
534  )
535  ;
536  $testSets = array_merge(
537  $testSets,
538  [$testSetWithoutEnhancers->describe() => [$testSetWithoutEnhancers]],
539  $this->localeModifierDataProvider($testSet),
540  $this->persistedAliasMapperDataProvider($testSet),
541  $this->persistedPatternMapperDataProvider($testSet),
542  $this->staticValueMapperDataProvider($testSet),
543  $this->staticRangeMapperDataProvider($testSet)
544  );
545  }
546  return $testSets;
547  }
548 
555  public function ‪pageTypeDecoratorIsApplied(TestSet $testSet): void
556  {
557  $builder = ‪Builder::create();
558  $enhancerConfiguration = $builder->compileEnhancerConfiguration($testSet);
559  $pageTypeConfiguration = $builder->compilePageTypeConfiguration($testSet);
560  $targetUri = $builder->compileUrl($testSet);
562  $languageContext = $testSet->getSingleApplicable(LanguageContext::class);
563  $expectedLanguageId = $languageContext->getLanguageId();
564  $expectation = $builder->compileResolveArguments($testSet);
565 
566  $overrides = [
567  'routeEnhancers' => [
568  'PageType' => $pageTypeConfiguration,
569  ]
570  ];
571  if ($enhancerConfiguration) {
572  $overrides['routeEnhancers']['Enhancer'] = $enhancerConfiguration;
573  }
574  $this->‪mergeSiteConfiguration('acme-com', $overrides);
575  $this->‪mergeSiteConfiguration('archive-acme-com', $overrides);
576 
577  $allParameters = array_replace_recursive(
578  $expectation['dynamicArguments'],
579  $expectation['staticArguments']
580  );
581  $expectation['pageId'] = $testSet->getTargetPageId();
582  $expectation['languageId'] = $expectedLanguageId;
583  $expectation['requestQueryParams'] = $allParameters;
584  $expectation['_GET'] = $allParameters;
585 
586  $response = $this->executeFrontendRequest(
587  new InternalRequest($targetUri),
588  $this->internalRequestContext,
589  true
590  );
591 
592  $pageArguments = json_decode((string)$response->getBody(), true);
593  static::assertEquals($expectation, $pageArguments);
594  }
595 
596  public function ‪routeDefaultsAreConsideredDataProvider($parentSet = null): array
597  {
598  $builder = ‪Builder::create();
599  // variables (applied when invoking expectations)
600  $variables = ‪Variables::create()->define([
601  'uriValue' => '',
602  'resolveValue' => 100,
603  'routePrefix' => 'enhance',
604  'aspectName' => 'value',
605  'inArguments' => 'staticArguments', // either 'dynamicArguments' or 'staticArguments'
606  'otherInArguments' => null,
607  ]);
608  $enhancerDeclarations = $builder->declareEnhancers();
609  $englishLanguage = ‪LanguageContext::create(0);
610  $frenchLanguage = ‪LanguageContext::create(1);
611  $plainRouteParameter = ‪VariablesContext::create(‪Variables::create(['routeParameter' => '{value}']));
612  $enforcedRouteParameter = ‪VariablesContext::create(‪Variables::create(['routeParameter' => '{!value}']));
613  return ‪Permutation::create($variables)
614  ->withTargets(
615  ‪TestSet::create($parentSet)
616  ->withMergedApplicables($englishLanguage)
617  ->withTargetPageId(1100)
618  ->withUrl(
620  'https://acme.us/welcome/enhance[[uriValue]][[pathSuffix]]',
621  ‪Variables::create(['pathSuffix' => '', 'uriValue' => '/hundred'])
622  )
623  ),
624  ‪TestSet::create($parentSet)
625  ->withMergedApplicables($frenchLanguage)
626  ->withTargetPageId(1100)
627  ->withUrl(
629  'https://acme.fr/bienvenue/enhance[[uriValue]][[pathSuffix]]',
630  ‪Variables::create(['pathSuffix' => '', 'uriValue' => '/cent'])
631  )
632  )
633  )
634  ->withApplicableItems($builder->declareEnhancers())
635  ->withApplicableSet(
636  ‪EnhancerDeclaration::create('defaults.value=100')->withConfiguration([
637  'defaults' => [
638  'value' => 100,
639  // it's expected that `other` is NOT applied in page arguments
640  // since it is not used as `{other}` in `routePath`
641  'other' => 200,
642  ]
643  ])
644  )
645  ->withApplicableSet(
646  ‪AspectDeclaration::create('StaticValueMapper')->withConfiguration([
647  ‪VariableItem::create('aspectName', [
648  'type' => 'StaticValueMapper',
649  'map' => [
650  'hundred' => 100,
651  ],
652  'localeMap' => [
653  [
654  'locale' => 'fr_FR',
655  'map' => [
656  'cent' => 100,
657  ],
658  ]
659  ],
660  ])
661  ])
662  )
663  ->withApplicableSet($plainRouteParameter, $enforcedRouteParameter)
664  ->withApplicableSet(
665  // @todo Default route not resolved having enforced route parameter `{!value}`
667  'uriValue' => null,
668  ]))->withRequiredApplicables($plainRouteParameter),
670  'uriValue' => '/hundred',
671  ]))->withRequiredApplicables($englishLanguage),
673  'uriValue' => '/cent',
674  ]))->withRequiredApplicables($frenchLanguage)
675  )
676  ->permute()
677  ->getTargetsForDataProvider();
678  }
679 
686  public function ‪routeDefaultsAreConsidered(TestSet $testSet): void
687  {
689  }
690 
691  public function ‪routeRequirementsHavingAspectsAreConsideredDataProvider($parentSet = null): array
692  {
693  $builder = ‪Builder::create();
694  // variables (applied when invoking expectations)
695  $variables = ‪Variables::create()->define([
696  'routePrefix' => 'enhance',
697  'aspectName' => 'value',
698  'inArguments' => 'staticArguments' // either 'dynamicArguments' or 'staticArguments'
699  ]);
700  return ‪Permutation::create($variables)
701  ->withTargets(
702  ‪TestSet::create($parentSet)
703  ->withMergedApplicables(‪LanguageContext::create(0))
704  ->withTargetPageId(1100)
705  ->withUrl(
707  'https://acme.us/welcome/enhance/[[value]][[pathSuffix]]',
708  ‪Variables::create(['pathSuffix' => ''])
709  )
710  )
711  )
712  ->withApplicableSet(
714  'value' => 'hundred',
715  'resolveValue' => 100,
716  ])),
718  'value' => 'hundred/binary',
719  'resolveValue' => 1100100,
720  ])),
723  'value' => 'hundred',
724  'resolveValue' => 100,
725  ])),
726  ‪EnhancerDeclaration::create('requirements.value=/[a-z_/]+/')->withConfiguration([
727  'requirements' => [
728  'value' => '[a-z_/]+',
729  ]
730  ])
731  ),
734  'value' => 'hundred/binary',
735  'resolveValue' => 1100100,
736  ])),
737  ‪EnhancerDeclaration::create('requirements.value=/[a-z_/]+/')->withConfiguration([
738  'requirements' => [
739  'value' => '[a-z_/]+',
740  ]
741  ])
742  )
743  )
744  ->withApplicableItems($builder->declareEnhancers())
745  ->withApplicableSet(
746  ‪AspectDeclaration::create('StaticValueMapper')->withConfiguration([
747  ‪VariableItem::create('aspectName', [
748  'type' => 'StaticValueMapper',
749  'map' => [
750  'hundred' => 100,
751  'hundred/binary' => 1100100,
752  ],
753  ])
754  ])
755  )
756  ->permute()
757  ->getTargetsForDataProvider();
758  }
759 
766  public function ‪routeRequirementsHavingAspectsAreConsidered(TestSet $testSet): void
767  {
769  }
770 
771  public function ‪routeRequirementsAreConsideredDataProvider($parentSet = null): array
772  {
773  $builder = ‪Builder::create();
774  // variables (applied when invoking expectations)
775  $variables = ‪Variables::create()->define([
776  'resolveValue' => 100,
777  'routePrefix' => 'enhance',
778  'aspectName' => 'value',
779  'inArguments' => 'dynamicArguments' // either 'dynamicArguments' or 'staticArguments'
780  ]);
781  $enhancers = $builder->declareEnhancers();
782  $variableContexts = [
785  'cHash' => '46227b4ce096dc78a4e71463326c9020',
786  ])
787  )->withRequiredApplicables($enhancers['Simple']),
790  'cHash' => 'e24d3d2d5503baba670d827c3b9470c8',
791  ])
792  )->withRequiredApplicables($enhancers['Plugin']),
795  'cHash' => 'eef21771ab3c3dac3514b4479eedd5ff',
796  ])
797  )->withRequiredApplicables($enhancers['Extbase']),
798  ];
799  return ‪Permutation::create($variables)
800  ->withTargets(
801  ‪TestSet::create($parentSet)
802  ->withMergedApplicables(‪LanguageContext::create(0))
803  ->withTargetPageId(1100)
804  ->withUrl(
806  'https://acme.us/welcome/enhance/[[uriValue]][[pathSuffix]]?cHash=[[cHash]]',
807  ‪Variables::create(['pathSuffix' => ''])
808  )
809  )
810  )
811  ->withApplicableItems($enhancers)
812  ->withApplicableItems($variableContexts)
813  ->withApplicableSet(
815  'uriValue' => 100,
816  ])),
819  'uriValue' => 100,
820  'cHash' => ''
821  ])),
822  ‪ExceptionExpectation::create('Missing cHash')
823  ->withClassName(PageNotFoundException::class)
824  ->withMessage('Request parameters could not be validated (&cHash empty)')
825  ->withCode(1518472189)
826  ),
829  'uriValue' => 99,
830  ])),
832  ->withClassName(PageNotFoundException::class)
833  ->withMessage('The requested page does not exist')
834  ->withCode(1518472189)
835  ),
838  'uriValue' => 99999,
839  ])),
841  ->withClassName(PageNotFoundException::class)
842  ->withMessage('The requested page does not exist')
843  ->withCode(1518472189)
844  ),
847  'uriValue' => 'NaN',
848  ])),
850  ->withClassName(PageNotFoundException::class)
851  ->withMessage('The requested page does not exist')
852  ->withCode(1518472189)
853  )
854  )
855  ->withApplicableSet(
856  ‪EnhancerDeclaration::create('requirements.value=\\d{3}')->withConfiguration([
857  'requirements' => [
858  'value' => '\\d{3}',
859  ]
860  ])
861  )
862  ->permute()
863  ->getTargetsForDataProvider();
864  }
865 
872  public function ‪routeRequirementsAreConsidered(TestSet $testSet): void
873  {
874  $this->‪assertPageArgumentsEquals($testSet);
875  }
876 
881  {
882  $testSets = [];
883  foreach (‪Builder::create()->declarePageTypes() as $pageTypeDeclaration) {
884  $testSet = ‪TestSet::create()
885  ->withMergedApplicables($pageTypeDeclaration)
886  ->withVariables($pageTypeDeclaration->getVariables());
887 
888  $testSetForPageContainingIndexInSlug =
889  ‪TestSet::create($testSet)
890  ->withMergedApplicables(‪LanguageContext::create(0))
891  ->withTargetPageId(3200)
892  ->withUrl(
894  'https://archive.acme.com/stock-index[[pathSuffix]]',
895  ‪Variables::create(['pathSuffix' => ''])
896  )
897  )
898  ;
899  $testSets = array_merge(
900  $testSets,
901  [$testSetForPageContainingIndexInSlug->describe() => [$testSetForPageContainingIndexInSlug]]
902  );
903  }
904  return $testSets;
905  }
906 
913  public function ‪pageTypeDecoratorIndexCanBePartOfSlug(TestSet $testSet): void
914  {
915  $builder = ‪Builder::create();
916  $targetUri = $builder->compileUrl($testSet);
918  $languageContext = $testSet->getSingleApplicable(LanguageContext::class);
919  $expectedLanguageId = $languageContext->getLanguageId();
920  $expectation = $builder->compileResolveArguments($testSet);
921 
922  $overrides = [
923  'routeEnhancers' => [
924  'PageType' => $builder->compilePageTypeConfiguration($testSet),
925  ]
926  ];
927  $this->‪mergeSiteConfiguration('archive-acme-com', $overrides);
928 
929  $allParameters = array_replace_recursive(
930  $expectation['dynamicArguments'],
931  $expectation['staticArguments']
932  );
933  $expectation['pageId'] = $testSet->getTargetPageId();
934  $expectation['languageId'] = $expectedLanguageId;
935  $expectation['requestQueryParams'] = $allParameters;
936  $expectation['_GET'] = $allParameters;
937 
938  $response = $this->executeFrontendRequest(
939  new InternalRequest($targetUri),
940  $this->internalRequestContext,
941  true
942  );
943 
944  $pageArguments = json_decode((string)$response->getBody(), true);
945  self::assertEquals($expectation, $pageArguments);
946  }
947 
948  public function ‪routeIdentifiersAreResolvedDataProvider(): array
949  {
950  return [
951  // namespace[value]
952  'namespace[value] ? test' => [
953  'namespace',
954  'value',
955  'test',
956  ],
957  'namespace[value] ? x^30' => [
958  'namespace',
959  'value',
960  str_repeat('x', 30),
961  ],
962  'namespace[value] ? x^31' => [
963  'namespace',
964  'value',
965  str_repeat('x', 31),
966  ],
967  'namespace[value] ? x^32' => [
968  'namespace',
969  'value',
970  str_repeat('x', 32),
971  ],
972  'namespace[value] ? x^33' => [
973  'namespace',
974  'value',
975  str_repeat('x', 33),
976  ],
977  'namespace[value] ? 1^31 (type-cast)' => [
978  'namespace',
979  'value',
980  str_repeat('1', 31),
981  ],
982  // md5('namespace__@otne3') is 60360798585102000952995164024754 (numeric)
983  // md5('ximaz') is 61529519452809720693702583126814 (numeric)
984  'namespace[@otne3] ? numeric-md5 (type-cast)' => [
985  'namespace',
986  '@otne3',
987  md5('ximaz'),
988  ],
989  'namespace[value] ? namespace__value' => [
990  'namespace',
991  'value',
992  'namespace__value',
993  ],
994  'namespace[value] ? namespace/value' => [
995  'namespace',
996  'value',
997  'namespace/value',
998  'The requested URL is not distinct',
999  ],
1000  'namespace[value] ? namespace__other' => [
1001  'namespace',
1002  'value',
1003  'namespace__other',
1004  ],
1005  'namespace[value] ? namespace/other' => [
1006  'namespace',
1007  'value',
1008  'namespace/other',
1009  ],
1010  // namespace[any/value]
1011  'namespace[any/value] ? x^30' => [
1012  'namespace',
1013  'any/value',
1014  str_repeat('x', 30),
1015  ],
1016  'namespace[any/value] ? x^31' => [
1017  'namespace',
1018  'any/value',
1019  str_repeat('x', 31),
1020  ],
1021  'namespace[any/value] ? x^32' => [
1022  'namespace',
1023  'any/value',
1024  str_repeat('x', 32),
1025  ],
1026  'namespace[any/value] ? namespace__any__value' => [
1027  'namespace',
1028  'any/value',
1029  'namespace__any__value',
1030  ],
1031  'namespace[any/value] ? namespace/any/value' => [
1032  'namespace',
1033  'any/value',
1034  'namespace/any/value',
1035  'The requested URL is not distinct',
1036  ],
1037  'namespace[any/value] ? namespace__any__other' => [
1038  'namespace',
1039  'any/value',
1040  'namespace__any__other',
1041  ],
1042  'namespace[any/value] ? namespace/any/other' => [
1043  'namespace',
1044  'any/value',
1045  'namespace/any/other',
1046  ],
1047  // namespace[@any/value]
1048  'namespace[@any/value] ? x^30' => [
1049  'namespace',
1050  '@any/value',
1051  str_repeat('x', 30),
1052  ],
1053  'namespace[@any/value] ? x^31' => [
1054  'namespace',
1055  '@any/value',
1056  str_repeat('x', 31),
1057  ],
1058  'namespace[@any/value] ? x^32' => [
1059  'namespace',
1060  '@any/value',
1061  str_repeat('x', 32),
1062  ],
1063  'namespace[@any/value] ? md5(namespace__@any__value)' => [
1064  'namespace',
1065  '@any/value',
1066  md5('namespace__@any__value'),
1067  ],
1068  'namespace[@any/value] ? namespace/@any/value' => [
1069  'namespace',
1070  '@any/value',
1071  'namespace/@any/value',
1072  'The requested URL is not distinct',
1073  ],
1074  'namespace[@any/value] ? md5(namespace__@any__other)' => [
1075  'namespace',
1076  '@any/value',
1077  md5('namespace__@any__other'),
1078  ],
1079  'namespace[@any/value] ? namespace/@any/other' => [
1080  'namespace',
1081  '@any/value',
1082  'namespace/@any/other',
1083  ],
1084  ];
1085  }
1086 
1096  public function ‪routeIdentifiersAreResolved(string $namespace, string $argumentName, string $queryPath, string $failureReason = null)
1097  {
1098  $query = [];
1099  $routeValue = 'route-value';
1100  $queryValue = 'parameter-value';
1101  $query = ‪ArrayUtility::setValueByPath($query, $queryPath, $queryValue);
1102  $queryParameters = http_build_query($query, '', '&', PHP_QUERY_RFC3986);
1103  $targetUri = sprintf('https://acme.us/welcome/%s?%s', $routeValue, $queryParameters);
1104 
1105  $this->‪mergeSiteConfiguration('acme-com', [
1106  'routeEnhancers' => ['Enhancer' => [
1107  'type' => 'Plugin',
1108  'routePath' => '/{name}',
1109  '_arguments' => [
1110  'name' => $argumentName,
1111  ],
1112  'namespace' => $namespace,
1113  ]]
1114  ]);
1115 
1116  if ($failureReason !== null) {
1117  $this->expectException(PageNotFoundException::class);
1118  $this->expectExceptionCode(1518472189);
1119  $this->expectExceptionMessage($failureReason);
1120  }
1121 
1122  $response = $this->executeFrontendRequest(
1123  new InternalRequest($targetUri),
1124  $this->internalRequestContext,
1125  true
1126  );
1127 
1128  $body = (string)$response->getBody();
1129  $pageArguments = json_decode($body, true);
1130  self::assertNotNull($pageArguments, 'PageArguments could not be resolved');
1131 
1132  $expected = [];
1133  $expected = ‪ArrayUtility::setValueByPath($expected, $namespace . '/' . $argumentName, $routeValue);
1134  $expected = ‪ArrayUtility::setValueByPath($expected, $queryPath, $queryValue);
1135  self::assertEquals($expected, $pageArguments['requestQueryParams']);
1136  }
1137 
1141  protected function ‪assertPageArgumentsEquals(TestSet $testSet)
1142  {
1143  $this->‪applyExceptionDeclaration($testSet);
1144 
1145  $builder = ‪Builder::create();
1146  $enhancerConfiguration = $builder->compileEnhancerConfiguration($testSet);
1147  $targetUri = $builder->compileUrl($testSet);
1149  $languageContext = $testSet->getSingleApplicable(LanguageContext::class);
1150  $expectedLanguageId = $languageContext->getLanguageId();
1151  $expectation = $builder->compileResolveArguments($testSet);
1152 
1153  $this->‪mergeSiteConfiguration('acme-com', [
1154  'routeEnhancers' => ['Enhancer' => $enhancerConfiguration]
1155  ]);
1156  $this->‪mergeSiteConfiguration('archive-acme-com', [
1157  'routeEnhancers' => ['Enhancer' => $enhancerConfiguration]
1158  ]);
1159 
1160  $allParameters = array_replace_recursive(
1161  $expectation['dynamicArguments'],
1162  $expectation['staticArguments']
1163  );
1164  $expectation['pageId'] = $testSet->getTargetPageId();
1165  $expectation['pageType'] = '0';
1166  $expectation['languageId'] = $expectedLanguageId;
1167  $expectation['requestQueryParams'] = $allParameters;
1168  $expectation['_GET'] = $allParameters;
1169 
1170  $response = $this->executeFrontendRequest(
1171  new InternalRequest($targetUri),
1172  $this->internalRequestContext,
1173  true
1174  );
1175 
1176  $pageArguments = json_decode((string)$response->getBody(), true);
1177  static::assertEquals($expectation, $pageArguments);
1178  }
1179 
1180  protected function ‪applyExceptionDeclaration(‪TestSet $testSet): void
1181  {
1183  $exceptionDeclaration = $testSet->‪getSingleApplicable(ExceptionExpectation::class);
1184  if ($exceptionDeclaration === null) {
1185  return;
1186  }
1187 
1188  if ($exceptionDeclaration->getClassName() !== null) {
1189  $this->expectException($exceptionDeclaration->getClassName());
1190  }
1191  if ($exceptionDeclaration->getCode() !== null) {
1192  $this->expectExceptionCode($exceptionDeclaration->getCode());
1193  }
1194  if ($exceptionDeclaration->getMessage() !== null) {
1195  $this->expectExceptionMessage($exceptionDeclaration->getMessage());
1196  }
1197  }
1198 
1204  public function ‪nestedRouteArgumentsAreConsidered(TestSet $testSet): void
1205  {
1206  $this->‪assertPageArgumentsEquals($testSet);
1207  }
1208 }
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\ExceptionExpectation\create
‪static create(string $identifier)
Definition: ExceptionExpectation.php:36
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\pageTypeDecoratorIsApplied
‪pageTypeDecoratorIsApplied(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:552
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\setUpDatabase
‪setUpDatabase()
Definition: EnhancerSiteRequestTest.php:97
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\applyExceptionDeclaration
‪applyExceptionDeclaration(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:1177
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\routeIdentifiersAreResolvedDataProvider
‪routeIdentifiersAreResolvedDataProvider()
Definition: EnhancerSiteRequestTest.php:945
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Permutation
Definition: Permutation.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\$internalRequestContext
‪InternalRequestContext $internalRequestContext
Definition: EnhancerSiteRequestTest.php:50
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableItem\create
‪static create(string $key, $value)
Definition: VariableItem.php:33
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\pageTypeDecoratorIndexCanBePartOfSlugDataProvider
‪array pageTypeDecoratorIndexCanBePartOfSlugDataProvider()
Definition: EnhancerSiteRequestTest.php:877
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildLanguageConfiguration
‪array buildLanguageConfiguration(string $identifier, string $base, array $fallbackIdentifiers=[], string $fallbackType=null)
Definition: SiteBasedTestTrait.php:140
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\TestSetDataProviderTrait
Definition: TestSetDataProviderTrait.php:33
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\staticValueMapperIsApplied
‪staticValueMapperIsApplied(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:434
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\writeSiteConfiguration
‪writeSiteConfiguration(string $identifier, array $site=[], array $languages=[], array $errorHandling=[])
Definition: SiteBasedTestTrait.php:56
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\AspectDeclaration\create
‪static create(string $identifier)
Definition: AspectDeclaration.php:28
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\routeIdentifiersAreResolved
‪routeIdentifiersAreResolved(string $namespace, string $argumentName, string $queryPath, string $failureReason=null)
Definition: EnhancerSiteRequestTest.php:1093
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\AbstractTestCase
Definition: AbstractTestCase.php:29
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\ApplicableConjunction\create
‪static create(Applicable ... $applicables)
Definition: ApplicableConjunction.php:24
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Variables
Definition: Variables.php:19
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariablesContext\create
‪static create(Variables $variables)
Definition: VariablesContext.php:26
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\routeDefaultsAreConsidered
‪routeDefaultsAreConsidered(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:683
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariablesContext
Definition: VariablesContext.php:19
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Permutation\create
‪static create(Variables $variables)
Definition: Permutation.php:38
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\TestSet
Definition: TestSet.php:19
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\persistedPatternMapperIsApplied
‪persistedPatternMapperIsApplied(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:364
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Builder
Definition: Builder.php:19
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest
Definition: EnhancerSiteRequestTest.php:42
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Builder\create
‪static create()
Definition: Builder.php:20
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildDefaultLanguageConfiguration
‪array buildDefaultLanguageConfiguration(string $identifier, string $base)
Definition: SiteBasedTestTrait.php:122
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\tearDown
‪tearDown()
Definition: EnhancerSiteRequestTest.php:133
‪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\EnhancerSiteRequestTest\staticRangeMapperIsApplied
‪staticRangeMapperIsApplied(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:506
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\staticRangeMapperDataProvider
‪array staticRangeMapperDataProvider($parentSet=null)
Definition: EnhancerSiteRequestTest.php:443
‪TYPO3\CMS\Core\Error\Http\PageNotFoundException
Definition: PageNotFoundException.php:21
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\Variables\create
‪static create(array $items=[])
Definition: Variables.php:20
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\EnhancerDeclaration\create
‪static create(string $identifier)
Definition: EnhancerDeclaration.php:36
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\$siteTitle
‪string $siteTitle
Definition: EnhancerSiteRequestTest.php:46
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\routeRequirementsAreConsidered
‪routeRequirementsAreConsidered(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:869
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\pageTypeDecoratorIsAppliedDataProvider
‪array pageTypeDecoratorIsAppliedDataProvider()
Definition: EnhancerSiteRequestTest.php:514
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\TestSet\getTargetPageId
‪int null getTargetPageId()
Definition: TestSet.php:55
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\nestedRouteArgumentsAreConsidered
‪nestedRouteArgumentsAreConsidered(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:1201
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\setUpBeforeClass
‪static setUpBeforeClass()
Definition: EnhancerSiteRequestTest.php:52
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\persistedAliasMapperDataProvider
‪array persistedAliasMapperDataProvider($parentSet=null)
Definition: EnhancerSiteRequestTest.php:249
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\AspectDeclaration
Definition: AspectDeclaration.php:19
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\localeModifierDataProvider
‪array localeModifierDataProvider($parentSet=null)
Definition: EnhancerSiteRequestTest.php:143
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\ExceptionExpectation
Definition: ExceptionExpectation.php:19
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\staticValueMapperDataProvider
‪array staticValueMapperDataProvider($parentSet=null)
Definition: EnhancerSiteRequestTest.php:373
‪TYPO3\CMS\Core\Utility\ArrayUtility\setValueByPath
‪static array setValueByPath(array $array, $path, $value, $delimiter='/')
Definition: ArrayUtility.php:271
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\TestSet\getSingleApplicable
‪getSingleApplicable(string $type)
Definition: TestSet.php:72
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\localeModifierIsApplied
‪localeModifierIsApplied(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:240
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\assertPageArgumentsEquals
‪assertPageArgumentsEquals(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:1138
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling
Definition: AbstractTestCase.php:3
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\routeRequirementsHavingAspectsAreConsideredDataProvider
‪routeRequirementsHavingAspectsAreConsideredDataProvider($parentSet=null)
Definition: EnhancerSiteRequestTest.php:688
‪TYPO3\CMS\Core\Utility\ArrayUtility
Definition: ArrayUtility.php:23
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\persistedAliasMapperIsApplied
‪persistedAliasMapperIsApplied(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:302
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\routeRequirementsHavingAspectsAreConsidered
‪routeRequirementsHavingAspectsAreConsidered(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:763
‪TYPO3\CMS\Core\Core\Bootstrap
Definition: Bootstrap.php:50
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\routeRequirementsAreConsideredDataProvider
‪routeRequirementsAreConsideredDataProvider($parentSet=null)
Definition: EnhancerSiteRequestTest.php:768
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableItem
Definition: VariableItem.php:19
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\persistedPatternMapperDataProvider
‪array persistedPatternMapperDataProvider($parentSet=null)
Definition: EnhancerSiteRequestTest.php:311
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\buildSiteConfiguration
‪array buildSiteConfiguration(int $rootPageId, string $base='')
Definition: SiteBasedTestTrait.php:107
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\LanguageContext
Definition: LanguageContext.php:19
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\ApplicableConjunction
Definition: ApplicableConjunction.php:19
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\VariableValue
Definition: VariableValue.php:19
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\EnhancerDeclaration
Definition: EnhancerDeclaration.php:19
‪TYPO3\CMS\Core\Tests\Functional\SiteHandling\SiteBasedTestTrait\mergeSiteConfiguration
‪mergeSiteConfiguration(string $identifier, array $overrides)
Definition: SiteBasedTestTrait.php:86
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\TestSet\create
‪static create($parentSet=null)
Definition: TestSet.php:36
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\pageTypeDecoratorIndexCanBePartOfSlug
‪pageTypeDecoratorIndexCanBePartOfSlug(TestSet $testSet)
Definition: EnhancerSiteRequestTest.php:910
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\tearDownAfterClass
‪static tearDownAfterClass()
Definition: EnhancerSiteRequestTest.php:58
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\Framework\Builder\LanguageContext\create
‪static create(int $languageId)
Definition: LanguageContext.php:22
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\routeDefaultsAreConsideredDataProvider
‪routeDefaultsAreConsideredDataProvider($parentSet=null)
Definition: EnhancerSiteRequestTest.php:593
‪TYPO3\CMS\Core\Core\Bootstrap\initializeLanguageObject
‪static Bootstrap null initializeLanguageObject()
Definition: Bootstrap.php:986
‪TYPO3\CMS\Frontend\Tests\Functional\SiteHandling\EnhancerSiteRequestTest\setUp
‪setUp()
Definition: EnhancerSiteRequestTest.php:64