Skip to content

Commit b2d2b8e

Browse files
committed
add test cases
1 parent 556f170 commit b2d2b8e

File tree

4 files changed

+215
-152
lines changed

4 files changed

+215
-152
lines changed

src/Model/Search/Modifier/Filter/FieldType/NestedFilter.php

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,17 +18,11 @@
1818
final readonly class NestedFilter implements SearchModifierInterface
1919
{
2020
public function __construct(
21-
private string $path,
2221
private string $fieldName,
2322
private SearchModifierInterface $subModifier
2423
) {
2524
}
2625

27-
public function getPath(): string
28-
{
29-
return $this->path;
30-
}
31-
3226
public function getFieldName(): string
3327
{
3428
return $this->fieldName;

src/SearchIndexAdapter/DefaultSearch/Search/Modifier/Filter/NestedTypeFilters.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ public function handleNestedFilter(
5252
}
5353

5454
$context->getSearch()->addQuery(
55-
new NestedFilter($this->buildPath($filter->getPath()), $subQuery)
55+
new NestedFilter($this->buildFieldPrefix($filter->getFieldName()), $subQuery)
5656
);
5757
}
5858

@@ -67,14 +67,14 @@ public function handleClassificationStoreFilter(
6767
}
6868

6969
$context->getSearch()->addQuery(
70-
new NestedFilter($this->buildPath($filter->getFieldName()), $subQuery)
70+
new NestedFilter($this->buildFieldPrefix($filter->getFieldName()), $subQuery)
7171
);
7272
}
7373

7474
private function getSubQuery(ClassificationStoreFilter|NestedFilterParam $filter, SearchInterface $search): ?array
7575
{
7676
$modifier = $filter->getSubModifier();
77-
$fieldName = $filter->getFieldName();
77+
$fieldName = $this->buildFieldPrefix($filter->getFieldName());
7878
if ($filter instanceof ClassificationStoreFilter) {
7979
$fieldName = $this->buildStoreFieldPrefix($filter);
8080
}
@@ -105,7 +105,7 @@ private function getSubQuery(ClassificationStoreFilter|NestedFilterParam $filter
105105
};
106106
}
107107

108-
private function buildPath(string $fieldName): string
108+
private function buildFieldPrefix(string $fieldName): string
109109
{
110110
return 'standard_fields.' . $fieldName;
111111
}

tests/Functional/Search/Modifier/Filter/NestedTypeFiltersTest.php

Lines changed: 45 additions & 142 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,17 @@
1212

1313
namespace Pimcore\Bundle\GenericDataIndexBundle\Tests\Functional\Search\Modifier\Filter;
1414

15-
use Carbon\Carbon;
16-
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\DateFilter;
17-
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\MultiSelectFilter;
18-
use Pimcore\Bundle\GenericDataIndexBundle\Service\Search\SearchService\Asset\AssetSearchServiceInterface;
15+
use Codeception\Test\Unit;
16+
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IdFilter;
17+
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\Basic\IntegerFilter;
18+
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\Filter\FieldType\NestedFilter;
19+
use Pimcore\Bundle\GenericDataIndexBundle\Model\Search\Modifier\FullTextSearch\WildcardSearch;
1920
use Pimcore\Bundle\GenericDataIndexBundle\Service\Search\SearchService\DataObject\DataObjectSearchServiceInterface;
2021
use Pimcore\Bundle\GenericDataIndexBundle\Service\Search\SearchService\SearchProviderInterface;
2122
use Pimcore\Model\DataObject\Unittest;
2223
use Pimcore\Tests\Support\Util\TestHelper;
2324

