2 declare(strict_types = 1);
19 use PHPUnit\Framework\MockObject\MockObject;
27 class TranslationTest extends \TYPO3\TestingFramework\Core\Functional\FunctionalTestCase
32 protected $testExtensionsToLoad = [
'typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example'];
52 protected function setUp()
67 $this->importDataSet(
'PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/pages.xml');
68 $this->importDataSet(ORIGINAL_ROOT .
'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/blogs.xml');
69 $this->importDataSet(ORIGINAL_ROOT .
'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/translated-posts.xml');
70 $this->importDataSet(ORIGINAL_ROOT .
'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/post-tag-mm.xml');
71 $this->importDataSet(ORIGINAL_ROOT .
'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/tags.xml');
75 $this->objectManager = GeneralUtility::makeInstance(\
TYPO3\CMS\
Extbase\Object\ObjectManager::class);
77 'features' => [
'consistentTranslationOverlayHandling' => 1]
79 $configurationManager = $this->objectManager->get(\
TYPO3\CMS\
Extbase\Configuration\ConfigurationManagerInterface::class);
80 $configurationManager->setConfiguration($configuration);
81 $this->postRepository = $this->objectManager->get(\
ExtbaseTeam\BlogExample\Domain\Repository\PostRepository::class);
91 $context = GeneralUtility::makeInstance(Context::class);
95 $environmentServiceMock = $this->createMock(EnvironmentService::class);
96 $environmentServiceMock
97 ->expects($this->atLeast(1))
98 ->method(
'isEnvironmentInFrontendMode')
100 GeneralUtility::setSingletonInstance(EnvironmentService::class, $environmentServiceMock);
103 $frontendControllerMock = $this->createMock(\
TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::class);
104 $frontendControllerMock->sys_page = $pageRepositoryFixture;
105 $GLOBALS[
'TSFE'] = $frontendControllerMock;
115 $query = $this->postRepository->createQuery();
117 $querySettings = $query->getQuerySettings();
118 $querySettings->setStoragePageIds([1]);
119 $querySettings->setRespectSysLanguage(
true);
120 $querySettings->setLanguageUid(0);
122 $this->assertFalse($querySettings->getLanguageOverlayMode());
123 $this->assertNull($querySettings->getLanguageMode());
125 $postCount = $query->execute()->count();
126 $this->assertSame(3, $postCount);
138 $query = $this->postRepository->createQuery();
140 $querySettings = $query->getQuerySettings();
141 $querySettings->setStoragePageIds([1]);
142 $querySettings->setRespectSysLanguage(
true);
143 $querySettings->setLanguageUid(1);
144 $querySettings->setLanguageMode(
'strict');
145 $this->assertFalse($querySettings->getLanguageOverlayMode());
147 $postCount = $query->execute()->count();
148 $this->assertSame(2, $postCount);
158 $query = $this->postRepository->createQuery();
160 $querySettings = $query->getQuerySettings();
161 $querySettings->setStoragePageIds([1]);
162 $querySettings->setRespectSysLanguage(
true);
163 $querySettings->setLanguageUid(1);
165 $this->assertFalse($querySettings->getLanguageOverlayMode());
166 $this->assertNull($querySettings->getLanguageMode());
168 $postCount = $query->execute()->count();
169 $this->assertSame(2, $postCount);
177 $query = $this->postRepository->createQuery();
179 $querySettings = $query->getQuerySettings();
180 $querySettings->setStoragePageIds([1]);
181 $querySettings->setRespectSysLanguage(
true);
182 $querySettings->setLanguageUid(2);
183 $this->assertFalse($querySettings->getLanguageOverlayMode());
184 $this->assertNull($querySettings->getLanguageMode());
186 $postCount = $query->execute()->count();
188 $this->assertSame(1, $postCount);
196 $query = $this->postRepository->createQuery();
198 $querySettings = $query->getQuerySettings();
199 $querySettings->setStoragePageIds([1]);
200 $querySettings->setRespectSysLanguage(
true);
201 $querySettings->setLanguageUid(1);
202 $this->assertFalse($querySettings->getLanguageOverlayMode());
203 $this->assertNull($querySettings->getLanguageMode());
208 $posts = $query->execute()->toArray();
210 $this->assertCount(2, $posts);
211 $this->assertSame(
'A EN:Post2', $posts[0]->getTitle());
212 $this->assertSame(
'B EN:Post1', $posts[1]->getTitle());
222 $query = $this->postRepository->createQuery();
224 $querySettings = $query->getQuerySettings();
225 $querySettings->setStoragePageIds([1]);
226 $querySettings->setRespectSysLanguage(
true);
227 $querySettings->setLanguageUid(2);
228 $this->assertFalse($querySettings->getLanguageOverlayMode());
229 $this->assertNull($querySettings->getLanguageMode());
234 $posts = $query->execute()->toArray();
236 $this->assertCount(1, $posts);
237 $this->assertSame(
'GR:Post1', $posts[0]->getTitle());
247 $query = $this->postRepository->createQuery();
249 $querySettings = $query->getQuerySettings();
250 $querySettings->setStoragePageIds([1]);
251 $querySettings->setRespectSysLanguage(
true);
252 $querySettings->setLanguageUid(2);
253 $querySettings->setLanguageOverlayMode(
'hideNonTranslated');
254 $this->assertNull($querySettings->getLanguageMode());
259 $posts = $query->execute()->toArray();
261 $this->assertCount(1, $posts);
262 $this->assertSame(
'GR:Post1', $posts[0]->getTitle());
270 $query = $this->postRepository->createQuery();
272 $querySettings = $query->getQuerySettings();
273 $querySettings->setStoragePageIds([1]);
274 $querySettings->setRespectSysLanguage(
true);
275 $querySettings->setLanguageUid(1);
276 $this->assertFalse($querySettings->getLanguageOverlayMode());
277 $this->assertNull($querySettings->getLanguageMode());
282 $posts = $query->execute()->toArray();
284 $this->assertCount(2, $posts);
285 $this->assertSame(
'A EN:Post2', $posts[0]->getTitle());
286 $this->assertSame(
'B EN:Post1', $posts[1]->getTitle());
297 $query = $this->postRepository->createQuery();
299 $querySettings = $query->getQuerySettings();
300 $querySettings->setStoragePageIds([1]);
301 $querySettings->setRespectSysLanguage(
true);
302 $querySettings->setLanguageUid(1);
303 $this->assertFalse($querySettings->getLanguageOverlayMode());
304 $this->assertNull($querySettings->getLanguageMode());
306 $query->setOrderings([
312 $posts = $query->execute()->toArray();
314 $this->assertCount(2, $posts);
315 $this->assertSame(
'B EN:Post1', $posts[0]->getTitle());
316 $this->assertSame(
'A EN:Post2', $posts[1]->getTitle());
328 $query = $this->postRepository->createQuery();
330 $querySettings = $query->getQuerySettings();
331 $querySettings->setStoragePageIds([1]);
332 $querySettings->setRespectSysLanguage(
true);
333 $querySettings->setIgnoreEnableFields(
true);
334 $querySettings->setLanguageUid(0);
339 $posts = $query->execute()->toArray();
341 $this->assertCount(4, $posts);
342 $this->assertSame(
'Post10', $posts[3]->getTitle());
353 $query = $this->postRepository->createQuery();
355 $querySettings = $query->getQuerySettings();
356 $querySettings->setStoragePageIds([1]);
357 $querySettings->setRespectSysLanguage(
true);
358 $querySettings->setIgnoreEnableFields(
true);
359 $querySettings->setLanguageUid(2);
360 $this->assertFalse($querySettings->getLanguageOverlayMode());
365 $posts = $query->execute()->toArray();
367 $this->assertCount(2, $posts);
369 $this->assertSame(
'GR:Post1', $posts[0]->getTitle());
370 $this->assertSame(
'GR:Post10', $posts[1]->getTitle());
384 $query = $this->postRepository->createQuery();
386 $querySettings = $query->getQuerySettings();
387 $querySettings->setStoragePageIds([1]);
388 $querySettings->setRespectSysLanguage(
true);
389 $querySettings->setIgnoreEnableFields(
true);
390 $querySettings->setLanguageUid(2);
391 $querySettings->setLanguageOverlayMode(
true);
396 $posts = $query->execute()->toArray();
398 $this->assertCount(4, $posts);
400 $this->assertSame(
'GR:Post1', $posts[0]->getTitle());
401 $this->assertSame(
'Post2', $posts[1]->getTitle());
402 $this->assertSame(
'Post3', $posts[2]->getTitle());
404 $this->assertSame(
'Post10', $posts[3]->getTitle());
414 $query = $this->postRepository->createQuery();
415 $querySettings = $query->getQuerySettings();
416 $querySettings->setStoragePageIds([1]);
417 $querySettings->setRespectSysLanguage(
true);
418 $querySettings->setLanguageUid(2);
419 $this->assertFalse($querySettings->getLanguageOverlayMode());
420 $this->assertNull($querySettings->getLanguageMode());
423 $query->matching($query->equals(
'title',
'GR:Post1'));
425 $posts = $query->execute()->toArray();
426 $this->assertCount(1, $posts);
427 $this->assertSame(
'GR:Post1', $posts[0]->getTitle());
438 $query = $this->postRepository->createQuery();
439 $querySettings = $query->getQuerySettings();
440 $querySettings->setStoragePageIds([1]);
441 $querySettings->setRespectSysLanguage(
true);
442 $querySettings->setLanguageUid(2);
443 $this->assertFalse($querySettings->getLanguageOverlayMode());
444 $this->assertNull($querySettings->getLanguageMode());
447 $query->matching($query->equals(
'blog.title',
'Blog1'));
449 $posts = $query->execute()->toArray();
450 $this->assertCount(1, $posts);
451 $this->assertSame(
'GR:Post1', $posts[0]->getTitle());
459 $query = $this->postRepository->createQuery();
460 $querySettings = $query->getQuerySettings();
461 $querySettings->setRespectStoragePage(
false);
462 $querySettings->setRespectSysLanguage(
true);
463 $querySettings->setLanguageUid(0);
464 $this->assertFalse($querySettings->getLanguageOverlayMode());
465 $this->assertNull($querySettings->getLanguageMode());
468 $query->matching($query->equals(
'tags.name',
'Tag1'));
470 $posts = $query->execute()->toArray();
471 $this->assertCount(3, $posts);
472 $this->assertSame(
'Post1', $posts[0]->getTitle());
480 $query = $this->postRepository->createQuery();
481 $querySettings = $query->getQuerySettings();
482 $querySettings->setRespectStoragePage(
false);
483 $querySettings->setRespectSysLanguage(
true);
484 $querySettings->setLanguageUid(1);
485 $this->assertFalse($querySettings->getLanguageOverlayMode());
486 $this->assertNull($querySettings->getLanguageMode());
489 $query->matching($query->equals(
'tags.name',
'Tag1'));
491 $posts = $query->execute()->toArray();
492 $this->assertCount(2, $posts);
493 $this->assertSame(
'A EN:Post2', $posts[0]->getTitle());
494 $this->assertSame(1, count($posts[0]->getTags()));
495 $this->assertSame(
'B EN:Post1', $posts[1]->getTitle());
496 $this->assertSame(2, count($posts[1]->getTags()));