‪TYPO3CMS  10.4
QueryParserTest.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 
21 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
22 
23 class ‪QueryParserTest extends FunctionalTestCase
24 {
25 
29  protected ‪$testExtensionsToLoad = ['typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example'];
30 
34  protected ‪$coreExtensionsToLoad = ['extbase', 'fluid'];
35 
39  protected ‪$objectManager;
40 
44  protected ‪$blogRepository;
45 
49  protected function ‪setUp(): void
50  {
51  parent::setUp();
52 
53  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/categories.xml');
54  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/tags.xml');
55  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/blogs.xml');
56  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/tags-mm.xml');
57  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/persons.xml');
58  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/posts.xml');
59  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/post-tag-mm.xml');
60  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/category-mm.xml');
61  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/fe_users.xml');
62  $this->importDataSet(ORIGINAL_ROOT . 'typo3/sysext/extbase/Tests/Functional/Persistence/Fixtures/fe_groups.xml');
63 
64  $this->objectManager = GeneralUtility::makeInstance(ObjectManager::class);
65  $this->blogRepository = $this->objectManager->get(BlogRepository::class);
66  }
67 
72  {
74  $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
75  $query = $postRepository->createQuery();
76  $query->matching(
77  $query->logicalAnd(
78  $query->equals('blog', 3),
79  $query->logicalOr(
80  $query->equals('tags.name', 'Tag12'),
81  $query->equals('author.tags.name', 'TagForAuthor1')
82  )
83  )
84  );
85 
86  $result = $query->execute()->toArray();
87  self::assertEquals(3, count($result));
88  }
89 
96  {
98  $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
99  $query = $postRepository->createQuery();
100  $query->matching(
101  $query->equals('tags.name', 'Tag12')
102  );
103  $result = $query->execute()->toArray();
104  self::assertEquals(2, count($result));
105  }
106 
114  {
116  $frontendUserRepository = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Domain\\Repository\\FrontendUserRepository');
117  $query = $frontendUserRepository->createQuery();
118  $query->matching(
119  $query->equals('usergroup.title', 'Group A')
120  );
121 
122  $result = $query->execute()->toArray();
123  self::assertCount(3, $result);
124  }
125 
132  {
134  $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
135  $query = $postRepository->createQuery();
136  $query->matching(
137  $query->equals('author.firstname', 'Author')
138  );
139  $result = $query->execute()->toArray();
140  // there are 16 post in total, 2 without author, 1 hidden, 1 deleted => 12 posts
141  self::assertCount(12, $result);
142  }
143 
147  public function ‪orReturnsExpectedResult()
148  {
150  $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
151  $query = $postRepository->createQuery();
152  $query->matching(
153  $query->logicalOr(
154  $query->equals('tags.name', 'Tag12'),
155  $query->equals('tags.name', 'Tag11')
156  )
157  );
158  $result = $query->execute()->toArray();
159  self::assertCount(2, $result);
160  }
161 
166  {
168  $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
169  $query = $postRepository->createQuery();
170  $query->matching(
171  $query->logicalAnd(
172  $query->equals('blog', 3),
173  $query->equals('tags.name', 'Tag12'),
174  $query->equals('author.tags.name', 'TagForAuthor1')
175  )
176  );
177  $result = $query->execute()->toArray();
178  self::assertCount(1, $result);
179  }
180 
185  {
187  $frontendUserRepository = $this->objectManager->get('TYPO3\\CMS\\Extbase\\Domain\\Repository\\FrontendUserRepository');
188  $query = $frontendUserRepository->createQuery();
189 
190  $result = $query->matching($query->contains('usergroup', 1))
191  ->execute();
192  self::assertCount(3, $result);
193  }
194 
199  {
200  $postRepository = $this->objectManager->get('ExtbaseTeam\\BlogExample\\Domain\\Repository\\PostRepository');
201  $query = $postRepository->createQuery();
202  $post = $query->matching($query->equals('uid', 1))->execute()->current();
203  self::assertCount(3, $post->getCategories());
204  }
205 }
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryWithRelationHasManyWithoutParentKeyFieldNameReturnsExpectedResult
‪queryWithRelationHasManyWithoutParentKeyFieldNameReturnsExpectedResult()
Definition: QueryParserTest.php:109
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryWithMultipleRelationsToIdenticalTablesReturnsExpectedResultForOrQuery
‪queryWithMultipleRelationsToIdenticalTablesReturnsExpectedResultForOrQuery()
Definition: QueryParserTest.php:67
‪ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository
Definition: BlogRepository.php:25
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryWithMultipleRelationsToIdenticalTablesReturnsExpectedResultForAndQuery
‪queryWithMultipleRelationsToIdenticalTablesReturnsExpectedResultForAndQuery()
Definition: QueryParserTest.php:161
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryWithFindInSetReturnsExpectedResult
‪queryWithFindInSetReturnsExpectedResult()
Definition: QueryParserTest.php:180
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\orReturnsExpectedResult
‪orReturnsExpectedResult()
Definition: QueryParserTest.php:143
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\$coreExtensionsToLoad
‪array $coreExtensionsToLoad
Definition: QueryParserTest.php:32
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\$blogRepository
‪ExtbaseTeam BlogExample Domain Repository BlogRepository $blogRepository
Definition: QueryParserTest.php:40
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryForPostWithCategoriesReturnsPostWithCategories
‪queryForPostWithCategoriesReturnsPostWithCategories()
Definition: QueryParserTest.php:194
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest
Definition: QueryParserTest.php:24
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence
Definition: AddTest.php:16
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\$testExtensionsToLoad
‪array $testExtensionsToLoad
Definition: QueryParserTest.php:28
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\setUp
‪setUp()
Definition: QueryParserTest.php:45
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryWithRelationHasAndBelongsToManyReturnsExpectedResult
‪queryWithRelationHasAndBelongsToManyReturnsExpectedResult()
Definition: QueryParserTest.php:91
‪TYPO3\CMS\Core\Utility\GeneralUtility
Definition: GeneralUtility.php:46
‪TYPO3\CMS\Extbase\Object\ObjectManager
Definition: ObjectManager.php:28
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\$objectManager
‪TYPO3 CMS Extbase Object ObjectManagerInterface $objectManager
Definition: QueryParserTest.php:36
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryWithRelationHasOneAndHasAndBelongsToManyWithoutParentKeyFieldNameReturnsExpectedResult
‪queryWithRelationHasOneAndHasAndBelongsToManyWithoutParentKeyFieldNameReturnsExpectedResult()
Definition: QueryParserTest.php:127