24-
class NestedTypeFiltersTest extends \Codeception\Test\Unit
25+
class NestedTypeFiltersTest extends Unit
2526
{
2627
/**
2728
* @var \Pimcore\Bundle\GenericDataIndexBundle\Tests\IndexTester
@@ -42,115 +43,42 @@ protected function _after()
4243
}
4344

4445
// tests
45-
public function testMultiSelectFilter()
46+
public function testNestedFilterWithIntegerFilter()
4647
{
47-
/**
48-
* @var Unittest $object1
49-
* @var Unittest $object2
50-
* @var Unittest $object3
51-
* @var Unittest $object4
52-
*/
53-
$object1 = TestHelper::createEmptyObject()->setKey('object1')->save();
54-
$object2 = TestHelper::createEmptyObject()->setKey('object2')->save();
55-
$object3 = TestHelper::createEmptyObject()->setKey('object3')->save();
56-
$object4 = TestHelper::createEmptyObject()->setKey('object4')->save();
48+
$seed = 68;
49+
/** @var Unittest $object1 */
50+
$object1 = $this->tester->createFullyFledgedObjectUnittest(seed: $seed);
51+
/** @var Unittest $object2 */
52+
$this->tester->createFullyFledgedObjectUnittest();
53+
/** @var Unittest $object3 */
54+
$object3 = $this->tester->createFullyFledgedObjectUnittest(seed: $seed);
5755

5856
/** @var DataObjectSearchServiceInterface $searchService */
5957
$searchService = $this->tester->grabService('generic-data-index.test.service.data-object-search-service');
6058
/** @var SearchProviderInterface $searchProvider */
6159
$searchProvider = $this->tester->grabService(SearchProviderInterface::class);
6260

63-
$elementSearch = $searchProvider
64-
->createDataObjectSearch()
65-
->addModifier(new MultiSelectFilter('key', ['object1', 'object2']))
66-
;
67-
$searchResult = $searchService->search($elementSearch);
68-
$this->assertIdArrayEquals([$object1->getId(), $object2->getId()], $searchResult->getIds());
69-
70-
$elementSearch = $searchProvider
71-
->createDataObjectSearch()
72-
->addModifier(new MultiSelectFilter('system_fields.key', ['object3', 'object4'], false))
73-
;
74-
$searchResult = $searchService->search($elementSearch);
75-
$this->assertIdArrayEquals([$object3->getId(), $object4->getId()], $searchResult->getIds());
76-
77-
$elementSearch = $searchProvider
61+
$dataObjectSearch = $searchProvider
7862
->createDataObjectSearch()
79-
->addModifier(new MultiSelectFilter('key', ['object3', 'object4'], false))
80-
;
81-
$searchResult = $searchService->search($elementSearch);
82-
$this->assertIdArrayEquals([], $searchResult->getIds());
83-
}
84-
85-
public function testDateFilterAsset()
86-
{
87-
$asset1 = TestHelper::createImageAsset()
88-
->addMetadata('testDate', 'date', strtotime('2020-01-01'))
89-
->save();
63+
->addModifier(new NestedFilter(
64+
'structuredtable.row1',
65+
new IntegerFilter('col1', $seed + 1)
66+
));
9067

91-
$asset2 = TestHelper::createImageAsset()
92-
->addMetadata('testDate', 'date', strtotime('2020-02-02 12:00:00'))
93-
->save();
94-
95-
$asset3 = TestHelper::createImageAsset()
96-
->addMetadata('testDate', 'date', strtotime('2020-03-03'))
97-
->save();
98-
99-
/** @var AssetSearchServiceInterface $searchService */
100-
$searchService = $this->tester->grabService('generic-data-index.test.service.asset-search-service');
101-
/** @var SearchProviderInterface $searchProvider */
102-
$searchProvider = $this->tester->grabService(SearchProviderInterface::class);
103-
104-
$assetSearch = $searchProvider
105-
->createAssetSearch()
106-
->addModifier(new DateFilter('testDate', Carbon::create('2019', 12, 31)));
107-
$searchResult = $searchService->search($assetSearch);
108-
$this->assertIdArrayEquals([$asset1->getId(), $asset2->getId(), $asset3->getId()], $searchResult->getIds());
109-
110-
$assetSearch = $searchProvider
111-
->createAssetSearch()
112-
->addModifier(new DateFilter('testDate', Carbon::create('2019', 12, 31), Carbon::create('2020', 1, 15)));
113-
$searchResult = $searchService->search($assetSearch);
114-
$this->assertIdArrayEquals([$asset1->getId()], $searchResult->getIds());
115-
116-
$assetSearch = $searchProvider
117-
->createAssetSearch()
118-
->addModifier(new DateFilter('testDate', null, null, Carbon::create('2020', 2, 2)));
119-
$searchResult = $searchService->search($assetSearch);
120-
$this->assertIdArrayEquals([$asset2->getId()], $searchResult->getIds());
121-
122-
$assetSearch = $searchProvider
123-
->createAssetSearch()
124-
->addModifier(new DateFilter('testDate', null, null, Carbon::create('2020', 2, 2), false));
125-
$searchResult = $searchService->search($assetSearch);
126-
$this->assertIdArrayEquals([], $searchResult->getIds());
127-
128-
$assetSearch = $searchProvider
129-
->createAssetSearch()
130-
->addModifier(new DateFilter('standard_fields.testDate.default', null, null, Carbon::create('2020', 2, 2), true, false));
131-
$searchResult = $searchService->search($assetSearch);
132-
$this->assertIdArrayEquals([$asset2->getId()], $searchResult->getIds());
133-
134-
$assetSearch = $searchProvider
135-
->createAssetSearch()
136-
->addModifier(new DateFilter('testDate', null, null, Carbon::create('2020', 2, 2), true, false));
137-
$searchResult = $searchService->search($assetSearch);
138-
$this->assertIdArrayEquals([], $searchResult->getIds());
68+
$searchResult = $searchService->search($dataObjectSearch);
69+
$this->assertIdArrayContains([$object1->getId(), $object3->getId()], $searchResult->getIds());
13970
}
14071

