‪TYPO3CMS  11.5
CountTest.php
Go to the documentation of this file.
1 <?php
2 
3 declare(strict_types=1);
4 
5 /*
6  * This file is part of the TYPO3 CMS project.
7  *
8  * It is free software; you can redistribute it and/or modify it under
9  * the terms of the GNU General Public License, either version 2
10  * of the License, or any later version.
11  *
12  * For the full copyright and license information, please read the
13  * LICENSE.txt file that was distributed with this source code.
14  *
15  * The TYPO3 project - inspiring people to share!
16  */
17 
19 
22 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
23 
24 class ‪CountTest extends FunctionalTestCase
25 {
29  protected ‪$numberOfRecordsInFixture = 14;
30 
31  protected ‪$testExtensionsToLoad = ['typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example'];
32 
36  protected ‪$postRepository;
37 
41  protected function ‪setUp(): void
42  {
43  parent::setUp();
44 
45  $this->importDataSet('PACKAGE:typo3/testing-framework/Resources/Core/Functional/Fixtures/pages.xml');
46  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/blogs.csv');
47  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/posts.csv');
48  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/post-post-mm.csv');
49  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/tags.csv');
50  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/tags-mm.csv');
51  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/post-tag-mm.csv');
52  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/persons.csv');
53 
54  $this->postRepository = $this->get(PostRepository::class);
55  }
56 
60  public function ‪simpleCountTest(): void
61  {
62  $query = $this->postRepository->createQuery();
63  self::assertSame($this->numberOfRecordsInFixture, $query->count());
64  }
65 
69  public function ‪offsetCountTest(): void
70  {
71  $query = $this->postRepository->createQuery();
72 
73  $query->setLimit($this->numberOfRecordsInFixture + 1);
74  $query->setOffset(6);
75 
76  self::assertSame($this->numberOfRecordsInFixture - 6, $query->count());
77  }
78 
82  public function ‪exceedingOffsetCountTest(): void
83  {
84  $query = $this->postRepository->createQuery();
85 
86  $query->setLimit($this->numberOfRecordsInFixture + 1);
87  $query->setOffset($this->numberOfRecordsInFixture + 5);
88 
89  self::assertSame(0, $query->count());
90  }
91 
95  public function ‪limitCountTest(): void
96  {
97  $query = $this->postRepository->createQuery();
98 
99  $query->setLimit(4);
100 
101  self::assertSame(4, $query->count());
102  }
103 
107  public function ‪limitAndOffsetCountTest(): void
108  {
109  $query = $this->postRepository->createQuery();
110 
111  $query
112  ->setOffset($this->numberOfRecordsInFixture - 3)
113  ->setLimit(4);
114 
115  self::assertSame(3, $query->count());
116  }
117 
121  public function ‪inConstraintCountTest(): void
122  {
123  $query = $this->postRepository->createQuery();
124 
125  $query->matching(
126  $query->in('uid', [1, 2, 3])
127  );
128 
129  self::assertSame(3, $query->count());
130  }
131 
137  public function ‪subpropertyJoinCountTest(): void
138  {
139  $query = $this->postRepository->createQuery();
140 
141  $query->matching(
142  $query->equals('blog.title', 'Blog1')
143  );
144 
145  self::assertSame(10, $query->count());
146  }
147 
153  public function ‪subpropertyJoinSameTableCountTest(): void
154  {
155  $query = $this->postRepository->createQuery();
156 
157  $query->matching(
158  $query->equals('relatedPosts.title', 'Post2')
159  );
160 
161  self::assertSame(1, $query->count());
162  }
163 
169  public function ‪subpropertyInMultipleLeftJoinCountTest(): void
170  {
171  $query = $this->postRepository->createQuery();
172 
173  $query->matching(
174  $query->logicalOr(
175  $query->equals('tags.uid', 1),
176  $query->equals('tags.uid', 2)
177  )
178  );
179 
180  // QueryResult is lazy, so we have to run valid method to initialize
181  $result = $query->execute();
182  $result->valid();
183 
184  self::assertSame(10, $result->count());
185  }
186 
191  {
192  $personRepository = $this->get(PersonRepository::class);
193  $query = $personRepository->createQuery();
194  $query->matching(
195  $query->logicalAnd(
196  $query->equals('tags.name', 'TagForAuthor1'),
197  $query->equals('tagsSpecial.name', 'SpecialTagForAuthor1')
198  )
199  );
200  self::assertSame(1, $query->count());
201  }
202 
207  {
208  $personRepository = $this->get(PersonRepository::class);
209  $query = $personRepository->createQuery();
210  $query->matching(
211  $query->logicalOr(
212  $query->equals('tags.name', 'TagForAuthor1'),
213  $query->equals('tagsSpecial.name', 'SpecialTagForAuthor1')
214  )
215  );
216  self::assertSame(4, $query->count());
217  }
218 }
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\subpropertyJoinCountTest
‪subpropertyJoinCountTest()
Definition: CountTest.php:135
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\offsetCountTest
‪offsetCountTest()
Definition: CountTest.php:67
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\limitCountTest
‪limitCountTest()
Definition: CountTest.php:93
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\$postRepository
‪PostRepository $postRepository
Definition: CountTest.php:34
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\simpleCountTest
‪simpleCountTest()
Definition: CountTest.php:58
‪ExtbaseTeam\BlogExample\Domain\Repository\PersonRepository
Definition: PersonRepository.php:27
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\limitAndOffsetCountTest
‪limitAndOffsetCountTest()
Definition: CountTest.php:105
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\exceedingOffsetCountTest
‪exceedingOffsetCountTest()
Definition: CountTest.php:80
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\queryWithAndConditionsToTheSameTableReturnExpectedCount
‪queryWithAndConditionsToTheSameTableReturnExpectedCount()
Definition: CountTest.php:188
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence
Definition: AddTest.php:18
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\$numberOfRecordsInFixture
‪int $numberOfRecordsInFixture
Definition: CountTest.php:28
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\subpropertyJoinSameTableCountTest
‪subpropertyJoinSameTableCountTest()
Definition: CountTest.php:151
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\setUp
‪setUp()
Definition: CountTest.php:39
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\$testExtensionsToLoad
‪$testExtensionsToLoad
Definition: CountTest.php:30
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\inConstraintCountTest
‪inConstraintCountTest()
Definition: CountTest.php:119
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\subpropertyInMultipleLeftJoinCountTest
‪subpropertyInMultipleLeftJoinCountTest()
Definition: CountTest.php:167
‪ExtbaseTeam\BlogExample\Domain\Repository\PostRepository
Definition: PostRepository.php:32
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest\queryWithOrConditionsToTheSameTableReturnExpectedCount
‪queryWithOrConditionsToTheSameTableReturnExpectedCount()
Definition: CountTest.php:204
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\CountTest
Definition: CountTest.php:25