1212
1313namespace  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 ;
1920use  Pimcore \Bundle \GenericDataIndexBundle \Service \Search \SearchService \DataObject \DataObjectSearchServiceInterface ;
2021use  Pimcore \Bundle \GenericDataIndexBundle \Service \Search \SearchService \SearchProviderInterface ;
2122use  Pimcore \Model \DataObject \Unittest ;
2223use  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