‪TYPO3CMS  11.5
QueryParserTest.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 
24 use TYPO3\TestingFramework\Core\Functional\FunctionalTestCase;
25 
26 class ‪QueryParserTest extends FunctionalTestCase
27 {
28  protected ‪$testExtensionsToLoad = ['typo3/sysext/extbase/Tests/Functional/Fixtures/Extensions/blog_example'];
29 
33  protected function ‪setUp(): void
34  {
35  parent::setUp();
36 
37  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/categories.csv');
38  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/tags.csv');
39  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/blogs.csv');
40  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/tags-mm.csv');
41  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/persons.csv');
42  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/posts.csv');
43  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/post-tag-mm.csv');
44  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/category-mm.csv');
45  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/fe_users.csv');
46  $this->importCSVDataSet(__DIR__ . '/../Persistence/Fixtures/fe_groups.csv');
47  }
48 
53  {
54  $postRepository = $this->get(PostRepository::class);
55  $query = $postRepository->createQuery();
56  $query->matching(
57  $query->logicalAnd(
58  $query->equals('blog', 3),
59  $query->logicalOr(
60  $query->equals('tags.name', 'Tag12'),
61  $query->equals('author.tags.name', 'TagForAuthor1')
62  )
63  )
64  );
65 
66  $result = $query->execute()->toArray();
67  self::assertCount(3, $result);
68  }
69 
76  {
77  $postRepository = $this->get(PostRepository::class);
78  $query = $postRepository->createQuery();
79  $query->matching(
80  $query->equals('tags.name', 'Tag12')
81  );
82  $result = $query->execute()->toArray();
83  self::assertCount(2, $result);
84  }
85 
93  {
94  $administratorRepository = $this->get(AdministratorRepository::class);
95  $query = $administratorRepository->createQuery();
96  $query->matching(
97  $query->equals('usergroup.title', 'Group A')
98  );
99 
100  $result = $query->execute()->toArray();
101  self::assertCount(2, $result);
102  }
103 
110  {
111  $postRepository = $this->get(PostRepository::class);
112  $query = $postRepository->createQuery();
113  $query->matching(
114  $query->equals('author.firstname', 'Author')
115  );
116  $result = $query->execute()->toArray();
117  // there are 16 post in total, 2 without author, 1 hidden, 1 deleted => 12 posts
118  self::assertCount(12, $result);
119  }
120 
124  public function ‪orReturnsExpectedResult(): void
125  {
126  $postRepository = $this->get(PostRepository::class);
127  $query = $postRepository->createQuery();
128  $query->matching(
129  $query->logicalOr(
130  $query->equals('tags.name', 'Tag12'),
131  $query->equals('tags.name', 'Tag11')
132  )
133  );
134  $result = $query->execute()->toArray();
135  self::assertCount(2, $result);
136  }
137 
142  {
143  $postRepository = $this->get(PostRepository::class);
144  $query = $postRepository->createQuery();
145  $query->matching(
146  $query->logicalAnd(
147  $query->equals('blog', 3),
148  $query->equals('tags.name', 'Tag12'),
149  $query->equals('author.tags.name', 'TagForAuthor1')
150  )
151  );
152  $result = $query->execute()->toArray();
153  self::assertCount(1, $result);
154  }
155 
160  {
161  $administratorRepository = $this->get(AdministratorRepository::class);
162  $query = $administratorRepository->createQuery();
163 
164  $result = $query->matching($query->contains('usergroup', 1))
165  ->execute();
166  self::assertCount(2, $result);
167  }
168 
173  {
174  $postRepository = $this->get(PostRepository::class);
175  $query = $postRepository->createQuery();
176  $post = $query->matching($query->equals('uid', 1))->execute()->current();
177  self::assertCount(3, $post->getCategories());
178  }
179 
184  {
185  $blogRepository = $this->get(BlogRepository::class);
186  $query = $blogRepository->createQuery();
188  $blog = $query->matching($query->logicalOr(
189  $query->like('description', '%w/o%'),
190  $query->like('posts.title', '%w/o%'),
191  ))->execute()->current();
192  self::assertSame(7, $blog->getUid());
193  }
194 }
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryWithRelationHasManyWithoutParentKeyFieldNameReturnsExpectedResult
‪queryWithRelationHasManyWithoutParentKeyFieldNameReturnsExpectedResult()
Definition: QueryParserTest.php:92
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryWithMultipleRelationsToIdenticalTablesReturnsExpectedResultForOrQuery
‪queryWithMultipleRelationsToIdenticalTablesReturnsExpectedResultForOrQuery()
Definition: QueryParserTest.php:52
‪ExtbaseTeam\BlogExample\Domain\Repository\BlogRepository
Definition: BlogRepository.php:27
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryWithMultipleRelationsToIdenticalTablesReturnsExpectedResultForAndQuery
‪queryWithMultipleRelationsToIdenticalTablesReturnsExpectedResultForAndQuery()
Definition: QueryParserTest.php:141
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryWithFindInSetReturnsExpectedResult
‪queryWithFindInSetReturnsExpectedResult()
Definition: QueryParserTest.php:159
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\orReturnsExpectedResult
‪orReturnsExpectedResult()
Definition: QueryParserTest.php:124
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\$testExtensionsToLoad
‪$testExtensionsToLoad
Definition: QueryParserTest.php:28
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryForBlogsAndPostsWithNoPostsShowsBlogRecord
‪queryForBlogsAndPostsWithNoPostsShowsBlogRecord()
Definition: QueryParserTest.php:183
‪ExtbaseTeam\BlogExample\Domain\Repository\AdministratorRepository
Definition: AdministratorRepository.php:25
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryForPostWithCategoriesReturnsPostWithCategories
‪queryForPostWithCategoriesReturnsPostWithCategories()
Definition: QueryParserTest.php:172
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest
Definition: QueryParserTest.php:27
‪ExtbaseTeam\BlogExample\Domain\Model\Blog
Definition: Blog.php:29
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence
Definition: AddTest.php:18
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\setUp
‪setUp()
Definition: QueryParserTest.php:33
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryWithRelationHasAndBelongsToManyReturnsExpectedResult
‪queryWithRelationHasAndBelongsToManyReturnsExpectedResult()
Definition: QueryParserTest.php:75
‪ExtbaseTeam\BlogExample\Domain\Repository\PostRepository
Definition: PostRepository.php:32
‪TYPO3\CMS\Extbase\Tests\Functional\Persistence\QueryParserTest\queryWithRelationHasOneAndHasAndBelongsToManyWithoutParentKeyFieldNameReturnsExpectedResult
‪queryWithRelationHasOneAndHasAndBelongsToManyWithoutParentKeyFieldNameReturnsExpectedResult()
Definition: QueryParserTest.php:109