1515
1616namespace Pimcore \Bundle \GenericDataIndexBundle \Tests \Functional \Search \Modifier \Sort ;
1717
18+ use Codeception \Test \Unit ;
1819use Pimcore \Bundle \GenericDataIndexBundle \Enum \Search \SortDirection ;
1920use Pimcore \Bundle \GenericDataIndexBundle \Exception \OpenSearch \ResultWindowTooLargeException ;
2021use Pimcore \Bundle \GenericDataIndexBundle \Exception \OpenSearch \SearchFailedException ;
2122use Pimcore \Bundle \GenericDataIndexBundle \Model \Search \Modifier \Sort \OrderByField ;
2223use Pimcore \Bundle \GenericDataIndexBundle \Model \Search \Modifier \Sort \Tree \OrderByFullPath ;
24+ use Pimcore \Bundle \GenericDataIndexBundle \Model \Search \Modifier \Sort \Tree \OrderByIndexField ;
2325use Pimcore \Bundle \GenericDataIndexBundle \SearchIndexAdapter \OpenSearch \Search \Modifier \Sort \TreeSortHandlers ;
2426use Pimcore \Bundle \GenericDataIndexBundle \Service \Search \SearchService \Asset \AssetSearchServiceInterface ;
27+ use Pimcore \Bundle \GenericDataIndexBundle \Service \Search \SearchService \DataObject \DataObjectSearchServiceInterface ;
2528use Pimcore \Bundle \GenericDataIndexBundle \Service \Search \SearchService \SearchProviderInterface ;
2629use Pimcore \Bundle \GenericDataIndexBundle \Service \SearchIndex \SearchIndexConfigServiceInterface ;
30+ use Pimcore \Bundle \GenericDataIndexBundle \Tests \IndexTester ;
2731use Pimcore \Tests \Support \Util \TestHelper ;
2832
29- final class SortModifierTest extends \ Codeception \ Test \ Unit
33+ final class SortModifierTest extends Unit
3034{
31- /**
32- * @var \Pimcore\Bundle\GenericDataIndexBundle\Tests\IndexTester
33- */
34- protected $ tester ;
35+ protected IndexTester $ tester ;
36+
37+ private AssetSearchServiceInterface $ assetSearchService ;
38+
39+ private DataObjectSearchServiceInterface $ dataObjectSearchService ;
40+
41+ private SearchProviderInterface $ searchProvider ;
3542
3643 private bool $ indexSettingsChanged = false ;
3744
38- protected function _before ()
45+ protected function _before (): void
3946 {
47+ $ this ->searchProvider = $ this ->tester ->grabService (SearchProviderInterface::class);
48+ $ this ->assetSearchService = $ this ->tester ->grabService (
49+ 'generic-data-index.test.service.asset-search-service '
50+ );
51+ $ this ->dataObjectSearchService = $ this ->tester ->grabService (
52+ 'generic-data-index.test.service.data-object-search-service '
53+ );
4054 $ this ->tester ->enableSynchronousProcessing ();
4155 }
4256
43- protected function _after ()
57+ protected function _after (): void
4458 {
4559 if ($ this ->indexSettingsChanged ) {
4660 $ this ->indexSettingsChanged = false ;
@@ -53,7 +67,7 @@ protected function _after()
5367 $ this ->tester ->flushIndex ();
5468 }
5569
56- public function testHandleSortByPageNumber ()
70+ public function testHandleSortByPageNumber (): void
5771 {
5872 $ assets = $ this ->createAssets ();
5973 $ fullPaths = [];
@@ -62,11 +76,7 @@ public function testHandleSortByPageNumber()
6276 }
6377 /** @var SearchIndexConfigServiceInterface $searchIndexConfigService */
6478 $ searchIndexConfigService = $ this ->tester ->grabService (SearchIndexConfigServiceInterface::class);
65- /** @var AssetSearchServiceInterface $searchService */
66- $ searchService = $ this ->tester ->grabService ('generic-data-index.test.service.asset-search-service ' );
67- /** @var SearchProviderInterface $searchProvider */
68- $ searchProvider = $ this ->tester ->grabService (SearchProviderInterface::class);
69- /** @var TreeSortHandlers $searchProvider */
79+ /** @var TreeSortHandlers $treeSort */
7080 $ treeSort = $ this ->tester ->grabService (TreeSortHandlers::class);
7181
7282 // Make sure that sorting by page number is executed
@@ -77,43 +87,43 @@ public function testHandleSortByPageNumber()
7787
7888 // Sort direction of the result should remain same even though the search order was reversed
7989 rsort ($ fullPaths );
80- $ assetSearch = $ searchProvider
90+ $ assetSearch = $ this -> searchProvider
8191 ->createAssetSearch ()
8292 ->setPageSize (2 )
8393 ->setPage (5 )
8494 ->addModifier (new OrderByFullPath (SortDirection::DESC ))
8595 ;
86- $ searchResult = $ searchService ->search ($ assetSearch );
96+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
8797
8898 $ this ->assertCount (2 , $ searchResult ->getItems ());
8999 $ this ->assertSame ($ fullPaths [8 ], $ searchResult ->getItems ()[0 ]->getFullPath ());
90100 $ this ->assertSame ($ fullPaths [9 ], $ searchResult ->getItems ()[1 ]->getFullPath ());
91101
92102 sort ($ fullPaths );
93- $ assetSearch = $ searchProvider
103+ $ assetSearch = $ this -> searchProvider
94104 ->createAssetSearch ()
95105 ->setPageSize (2 )
96106 ->setPage (5 )
97107 ->addModifier (new OrderByFullPath ())
98108 ;
99- $ searchResult = $ searchService ->search ($ assetSearch );
109+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
100110 $ this ->assertCount (2 , $ searchResult ->getItems ());
101111 $ this ->assertSame ($ fullPaths [8 ], $ searchResult ->getItems ()[0 ]->getFullPath ());
102112 $ this ->assertSame ($ fullPaths [9 ], $ searchResult ->getItems ()[1 ]->getFullPath ());
103113
104114 //Without initial sort is page sort not executed and because of the result window we expect an exception
105- $ assetSearch = $ searchProvider
115+ $ assetSearch = $ this -> searchProvider
106116 ->createAssetSearch ()
107117 ->setPageSize (2 )
108118 ->setPage (5 )
109119 ;
110120
111121 $ this ->expectException (ResultWindowTooLargeException::class);
112- $ searchService ->search ($ assetSearch );
122+ $ this -> assetSearchService ->search ($ assetSearch );
113123 }
114124
115125 // tests
116- public function testOrderByFullPath ()
126+ public function testOrderByFullPath (): void
117127 {
118128 $ asset = TestHelper::createImageAsset ();
119129 $ asset2 = TestHelper::createImageAsset ();
@@ -126,41 +136,64 @@ public function testOrderByFullPath()
126136 ];
127137 sort ($ fullPaths );
128138
129- /** @var AssetSearchServiceInterface $searchService */
130- $ searchService = $ this ->tester ->grabService ('generic-data-index.test.service.asset-search-service ' );
131- /** @var SearchProviderInterface $searchProvider */
132- $ searchProvider = $ this ->tester ->grabService (SearchProviderInterface::class);
133-
134- $ assetSearch = $ searchProvider
139+ $ assetSearch = $ this ->searchProvider
135140 ->createAssetSearch ()
136141 ->addModifier (new OrderByFullPath ())
137142 ;
138- $ searchResult = $ searchService ->search ($ assetSearch );
143+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
139144
140- $ resultFullPaths = array_map (function ($ asset ) {
145+ $ resultFullPaths = array_map (static function ($ asset ) {
141146 return $ asset ->getFullPath ();
142147 }, $ searchResult ->getItems ());
143148
144149 $ this ->assertEquals ($ fullPaths , $ resultFullPaths );
145150
146151 rsort ($ fullPaths );
147152
148- $ assetSearch = $ searchProvider
153+ $ assetSearch = $ this -> searchProvider
149154 ->createAssetSearch ()
150155 ->addModifier (new OrderByFullPath (SortDirection::DESC ))
151156 ;
152- $ searchResult = $ searchService ->search ($ assetSearch );
157+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
153158
154- $ resultFullPaths = array_map (function ($ asset ) {
159+ $ resultFullPaths = array_map (static function ($ asset ) {
155160 return $ asset ->getFullPath ();
156161 }, $ searchResult ->getItems ());
157162
158163 $ this ->assertEquals ($ fullPaths , $ resultFullPaths );
159164
160165 }
161166
167+ public function testOrderByIndex (): void
168+ {
169+ $ object = TestHelper::createEmptyObject ()->setIndex (1 )->save ();
170+ $ object2 = TestHelper::createEmptyObject ()->setIndex (2 )->save ();
171+ $ object3 = TestHelper::createEmptyObject ()->setIndex (0 )->save ();
172+ $ sortedIds = [$ object3 ->getId (), $ object ->getId (), $ object2 ->getId ()];
173+
174+ $ dataObjectSearch = $ this ->searchProvider
175+ ->createDataObjectSearch ()
176+ ->addModifier (new OrderByIndexField ())
177+ ;
178+
179+ $ results = $ this ->dataObjectSearchService ->search ($ dataObjectSearch );
180+ $ resultIds = array_map (static function ($ object ) {
181+ return $ object ->getId ();
182+ }, $ results ->getItems ());
183+
184+ $ this ->assertEquals ($ sortedIds , $ resultIds );
185+
186+ $ object ->setIndex (3 )->save ();
187+ $ results = $ this ->dataObjectSearchService ->search ($ dataObjectSearch );
188+ $ resultIds = array_map (static function ($ object ) {
189+ return $ object ->getId ();
190+ }, $ results ->getItems ());
191+
192+ $ this ->assertEquals ($ object ->getId (), $ resultIds [2 ]);
193+ }
194+
162195 // tests
163- public function testOrderByField ()
196+ public function testOrderByField (): void
164197 {
165198 $ asset = TestHelper::createImageAsset ();
166199 $ asset2 = TestHelper::createImageAsset ();
@@ -173,49 +206,44 @@ public function testOrderByField()
173206 ];
174207 sort ($ keys );
175208
176- /** @var AssetSearchServiceInterface $searchService */
177- $ searchService = $ this ->tester ->grabService ('generic-data-index.test.service.asset-search-service ' );
178- /** @var SearchProviderInterface $searchProvider */
179- $ searchProvider = $ this ->tester ->grabService (SearchProviderInterface::class);
180-
181- $ assetSearch = $ searchProvider
209+ $ assetSearch = $ this ->searchProvider
182210 ->createAssetSearch ()
183211 ->addModifier (new OrderByField ('key ' ))
184212 ;
185- $ searchResult = $ searchService ->search ($ assetSearch );
186- $ resultKeys = array_map (function ($ asset ) {
213+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
214+ $ resultKeys = array_map (static function ($ asset ) {
187215 return $ asset ->getKey ();
188216 }, $ searchResult ->getItems ());
189217 $ this ->assertEquals ($ keys , $ resultKeys );
190218
191219 rsort ($ keys );
192- $ assetSearch = $ searchProvider
220+ $ assetSearch = $ this -> searchProvider
193221 ->createAssetSearch ()
194222 ->addModifier (new OrderByField ('key ' , SortDirection::DESC ))
195223 ;
196- $ searchResult = $ searchService ->search ($ assetSearch );
197- $ resultKeys = array_map (function ($ asset ) {
224+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
225+ $ resultKeys = array_map (static function ($ asset ) {
198226 return $ asset ->getKey ();
199227 }, $ searchResult ->getItems ());
200228 $ this ->assertEquals ($ keys , $ resultKeys );
201229
202- $ assetSearch = $ searchProvider
230+ $ assetSearch = $ this -> searchProvider
203231 ->createAssetSearch ()
204232 ->addModifier (new OrderByField ('system_fields.key.sort ' , SortDirection::DESC , false ))
205233 ;
206234
207- $ searchResult = $ searchService ->search ($ assetSearch );
208- $ resultKeys = array_map (function ($ asset ) {
235+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
236+ $ resultKeys = array_map (static function ($ asset ) {
209237 return $ asset ->getKey ();
210238 }, $ searchResult ->getItems ());
211239 $ this ->assertEquals ($ keys , $ resultKeys );
212240
213- $ assetSearch = $ searchProvider
241+ $ assetSearch = $ this -> searchProvider
214242 ->createAssetSearch ()
215243 ->addModifier (new OrderByField ('key ' , SortDirection::ASC , false ))
216244 ;
217245 $ this ->expectException (SearchFailedException::class);
218- $ searchService ->search ($ assetSearch );
246+ $ this -> assetSearchService ->search ($ assetSearch );
219247
220248 }
221249
0 commit comments