141-
public function testDateFilterDataObject()
72+
// tests
73+
public function testNestedFilterWithWildcardFilter()
14274
{
143-
$dataObject1 = TestHelper::createEmptyObject()
144-
->setDate(Carbon::create('2020', 1, 1))
145-
->save();
146-
147-
$dataObject2 = TestHelper::createEmptyObject()
148-
->setDate(Carbon::create('2020', 2, 2, 12))
149-
->save();
150-
151-
$dataObject3 = TestHelper::createEmptyObject()
152-
->setDate(Carbon::create('2020', 3, 3))
153-
->save();
75+
$seed = 33;
76+
/** @var Unittest $object1 */
77+
$object1 = $this->tester->createFullyFledgedObjectUnittest(seed: $seed);
78+
/** @var Unittest $object2 */
79+
$object2 = $this->tester->createFullyFledgedObjectUnittest();
80+
/** @var Unittest $object3 */
81+
$object3 = $this->tester->createFullyFledgedObjectUnittest(seed: $seed);
15482

15583
/** @var DataObjectSearchServiceInterface $searchService */
15684
$searchService = $this->tester->grabService('generic-data-index.test.service.data-object-search-service');
@@ -159,54 +87,29 @@ public function testDateFilterDataObject()
15987

16088
$dataObjectSearch = $searchProvider
16189
->createDataObjectSearch()
162-
->setClassDefinition($dataObject1->getClass())
163-
->addModifier(new DateFilter('date', Carbon::create('2019', 12, 31)))
164-
;
165-
$searchResult = $searchService->search($dataObjectSearch);
166-
$this->assertIdArrayEquals([$dataObject1->getId(), $dataObject2->getId(), $dataObject3->getId()], $searchResult->getIds());
167-
168-
$dataObjectSearch = $searchProvider
169-
->createDataObjectSearch()
170-
->addModifier(new DateFilter('date', Carbon::create('2019', 12, 31), Carbon::create('2020', 1, 15)))
171-
;
172-
$searchResult = $searchService->search($dataObjectSearch);
173-
$this->assertIdArrayEquals([$dataObject1->getId()], $searchResult->getIds());
174-
175-
$dataObjectSearch = $searchProvider
176-
->createDataObjectSearch()
177-
->addModifier(new DateFilter('date', null, null, Carbon::create('2020', 2, 2)))
178-
;
179-
$searchResult = $searchService->search($dataObjectSearch);
180-
$this->assertIdArrayEquals([$dataObject2->getId()], $searchResult->getIds());
90+
->addModifier(new NestedFilter(
91+
'structuredtable.row1',
92+
new WildcardSearch('col2', 'text_a_' . $seed)
93+
));
18194

182-
$dataObjectSearch = $searchProvider
183-
->createDataObjectSearch()
184-
->setClassDefinition($dataObject1->getClass())
185-
->addModifier(new DateFilter('date', null, null, Carbon::create('2020', 2, 2), false))
186-
;
18795
$searchResult = $searchService->search($dataObjectSearch);
188-
$this->assertIdArrayEquals([], $searchResult->getIds());
96+
$this->assertIdArrayContains([$object1->getId(), $object3->getId()], $searchResult->getIds());
18997

19098
$dataObjectSearch = $searchProvider
19199
->createDataObjectSearch()
192-
->addModifier(new DateFilter('standard_fields.date', null, null, Carbon::create('2020', 2, 2), true, false))
193-
;
194-
$searchResult = $searchService->search($dataObjectSearch);
195-
$this->assertIdArrayEquals([$dataObject2->getId()], $searchResult->getIds());
100+
->addModifier(new NestedFilter(
101+
'structuredtable.row1',
102+
new WildcardSearch('col2', 'text_a_1')
103+
));
196104

197-
$dataObjectSearch = $searchProvider
198-
->createDataObjectSearch()
199-
->addModifier(new DateFilter('date', null, null, Carbon::create('2020', 2, 2), true, false))
200-
;
201105
$searchResult = $searchService->search($dataObjectSearch);
202-
$this->assertIdArrayEquals([], $searchResult->getIds());
203-
106+
$this->assertEquals($object2->getId(), $searchResult->getIds()[0]);
204107
}
205108

206-
private function assertIdArrayEquals(array $ids1, array $ids2)
109+
private function assertIdArrayContains(array $expectedIds, array $actualIds): void
207110
{
208-
sort($ids1);
209-
sort($ids2);
210-
$this->assertEquals($ids1, $ids2);
111+
foreach ($expectedIds as $expectedId) {
112+
$this->assertContains($expectedId, $actualIds, "Expected ID {$expectedId} not found in result");
113+
}
211114
}
212-
}
115+
}

0 commit comments

Comments
 (0)