15
15
16
16
namespace Pimcore \Bundle \GenericDataIndexBundle \Tests \Functional \Search \Modifier \Sort ;
17
17
18
+ use Codeception \Test \Unit ;
18
19
use Pimcore \Bundle \GenericDataIndexBundle \Enum \Search \SortDirection ;
19
20
use Pimcore \Bundle \GenericDataIndexBundle \Exception \OpenSearch \ResultWindowTooLargeException ;
20
21
use Pimcore \Bundle \GenericDataIndexBundle \Exception \OpenSearch \SearchFailedException ;
21
22
use Pimcore \Bundle \GenericDataIndexBundle \Model \Search \Modifier \Sort \OrderByField ;
22
23
use Pimcore \Bundle \GenericDataIndexBundle \Model \Search \Modifier \Sort \Tree \OrderByFullPath ;
24
+ use Pimcore \Bundle \GenericDataIndexBundle \Model \Search \Modifier \Sort \Tree \OrderByIndexField ;
23
25
use Pimcore \Bundle \GenericDataIndexBundle \SearchIndexAdapter \OpenSearch \Search \Modifier \Sort \TreeSortHandlers ;
24
26
use Pimcore \Bundle \GenericDataIndexBundle \Service \Search \SearchService \Asset \AssetSearchServiceInterface ;
27
+ use Pimcore \Bundle \GenericDataIndexBundle \Service \Search \SearchService \DataObject \DataObjectSearchServiceInterface ;
25
28
use Pimcore \Bundle \GenericDataIndexBundle \Service \Search \SearchService \SearchProviderInterface ;
26
29
use Pimcore \Bundle \GenericDataIndexBundle \Service \SearchIndex \SearchIndexConfigServiceInterface ;
30
+ use Pimcore \Bundle \GenericDataIndexBundle \Tests \IndexTester ;
27
31
use Pimcore \Tests \Support \Util \TestHelper ;
28
32
29
- final class SortModifierTest extends \ Codeception \ Test \ Unit
33
+ final class SortModifierTest extends Unit
30
34
{
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 ;
35
42
36
43
private bool $ indexSettingsChanged = false ;
37
44
38
- protected function _before ()
45
+ protected function _before (): void
39
46
{
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
+ );
40
54
$ this ->tester ->enableSynchronousProcessing ();
41
55
}
42
56
43
- protected function _after ()
57
+ protected function _after (): void
44
58
{
45
59
if ($ this ->indexSettingsChanged ) {
46
60
$ this ->indexSettingsChanged = false ;
@@ -53,7 +67,7 @@ protected function _after()
53
67
$ this ->tester ->flushIndex ();
54
68
}
55
69
56
- public function testHandleSortByPageNumber ()
70
+ public function testHandleSortByPageNumber (): void
57
71
{
58
72
$ assets = $ this ->createAssets ();
59
73
$ fullPaths = [];
@@ -62,11 +76,7 @@ public function testHandleSortByPageNumber()
62
76
}
63
77
/** @var SearchIndexConfigServiceInterface $searchIndexConfigService */
64
78
$ 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 */
70
80
$ treeSort = $ this ->tester ->grabService (TreeSortHandlers::class);
71
81
72
82
// Make sure that sorting by page number is executed
@@ -77,43 +87,43 @@ public function testHandleSortByPageNumber()
77
87
78
88
// Sort direction of the result should remain same even though the search order was reversed
79
89
rsort ($ fullPaths );
80
- $ assetSearch = $ searchProvider
90
+ $ assetSearch = $ this -> searchProvider
81
91
->createAssetSearch ()
82
92
->setPageSize (2 )
83
93
->setPage (5 )
84
94
->addModifier (new OrderByFullPath (SortDirection::DESC ))
85
95
;
86
- $ searchResult = $ searchService ->search ($ assetSearch );
96
+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
87
97
88
98
$ this ->assertCount (2 , $ searchResult ->getItems ());
89
99
$ this ->assertSame ($ fullPaths [8 ], $ searchResult ->getItems ()[0 ]->getFullPath ());
90
100
$ this ->assertSame ($ fullPaths [9 ], $ searchResult ->getItems ()[1 ]->getFullPath ());
91
101
92
102
sort ($ fullPaths );
93
- $ assetSearch = $ searchProvider
103
+ $ assetSearch = $ this -> searchProvider
94
104
->createAssetSearch ()
95
105
->setPageSize (2 )
96
106
->setPage (5 )
97
107
->addModifier (new OrderByFullPath ())
98
108
;
99
- $ searchResult = $ searchService ->search ($ assetSearch );
109
+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
100
110
$ this ->assertCount (2 , $ searchResult ->getItems ());
101
111
$ this ->assertSame ($ fullPaths [8 ], $ searchResult ->getItems ()[0 ]->getFullPath ());
102
112
$ this ->assertSame ($ fullPaths [9 ], $ searchResult ->getItems ()[1 ]->getFullPath ());
103
113
104
114
//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
106
116
->createAssetSearch ()
107
117
->setPageSize (2 )
108
118
->setPage (5 )
109
119
;
110
120
111
121
$ this ->expectException (ResultWindowTooLargeException::class);
112
- $ searchService ->search ($ assetSearch );
122
+ $ this -> assetSearchService ->search ($ assetSearch );
113
123
}
114
124
115
125
// tests
116
- public function testOrderByFullPath ()
126
+ public function testOrderByFullPath (): void
117
127
{
118
128
$ asset = TestHelper::createImageAsset ();
119
129
$ asset2 = TestHelper::createImageAsset ();
@@ -126,41 +136,64 @@ public function testOrderByFullPath()
126
136
];
127
137
sort ($ fullPaths );
128
138
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
135
140
->createAssetSearch ()
136
141
->addModifier (new OrderByFullPath ())
137
142
;
138
- $ searchResult = $ searchService ->search ($ assetSearch );
143
+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
139
144
140
- $ resultFullPaths = array_map (function ($ asset ) {
145
+ $ resultFullPaths = array_map (static function ($ asset ) {
141
146
return $ asset ->getFullPath ();
142
147
}, $ searchResult ->getItems ());
143
148
144
149
$ this ->assertEquals ($ fullPaths , $ resultFullPaths );
145
150
146
151
rsort ($ fullPaths );
147
152
148
- $ assetSearch = $ searchProvider
153
+ $ assetSearch = $ this -> searchProvider
149
154
->createAssetSearch ()
150
155
->addModifier (new OrderByFullPath (SortDirection::DESC ))
151
156
;
152
- $ searchResult = $ searchService ->search ($ assetSearch );
157
+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
153
158
154
- $ resultFullPaths = array_map (function ($ asset ) {
159
+ $ resultFullPaths = array_map (static function ($ asset ) {
155
160
return $ asset ->getFullPath ();
156
161
}, $ searchResult ->getItems ());
157
162
158
163
$ this ->assertEquals ($ fullPaths , $ resultFullPaths );
159
164
160
165
}
161
166
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
+
162
195
// tests
163
- public function testOrderByField ()
196
+ public function testOrderByField (): void
164
197
{
165
198
$ asset = TestHelper::createImageAsset ();
166
199
$ asset2 = TestHelper::createImageAsset ();
@@ -173,49 +206,44 @@ public function testOrderByField()
173
206
];
174
207
sort ($ keys );
175
208
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
182
210
->createAssetSearch ()
183
211
->addModifier (new OrderByField ('key ' ))
184
212
;
185
- $ searchResult = $ searchService ->search ($ assetSearch );
186
- $ resultKeys = array_map (function ($ asset ) {
213
+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
214
+ $ resultKeys = array_map (static function ($ asset ) {
187
215
return $ asset ->getKey ();
188
216
}, $ searchResult ->getItems ());
189
217
$ this ->assertEquals ($ keys , $ resultKeys );
190
218
191
219
rsort ($ keys );
192
- $ assetSearch = $ searchProvider
220
+ $ assetSearch = $ this -> searchProvider
193
221
->createAssetSearch ()
194
222
->addModifier (new OrderByField ('key ' , SortDirection::DESC ))
195
223
;
196
- $ searchResult = $ searchService ->search ($ assetSearch );
197
- $ resultKeys = array_map (function ($ asset ) {
224
+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
225
+ $ resultKeys = array_map (static function ($ asset ) {
198
226
return $ asset ->getKey ();
199
227
}, $ searchResult ->getItems ());
200
228
$ this ->assertEquals ($ keys , $ resultKeys );
201
229
202
- $ assetSearch = $ searchProvider
230
+ $ assetSearch = $ this -> searchProvider
203
231
->createAssetSearch ()
204
232
->addModifier (new OrderByField ('system_fields.key.sort ' , SortDirection::DESC , false ))
205
233
;
206
234
207
- $ searchResult = $ searchService ->search ($ assetSearch );
208
- $ resultKeys = array_map (function ($ asset ) {
235
+ $ searchResult = $ this -> assetSearchService ->search ($ assetSearch );
236
+ $ resultKeys = array_map (static function ($ asset ) {
209
237
return $ asset ->getKey ();
210
238
}, $ searchResult ->getItems ());
211
239
$ this ->assertEquals ($ keys , $ resultKeys );
212
240
213
- $ assetSearch = $ searchProvider
241
+ $ assetSearch = $ this -> searchProvider
214
242
->createAssetSearch ()
215
243
->addModifier (new OrderByField ('key ' , SortDirection::ASC , false ))
216
244
;
217
245
$ this ->expectException (SearchFailedException::class);
218
- $ searchService ->search ($ assetSearch );
246
+ $ this -> assetSearchService ->search ($ assetSearch );
219
247
220
248
}
221
249
0 commit comments