2 declare(strict_types = 1);
19 use PHPUnit\Framework\MockObject\MockObject;
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' => 0]
79 $configurationManager = $this->objectManager->get(\
TYPO3\CMS\
Extbase\Configuration\ConfigurationManagerInterface::class);
80 $configurationManager->setConfiguration($configuration);
82 $this->postRepository = $this->objectManager->get(\
ExtbaseTeam\BlogExample\Domain\Repository\PostRepository::class);
92 $context = GeneralUtility::makeInstance(Context::class);
96 $environmentServiceMock = $this->createMock(EnvironmentService::class);
97 $environmentServiceMock
98 ->expects($this->atLeast(1))
99 ->method(
'isEnvironmentInFrontendMode')
101 GeneralUtility::setSingletonInstance(EnvironmentService::class, $environmentServiceMock);
104 $frontendControllerMock = $this->createMock(\
TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController::class);
105 $frontendControllerMock->sys_page = $pageRepositoryFixture;
106 $GLOBALS[
'TSFE'] = $frontendControllerMock;
116 $query = $this->postRepository->createQuery();
118 $querySettings = $query->getQuerySettings();
119 $querySettings->setStoragePageIds([1]);
120 $querySettings->setRespectSysLanguage(
true);
121 $querySettings->setLanguageUid(0);
123 $this->assertFalse($querySettings->getLanguageOverlayMode());
124 $this->assertNull($querySettings->getLanguageMode());
126 $postCount = $query->execute()->count();
127 $this->assertSame(3, $postCount);
139 $query = $this->postRepository->createQuery();
141 $querySettings = $query->getQuerySettings();
142 $querySettings->setStoragePageIds([1]);
143 $querySettings->setRespectSysLanguage(
true);
144 $querySettings->setLanguageUid(1);
145 $querySettings->setLanguageMode(
'strict');
146 $this->assertFalse($querySettings->getLanguageOverlayMode());
148 $postCount = $query->execute()->count();
149 $this->assertSame(2, $postCount);
159 $query = $this->postRepository->createQuery();
161 $querySettings = $query->getQuerySettings();
162 $querySettings->setStoragePageIds([1]);
163 $querySettings->setRespectSysLanguage(
true);
164 $querySettings->setLanguageUid(1);
165 $this->assertFalse($querySettings->getLanguageOverlayMode());
166 $this->assertNull($querySettings->getLanguageMode());
168 $postCount = $query->execute()->count();
169 $this->assertSame(3, $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(3, $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(3, $posts);
211 $this->assertSame(
'A EN:Post2', $posts[0]->getTitle());
212 $this->assertSame(
'B EN:Post1', $posts[1]->getTitle());
213 $this->assertSame(
'Post3', $posts[2]->getTitle());
223 $query = $this->postRepository->createQuery();
225 $querySettings = $query->getQuerySettings();
226 $querySettings->setStoragePageIds([1]);
227 $querySettings->setRespectSysLanguage(
true);
228 $querySettings->setLanguageUid(2);
229 $this->assertFalse($querySettings->getLanguageOverlayMode());
230 $this->assertNull($querySettings->getLanguageMode());
235 $posts = $query->execute()->toArray();
237 $this->assertCount(3, $posts);
238 $this->assertSame(
'GR:Post1', $posts[0]->getTitle());
239 $this->assertSame(
'Post2', $posts[1]->getTitle());
240 $this->assertSame(
'Post3', $posts[2]->getTitle());
250 $query = $this->postRepository->createQuery();
252 $querySettings = $query->getQuerySettings();
253 $querySettings->setStoragePageIds([1]);
254 $querySettings->setRespectSysLanguage(
true);
255 $querySettings->setLanguageUid(2);
256 $querySettings->setLanguageOverlayMode(
'hideNonTranslated');
257 $this->assertNull($querySettings->getLanguageMode());
262 $posts = $query->execute()->toArray();
264 $this->assertCount(3, $posts);
265 $this->assertSame(
'GR:Post1', $posts[0]->getTitle());
266 $this->assertSame(
'Post2', $posts[1]->getTitle());
267 $this->assertSame(
'Post3', $posts[2]->getTitle());
275 $query = $this->postRepository->createQuery();
277 $querySettings = $query->getQuerySettings();
278 $querySettings->setStoragePageIds([1]);
279 $querySettings->setRespectSysLanguage(
true);
280 $querySettings->setLanguageUid(1);
281 $this->assertFalse($querySettings->getLanguageOverlayMode());
282 $this->assertNull($querySettings->getLanguageMode());
287 $posts = $query->execute()->toArray();
289 $this->assertCount(3, $posts);
290 $this->assertSame(
'A EN:Post2', $posts[0]->getTitle());
291 $this->assertSame(
'B EN:Post1', $posts[1]->getTitle());
292 $this->assertSame(
'Post3', $posts[2]->getTitle());
304 $query = $this->postRepository->createQuery();
306 $querySettings = $query->getQuerySettings();
307 $querySettings->setStoragePageIds([1]);
308 $querySettings->setRespectSysLanguage(
true);
309 $querySettings->setIgnoreEnableFields(
true);
310 $querySettings->setLanguageUid(0);
315 $posts = $query->execute()->toArray();
317 $this->assertCount(4, $posts);
318 $this->assertSame(
'Post10', $posts[3]->getTitle());
332 $query = $this->postRepository->createQuery();
334 $querySettings = $query->getQuerySettings();
335 $querySettings->setStoragePageIds([1]);
336 $querySettings->setRespectSysLanguage(
true);
337 $querySettings->setIgnoreEnableFields(
true);
338 $querySettings->setLanguageUid(2);
339 $this->assertFalse($querySettings->getLanguageOverlayMode());
344 $posts = $query->execute()->toArray();
346 $this->assertCount(4, $posts);
349 $this->assertSame(
'Post10', $posts[3]->getTitle());
360 $query = $this->postRepository->createQuery();
361 $querySettings = $query->getQuerySettings();
362 $querySettings->setStoragePageIds([1]);
363 $querySettings->setRespectSysLanguage(
true);
364 $querySettings->setLanguageUid(2);
365 $this->assertFalse($querySettings->getLanguageOverlayMode());
366 $this->assertNull($querySettings->getLanguageMode());
369 $query->matching($query->equals(
'title',
'GR:Post1'));
371 $posts = $query->execute()->toArray();
372 $this->assertCount(1, $posts);
373 $this->assertSame(
'GR:Post1', $posts[0]->getTitle());
381 $query = $this->postRepository->createQuery();
382 $querySettings = $query->getQuerySettings();
383 $querySettings->setRespectStoragePage(
false);
384 $querySettings->setRespectSysLanguage(
true);
385 $querySettings->setLanguageUid(0);
386 $this->assertFalse($querySettings->getLanguageOverlayMode());
387 $this->assertNull($querySettings->getLanguageMode());
390 $query->matching($query->equals(
'tags.name',
'Tag1'));
392 $posts = $query->execute()->toArray();
393 $this->assertCount(3, $posts);
394 $this->assertSame(
'Post1', $posts[0]->getTitle());
402 $query = $this->postRepository->createQuery();
403 $querySettings = $query->getQuerySettings();
404 $querySettings->setRespectStoragePage(
false);
405 $querySettings->setRespectSysLanguage(
true);
406 $querySettings->setLanguageUid(1);
407 $this->assertFalse($querySettings->getLanguageOverlayMode());
408 $this->assertNull($querySettings->getLanguageMode());
411 $query->matching($query->equals(
'tags.name',
'Tag1'));
413 $posts = $query->execute()->toArray();
414 $this->assertCount(3, $posts);
415 $this->assertSame(
'A EN:Post2', $posts[0]->getTitle());
416 $this->assertSame(
'Post3', $posts[2]->getTitle());