2 namespace TYPO3\CMS\Extbase\Tests\Functional\Persistence
;
5 * This file is part of the TYPO3 CMS project.
7 * It is free software; you can redistribute it and/or modify it under
8 * the terms of the GNU General Public License, either version 2
9 * of the License, or any later version.
11 * For the full copyright and license information, please read the
12 * LICENSE.txt file that was distributed with this source code.
14 * The TYPO3 project - inspiring people to share!
17 use ExtbaseTeam\BlogExample\Domain\Model\Post
;
18 use TYPO3\CMS\Core\Utility\GeneralUtility
;
19 use TYPO3\CMS\Extbase\Persistence\QueryInterface
;
20 use TYPO3\CMS\Frontend\Page\PageRepository
;
22 class TranslationTest
extends \TYPO3\TestingFramework\Core\Functional\FunctionalTestCase
27 protected $testExtensionsToLoad = ['typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example'];
32 protected $coreExtensionsToLoad = ['extbase', 'fluid'];
35 * @var \TYPO3\CMS\Extbase\Object\ObjectManagerInterface The object manager
37 protected $objectManager;
40 * @var \TYPO3\CMS\Extbase\Persistence\Repository
42 protected $postRepository;
45 * Sets up this test suite.
47 protected function setUp()
51 * Posts Dataset for the tests:
60 $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/pages.xml');
61 $this->importDataSet(ORIGINAL_ROOT
. 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/blogs.xml');
62 $this->importDataSet(ORIGINAL_ROOT
. 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/translated-posts.xml');
64 $this->objectManager
= GeneralUtility
::makeInstance(\TYPO3\CMS\Extbase\
Object\ObjectManager
::class);
65 $this->postRepository
= $this->objectManager
->get(\ExtbaseTeam\BlogExample\Domain\Repository\PostRepository
::class);
67 $this->setUpBasicFrontendEnvironment();
71 * Minimal frontent environment to satisfy Extbase Typo3DbBackend
73 protected function setUpBasicFrontendEnvironment()
75 $environmentServiceMock = $this->createMock(\TYPO3\CMS\Extbase\Service\EnvironmentService
::class);
76 $environmentServiceMock
77 ->expects($this->any())
78 ->method('isEnvironmentInFrontendMode')
80 GeneralUtility
::setSingletonInstance(\TYPO3\CMS\Extbase\Service\EnvironmentService
::class, $environmentServiceMock);
82 $pageRepositoryFixture = new PageRepository();
83 $frontendControllerMock = $this->createMock(\TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController
::class);
84 $frontendControllerMock->sys_page
= $pageRepositoryFixture;
85 $GLOBALS['TSFE'] = $frontendControllerMock;
91 public function countReturnsCorrectNumberOfPosts()
93 $query = $this->postRepository
->createQuery();
95 $querySettings = $query->getQuerySettings();
96 $querySettings->setStoragePageIds([1]);
97 $querySettings->setRespectSysLanguage(true);
98 $querySettings->setLanguageUid(0);
100 $postCount = $query->execute()->count();
101 $this->assertSame(3, $postCount);
107 public function countReturnsCorrectNumberOfPostsInEnglishLanguageForStrictMode()
109 $query = $this->postRepository
->createQuery();
111 $querySettings = $query->getQuerySettings();
112 $querySettings->setStoragePageIds([1]);
113 $querySettings->setRespectSysLanguage(true);
114 $querySettings->setLanguageUid(1);
115 $querySettings->setLanguageMode('strict');
117 $postCount = $query->execute()->count();
118 $this->assertSame(2, $postCount);
124 public function countReturnsCorrectNumberOfPostsInEnglishLanguage()
126 $query = $this->postRepository
->createQuery();
128 $querySettings = $query->getQuerySettings();
129 $querySettings->setStoragePageIds([1]);
130 $querySettings->setRespectSysLanguage(true);
131 $querySettings->setLanguageUid(1);
133 $postCount = $query->execute()->count();
134 $this->assertSame(3, $postCount);
140 public function countReturnsCorrectNumberOfPostsInGreekLanguage()
142 $query = $this->postRepository
->createQuery();
144 $querySettings = $query->getQuerySettings();
145 $querySettings->setStoragePageIds([1]);
146 $querySettings->setRespectSysLanguage(true);
147 $querySettings->setLanguageUid(2);
148 $postCount = $query->execute()->count();
150 $this->assertSame(3, $postCount);
156 public function fetchingPostsReturnsEnglishPostsWithFallback()
158 $query = $this->postRepository
->createQuery();
160 $querySettings = $query->getQuerySettings();
161 $querySettings->setStoragePageIds([1]);
162 $querySettings->setRespectSysLanguage(true);
163 $querySettings->setLanguageUid(1);
165 $query->setOrderings(['title' => QueryInterface
::ORDER_ASCENDING
]);
167 /** @var Post[] $posts */
168 $posts = $query->execute()->toArray();
170 $this->assertCount(3, $posts);
171 $this->assertSame('A EN:Post2', $posts[0]->getTitle());
172 $this->assertSame('B EN:Post1', $posts[1]->getTitle());
173 $this->assertSame('Post3', $posts[2]->getTitle());
179 public function fetchingPostsReturnsGreekPostsWithFallback()
181 $query = $this->postRepository
->createQuery();
183 $querySettings = $query->getQuerySettings();
184 $querySettings->setStoragePageIds([1]);
185 $querySettings->setRespectSysLanguage(true);
186 $querySettings->setLanguageUid(2);
188 $query->setOrderings(['title' => QueryInterface
::ORDER_ASCENDING
]);
190 /** @var Post[] $posts */
191 $posts = $query->execute()->toArray();
193 $this->assertCount(3, $posts);
194 $this->assertSame('GR:Post1', $posts[0]->getTitle());
195 $this->assertSame('Post2', $posts[1]->getTitle());
196 $this->assertSame('Post3', $posts[2]->getTitle());
202 public function orderingByTitleRespectsEnglishTitles()
204 $query = $this->postRepository
->createQuery();
206 $querySettings = $query->getQuerySettings();
207 $querySettings->setStoragePageIds([1]);
208 $querySettings->setRespectSysLanguage(true);
209 $querySettings->setLanguageUid(1);
211 $query->setOrderings(['title' => QueryInterface
::ORDER_ASCENDING
]);
213 /** @var Post[] $posts */
214 $posts = $query->execute()->toArray();
216 $this->assertCount(3, $posts);
217 $this->assertSame('A EN:Post2', $posts[0]->getTitle());
218 $this->assertSame('B EN:Post1', $posts[1]->getTitle());
219 $this->assertSame('Post3', $posts[2]->getTitle());