‪TYPO3CMS  10.4
CountTest.php
Go to the documentation of this file.
1 <?php
2 
3 /*
4  * This file is part of the TYPO3 CMS project.
5  *
6  * It is free software; you can redistribute it and/or modify it under
7  * the terms of the GNU General Public License, either version 2
8  * of the License, or any later version.
9  *
10  * For the full copyright and license information, please read the
11  * LICENSE.txt file that was distributed with this source code.
12  *
13  * The TYPO3 project - inspiring people to share!
14  */
15 
17 
23 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
24 
25 class ‪CountTest extends FunctionalTestCase
26 {
30  protected ‪$numberOfRecordsInFixture = 14;
31 
35  protected ‪$persistentManager;
36 
40  protected ‪$testExtensionsToLoad = ['typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example'];
41 
45  protected ‪$coreExtensionsToLoad = ['extbase', 'fluid'];
46 
50  protected ‪$objectManager;
51 
55  protected ‪$blogRepository;
56 
60  protected ‪$postRepository;
61 
65  protected function ‪setUp(): void
66  {
67  parent::setUp();
68 
69  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/pages.xml');
70  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/blogs.xml');
71  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/posts.xml');
72  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/post-post-mm.xml');
73  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/tags.xml');
74  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/tags-mm.xml');
75  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/post-tag-mm.xml');
76  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/persons.xml');
77 
78  $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
79  $this->persistentManager = $this->objectManager->get(PersistenceManager::class);
80  $this->postRepository = $this->objectManager->get(PostRepository::class);
81  }
82 
86  public function ‪simpleCountTest()
87  {
88  $query = $this->postRepository->createQuery();
89  self::assertSame($this->numberOfRecordsInFixture, $query->count());
90  }
91 
95  public function ‪offsetCountTest()
96  {
97  $query = $this->postRepository->createQuery();
98 
99  $query->setLimit($this->numberOfRecordsInFixture+1);
100  $query->setOffset(6);
101 
102  self::assertSame($this->numberOfRecordsInFixture - 6, $query->count());
103  }
104 
108  public function ‪exceedingOffsetCountTest()
109  {
110  $query = $this->postRepository->createQuery();
111 
112  $query->setLimit($this->numberOfRecordsInFixture+1);
113  $query->setOffset($this->numberOfRecordsInFixture + 5);
114 
115  self::assertSame(0, $query->count());
116  }
117 
121  public function ‪limitCountTest()
122  {
123  $query = $this->postRepository->createQuery();
124 
125  $query->setLimit(4);
126 
127  self::assertSame(4, $query->count());
128  }
129 
133  public function ‪limitAndOffsetCountTest()
134  {
135  $query = $this->postRepository->createQuery();
136 
137  $query
138  ->setOffset($this->numberOfRecordsInFixture - 3)
139  ->setLimit(4);
140 
141  self::assertSame(3, $query->count());
142  }
143 
147  public function ‪inConstraintCountTest()
148  {
149  $query = $this->postRepository->createQuery();
150 
151  $query->matching(
152  $query->in('uid', [1, 2, 3])
153  );
154 
155  self::assertSame(3, $query->count());
156  }
157 
163  public function ‪subpropertyJoinCountTest()
164  {
165  $query = $this->postRepository->createQuery();
166 
167  $query->matching(
168  $query->equals('blog.title', 'Blog1')
169  );
170 
171  self::assertSame(10, $query->count());
172  }
173 
179  public function ‪subpropertyJoinSameTableCountTest()
180  {
181  $query = $this->postRepository->createQuery();
182 
183  $query->matching(
184  $query->equals('relatedPosts.title', 'Post2')
185  );
186 
187  self::assertSame(1, $query->count());
188  }
189 
196  {
197  $query = $this->postRepository->createQuery();
198 
199  $query->matching(
200  $query->logicalOr(
201  $query->equals('tags.uid', 1),
202  $query->equals('tags.uid', 2)
203  )
204  );
205 
206  // QueryResult is lazy, so we have to run valid method to initialize
207  $result = $query->execute();
208  $result->valid();
209 
210  self::assertSame(10, $result->count());
211  }
212 
217  {
219  $personRepository = $this->objectManager->get(PersonRepository::class);
220  $query = $personRepository->createQuery();
221  $query->matching(
222  $query->logicalAnd(
223  $query->equals('tags.name', 'TagForAuthor1'),
224  $query->equals('tagsSpecial.name', 'SpecialTagForAuthor1')
225  )
226  );
227  self::assertSame(1, $query->count());
228  }
229 
234  {
236  $personRepository = $this->objectManager->get(PersonRepository::class);
237  $query = $personRepository->createQuery();
238  $query->matching(
239  $query->logicalOr(
240  $query->equals('tags.name', 'TagForAuthor1'),
241  $query->equals('tagsSpecial.name', 'SpecialTagForAuthor1')
242  )
243  );
244  self::assertSame(4, $query->count());
245  }
246 }
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\subpropertyJoinCountTest
‪subpropertyJoinCountTest()
Definition: CountTest.php:156
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\offsetCountTest
‪offsetCountTest()
Definition: CountTest.php:88
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\limitCountTest
‪limitCountTest()
Definition: CountTest.php:114
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\$blogRepository
‪TYPO3 CMS Extbase Persistence Repository $blogRepository
Definition: CountTest.php:49
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\simpleCountTest
‪simpleCountTest()
Definition: CountTest.php:79
‪ExtbaseTeam\BlogExample\Domain\Repository\PersonRepository
Definition: PersonRepository.php:25
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\limitAndOffsetCountTest
‪limitAndOffsetCountTest()
Definition: CountTest.php:126
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\exceedingOffsetCountTest
‪exceedingOffsetCountTest()
Definition: CountTest.php:101
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\$testExtensionsToLoad
‪array $testExtensionsToLoad
Definition: CountTest.php:37
‪TYPO3\CMS\Extbase\Persistence\Generic\PersistenceManager
Definition: PersistenceManager.php:29
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\queryWithAndConditionsToTheSameTableReturnExpectedCount
‪queryWithAndConditionsToTheSameTableReturnExpectedCount()
Definition: CountTest.php:209
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence
Definition: AddTest.php:16
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\$postRepository
‪ExtbaseTeam BlogExample Domain Repository PostRepository $postRepository
Definition: CountTest.php:53
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\$numberOfRecordsInFixture
‪int $numberOfRecordsInFixture
Definition: CountTest.php:29
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\$objectManager
‪TYPO3 CMS Extbase Object ObjectManagerInterface $objectManager
Definition: CountTest.php:45
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\subpropertyJoinSameTableCountTest
‪subpropertyJoinSameTableCountTest()
Definition: CountTest.php:172
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\$coreExtensionsToLoad
‪array $coreExtensionsToLoad
Definition: CountTest.php:41
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\setUp
‪setUp()
Definition: CountTest.php:58
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\inConstraintCountTest
‪inConstraintCountTest()
Definition: CountTest.php:140
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\$persistentManager
‪TYPO3 CMS Extbase Persistence Generic PersistenceManager $persistentManager
Definition: CountTest.php:33
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\subpropertyInMultipleLeftJoinCountTest
‪subpropertyInMultipleLeftJoinCountTest()
Definition: CountTest.php:188
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:46
‪ExtbaseTeam\BlogExample\Domain\Repository\PostRepository
Definition: PostRepository.php:30
‪TYPO3\CMS\Extbase\Object\ObjectManager
Definition: ObjectManager.php:28
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\queryWithOrConditionsToTheSameTableReturnExpectedCount
‪queryWithOrConditionsToTheSameTableReturnExpectedCount()
Definition: CountTest.php:226
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest
Definition: CountTest.php:26