2 declare(strict_types = 1);
26 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\InternalRequest;
27 use TYPO3\TestingFramework\Core\Functional\Framework\Frontend\ResponseContent;
51 protected $testExtensionsToLoad = [
'typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example'];
80 'typo3/sysext/core/Tests/Functional/Fixtures/Frontend/AdditionalConfiguration.php' =>
'typo3conf/AdditionalConfiguration.php',
81 'typo3/sysext/frontend/Tests/Functional/Fixtures/Images' =>
'fileadmin/user_upload'
88 'EN' => [
'id' => 0,
'title' =>
'English',
'locale' =>
'en_US.UTF8'],
89 'DK' => [
'id' => 1,
'title' =>
'Dansk',
'locale' =>
'dk_DA.UTF8'],
90 'DE' => [
'id' => 2,
'title' =>
'Deutsch',
'locale' =>
'de_DE.UTF8'],
91 'PL' => [
'id' => 3,
'title' =>
'Polski',
'locale' =>
'pl_PL.UTF8'],
94 protected function setUp(): void
100 $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
101 $this->contentRepository = $this->objectManager->get(TtContentRepository::class);
102 $this->setUpFrontendRootPage(1, [
103 'typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example/Configuration/TypoScript/setup.typoscript',
104 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/Frontend/ContentJsonRenderer.typoscript'
110 unset($this->objectManager, $this->contentRepository);
133 $response = $this->executeFrontendRequest(
134 new InternalRequest(
'https://website.local/en/?id=' . static::VALUE_PageId)
136 $responseStructure = ResponseContent::fromString((
string)$response->getBody());
137 $responseSections = $responseStructure->getSection(
'Extbase:list()');
138 $visibleHeaders = [
'Regular Element #1',
'Regular Element #2',
'Regular Element #3'];
142 ->setTable(self::TABLE_Content)
144 ->setValues(...$visibleHeaders)
149 ->setTable(self::TABLE_Content)
155 $visibleFiles = [
'T3BOARD'];
157 ->setRecordIdentifier(self::TABLE_Content .
':297')->setRecordField(
'image')
158 ->setTable(
'sys_file_reference')->setField(
'title')->setValues(...$visibleFiles));
161 ->setRecordIdentifier(self::TABLE_Content .
':297')->setRecordField(
'image')
164 $visibleFiles = [
'Kasper2'];
166 ->setRecordIdentifier(self::TABLE_Content .
':298')->setRecordField(
'image')
167 ->setTable(
'sys_file_reference')->setField(
'title')->setValues(...$visibleFiles));
170 ->setRecordIdentifier(self::TABLE_Content .
':298')->setRecordField(
'image')
174 $visibleCategories = [
'Category 1',
'Category 3 - not translated'];
176 ->setRecordIdentifier(self::TABLE_Content .
':297')->setRecordField(
'categories')
177 ->setTable(
'sys_category')->setField(
'title')->setValues(...$visibleCategories));
180 ->setRecordIdentifier(self::TABLE_Content .
':297')->setRecordField(
'categories')
196 'fallbackType' =>
'free',
197 'visibleRecords' => [
199 'header' =>
'[Translate to Dansk:] Regular Element #3',
200 'image' => [
'[Kasper] Image translated to Dansk',
'[T3BOARD] Image added in Dansk (without parent)'],
203 'header' =>
'[Translate to Dansk:] Regular Element #1',
205 'categories' => [
'[Translate to Dansk:] Category 1',
'Category 4'],
208 'header' =>
'[DK] Without default language',
209 'image' => [
'[T3BOARD] Image added to DK element without default language']
212 'header' =>
'[DK] UnHidden Element #4',
218 'fallbackType' =>
'fallback',
219 'visibleRecords' => [
221 'header' =>
'[Translate to Dansk:] Regular Element #1',
223 'categories' => [
'[Translate to Dansk:] Category 1',
'Category 4'],
226 'header' =>
'Regular Element #2',
227 'image' => [
'Kasper2'],
230 'header' =>
'[Translate to Dansk:] Regular Element #3',
231 'image' => [
'[Kasper] Image translated to Dansk',
'[T3BOARD] Image added in Dansk (without parent)'],
236 'fallbackType' =>
'strict',
237 'visibleRecords' => [
239 'header' =>
'[Translate to Dansk:] Regular Element #1',
241 'categories' => [
'[Translate to Dansk:] Category 1',
'Category 4'],
244 'header' =>
'[Translate to Dansk:] Regular Element #3',
245 'image' => [
'[Kasper] Image translated to Dansk',
'[T3BOARD] Image added in Dansk (without parent)'],
273 $response = $this->executeFrontendRequest(
274 new InternalRequest(
'https://website.local/dk/?id=' . static::VALUE_PageId)
276 $responseStructure = ResponseContent::fromString((
string)$response->getBody());
277 $responseSections = $responseStructure->getSection(
'Extbase:list()');
278 $visibleHeaders = array_map(
function ($element) {
279 return $element[
'header'];
285 ->setTable(self::TABLE_Content)
287 ->setValues(...$visibleHeaders)
292 ->setTable(self::TABLE_Content)
297 foreach ($visibleRecords as $ttContentUid => $properties) {
298 $visibleFileTitles = $properties[
'image'];
299 if (!empty($visibleFileTitles)) {
301 ->setRecordIdentifier(self::TABLE_Content .
':' . $ttContentUid)->setRecordField(
'image')
302 ->setTable(
'sys_file_reference')->setField(
'title')->setValues(...$visibleFileTitles));
305 ->setRecordIdentifier(self::TABLE_Content .
':' . $ttContentUid)->setRecordField(
'image')
306 ->setTable(
'sys_file_reference')->setField(
'title')->setValues(...$this->
getNonVisibleFileTitles($visibleFileTitles)));
308 $visibleCategoryTitles = $properties[
'categories'] ?? [];
309 if (!empty($visibleCategoryTitles)) {
311 ->setRecordIdentifier(self::TABLE_Content .
':' . $ttContentUid)->setRecordField(
'categories')
312 ->setTable(
'sys_category')->setField(
'title')->setValues(...$visibleCategoryTitles));
315 ->setRecordIdentifier(self::TABLE_Content .
':' . $ttContentUid)->setRecordField(
'categories')
324 'fallbackType' =>
'free',
325 'fallbackChain' => [
'EN'],
326 'visibleRecords' => [
328 'header' =>
'Regular Element #1',
329 'image' => [
'T3BOARD'],
332 'header' =>
'Regular Element #2',
333 'image' => [
'Kasper2'],
336 'header' =>
'Regular Element #3',
337 'image' => [
'Kasper'],
342 'fallbackType' =>
'free',
343 'fallbackChain' => [
'DK',
'EN'],
344 'visibleRecords' => [
346 'header' =>
'[Translate to Dansk:] Regular Element #3',
347 'image' => [
'[Kasper] Image translated to Dansk',
'[T3BOARD] Image added in Dansk (without parent)'],
350 'header' =>
'[Translate to Dansk:] Regular Element #1',
354 'header' =>
'[DK] Without default language',
355 'image' => [
'[T3BOARD] Image added to DK element without default language'],
358 'header' =>
'[DK] UnHidden Element #4',
364 'fallbackType' =>
'free',
365 'fallbackChain' => [],
366 'visibleRecords' => [],
371 'fallbackType' =>
'fallback',
372 'fallbackChain' => [
'EN'],
373 'visibleRecords' => [
375 'header' =>
'Regular Element #1',
376 'image' => [
'T3BOARD'],
379 'header' =>
'Regular Element #2',
380 'image' => [
'Kasper2'],
383 'header' =>
'Regular Element #3',
384 'image' => [
'Kasper'],
391 'fallbackType' =>
'fallback',
392 'fallbackChain' => [
'DK',
'EN'],
393 'visibleRecords' => [
395 'header' =>
'[Translate to Dansk:] Regular Element #1',
399 'header' =>
'Regular Element #2',
400 'image' => [
'Kasper2'],
403 'header' =>
'[Translate to Dansk:] Regular Element #3',
404 'image' => [
'[Kasper] Image translated to Dansk',
'[T3BOARD] Image added in Dansk (without parent)'],
409 'fallbackType' =>
'fallback',
410 'fallbackChain' => [],
411 'visibleRecords' => [],
415 'fallbackType' =>
'fallback',
416 'fallbackChain' => [
'DK',
'EN'],
417 'visibleRecords' => [
419 'header' =>
'[Translate to Dansk:] Regular Element #1',
423 'header' =>
'Regular Element #2',
424 'image' => [
'Kasper2'],
427 'header' =>
'[Translate to Dansk:] Regular Element #3',
428 'image' => [
'[Kasper] Image translated to Dansk',
'[T3BOARD] Image added in Dansk (without parent)'],
433 'fallbackType' =>
'strict',
434 'fallbackChain' => [
'EN'],
435 'visibleRecords' => [
437 'header' =>
'Regular Element #1',
438 'image' => [
'T3BOARD'],
441 'header' =>
'Regular Element #2',
442 'image' => [
'Kasper2'],
445 'header' =>
'Regular Element #3',
446 'image' => [
'Kasper'],
451 'fallbackType' =>
'strict',
452 'fallbackChain' => [
'DK',
'EN'],
453 'visibleRecords' => [
455 'header' =>
'[Translate to Dansk:] Regular Element #1',
459 'header' =>
'[Translate to Dansk:] Regular Element #3',
460 'image' => [
'[Kasper] Image translated to Dansk',
'[T3BOARD] Image added in Dansk (without parent)'],
465 'fallbackType' =>
'strict',
466 'fallbackChain' => [],
467 'visibleRecords' => [],
499 if ($statusCode === 404) {
500 $this->expectExceptionCode(1518472189);
501 $this->expectException(PageNotFoundException::class);
504 $response = $this->executeFrontendRequest(
505 new InternalRequest(
'https://website.local/de/?id=' . static::VALUE_PageId)
508 if ($statusCode === 200) {
509 $visibleHeaders = array_column($visibleRecords,
'header');
510 $responseStructure = ResponseContent::fromString((
string)$response->getBody());
511 $responseSections = $responseStructure->getSection(
'Extbase:list()');
515 ->setTable(self::TABLE_Content)
517 ->setValues(...$visibleHeaders)
522 ->setTable(self::TABLE_Content)
527 foreach ($visibleRecords as $ttContentUid => $properties) {
528 $visibleFileTitles = $properties[
'image'];
529 if (!empty($visibleFileTitles)) {
531 ->setRecordIdentifier(self::TABLE_Content .
':' . $ttContentUid)->setRecordField(
'image')
532 ->setTable(
'sys_file_reference')->setField(
'title')->setValues(...$visibleFileTitles));
535 ->setRecordIdentifier(self::TABLE_Content .
':' . $ttContentUid)->setRecordField(
'image')
536 ->setTable(
'sys_file_reference')->setField(
'title')->setValues(...$this->
getNonVisibleFileTitles($visibleFileTitles)));
539 $this->assertEquals($statusCode, $response->getStatusCode());
549 'fallbackType' =>
'free',
550 'fallbackChain' => [],
551 'visibleRecordHeaders' => [
'[Translate to Polski:] Regular Element #1',
'[PL] Without default language'],
554 'fallbackType' =>
'free',
555 'fallbackChain' => [
'EN'],
556 'visibleRecordHeaders' => [
'[Translate to Polski:] Regular Element #1',
'[PL] Without default language'],
559 'fallbackType' =>
'free',
560 'fallbackChain' => [
'DK',
'EN'],
561 'visibleRecordHeaders' => [
'[Translate to Polski:] Regular Element #1',
'[PL] Without default language'],
564 'fallbackType' =>
'fallback',
565 'fallbackChain' => [
'EN'],
566 'visibleRecordHeaders' => [
'[Translate to Polski:] Regular Element #1',
'Regular Element #2',
'Regular Element #3'],
571 'fallbackType' =>
'fallback',
572 'fallbackChain' => [
'EN'],
573 'visibleRecordHeaders' => [
'[Translate to Polski:] Regular Element #1',
'Regular Element #2',
'Regular Element #3'],
579 'fallbackType' =>
'fallback',
580 'fallbackChain' => [
'DK',
'EN'],
581 'visibleRecordHeaders' => [
'[Translate to Polski:] Regular Element #1',
'Regular Element #2',
'Regular Element #3'],
586 'fallbackType' =>
'strict',
587 'fallbackChain' => [],
588 'visibleRecordHeaders' => [
'[Translate to Polski:] Regular Element #1'],
591 'fallbackType' =>
'strict',
592 'fallbackChain' => [
'EN'],
593 'visibleRecordHeaders' => [
'[Translate to Polski:] Regular Element #1'],
596 'fallbackType' =>
'strict',
597 'fallbackChain' => [
'DK',
'EN'],
598 'visibleRecordHeaders' => [
'[Translate to Polski:] Regular Element #1'],
627 $response = $this->executeFrontendRequest(
628 new InternalRequest(
'https://website.local/pl/?id=' . static::VALUE_PageId)
630 $responseStructure = ResponseContent::fromString((
string)$response->getBody());
631 $responseSections = $responseStructure->getSections(
'Extbase:list()');
633 $this->assertEquals(200, $response->getStatusCode());
638 ->setTable(self::TABLE_Content)
640 ->setValues(...$visibleHeaders)
645 ->setTable(self::TABLE_Content)
660 'Regular Element #1',
661 'Regular Element #2',
662 'Regular Element #3',
664 '[Translate to Dansk:] Regular Element #1',
665 '[Translate to Dansk:] Regular Element #3',
666 '[DK] Without default language',
667 '[DK] UnHidden Element #4',
668 '[DE] Without default language',
669 '[Translate to Deutsch:] [Translate to Dansk:] Regular Element #1',
670 '[Translate to Polski:] Regular Element #1',
671 '[PL] Without default language',
672 '[PL] Hidden Regular Element #2'
674 return array_diff($allElements, $visibleHeaders);
688 '[Kasper] Image translated to Dansk',
689 '[T3BOARD] Image added in Dansk (without parent)',
690 '[T3BOARD] Image added to DK element without default language',
691 '[T3BOARD] image translated to DE from DK',
694 return array_diff($allElements, $visibleTitles);
707 '[Translate to Dansk:] Category 1',
708 'Category 3 - not translated',
711 return array_diff($allElements, $visibleTitles);