Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 6b05310

Browse files
committed
Sort search results to have deterministic order
1 parent d2c8b22 commit 6b05310

File tree

2 files changed

+51
-69
lines changed

2 files changed

+51
-69
lines changed

‎.github/workflows/build-ci.yml‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ jobs:
6363
until docker exec --tty mongodb mongosh 127.0.0.1:27017 --eval "db.runCommand({ ping: 1 })"; do
6464
sleep 1
6565
done
66+
until docker exec --tty mongodb mongosh 127.0.0.1:27017 --eval "db.createCollection('connection_test') && db.getCollection('connection_test').createSearchIndex({mappings:{dynamic: true}})"; do
67+
sleep 1
68+
done
6669
6770
- name: "Show MongoDB server status"
6871
run: |

‎tests/Scout/ScoutIntegrationTest.php‎

Lines changed: 48 additions & 69 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,6 @@ protected function getEnvironmentSetUp($app): void
4242
$app['config']->set('scout.prefix', 'prefix_');
4343
}
4444

45-
public function testItCannotIndexInTheSameNamespace()
46-
{
47-
self::expectException(LogicException::class);
48-
self::expectExceptionMessage(sprintf(
49-
'The MongoDB Scout collection "%s.searchable_in_same_namespaces" must use a different collection from the collection name of the model "%s". Set the "scout.prefix" configuration or use a distinct MongoDB database',
50-
env('MONGODB_DATABASE', 'unittest'),
51-
SearchableInSameNamespace::class,
52-
),);
53-
54-
SearchableInSameNamespace::create(['name' => 'test']);
55-
}
56-
5745
public function setUp(): void
5846
{
5947
parent::setUp();
@@ -144,100 +132,79 @@ public function testItCanCreateTheCollection()
144132
#[Depends('testItCanCreateTheCollection')]
145133
public function testItCanUseBasicSearch()
146134
{
147-
$results = ScoutUser::search('lar')->take(10)->get();
135+
// All the search queries use "sort" option to ensure the results are deterministic
136+
$results = ScoutUser::search('lar')->take(10)->orderBy('id')->get();
148137

149138
self::assertSame([
150-
42 => 'Dax Larkin',
139+
1 => 'Laravel Framework',
151140
11 => 'Larry Casper',
141+
12 => 'Reta Larkin',
152142
20 => 'Prof. Larry Prosacco DVM',
153-
44 => 'Amos Larson Sr.',
154-
43 => 'Dana Larson Sr.',
155-
41 => 'Gudrun Larkin',
156-
40 => 'Otis Larson MD',
157143
39 => 'Linkwood Larkin',
158-
12 => 'Reta Larkin',
159-
1 => 'Laravel Framework',
144+
40 => 'Otis Larson MD',
145+
41 => 'Gudrun Larkin',
146+
42 => 'Dax Larkin',
147+
43 => 'Dana Larson Sr.',
148+
44 => 'Amos Larson Sr.',
160149
], $results->pluck('name', 'id')->all());
161150
}
162151

163152
#[Depends('testItCanCreateTheCollection')]
164153
public function testItCanUseBasicSearchWithQueryCallback()
165154
{
166-
$results = ScoutUser::search('lar')->take(10)->query(function ($query) {
155+
$results = ScoutUser::search('lar')->take(10)->orderBy('id')->query(function ($query) {
167156
return $query->whereNotNull('email_verified_at');
168157
})->get();
169158

170159
self::assertSame([
160+
1 => 'Laravel Framework',
161+
12 => 'Reta Larkin',
162+
40 => 'Otis Larson MD',
163+
41 => 'Gudrun Larkin',
171164
42 => 'Dax Larkin',
172-
44 => 'Amos Larson Sr.',
173165
43 => 'Dana Larson Sr.',
174-
41 => 'Gudrun Larkin',
175-
40 => 'Otis Larson MD',
176-
12 => 'Reta Larkin',
177-
1 => 'Laravel Framework',
166+
44 => 'Amos Larson Sr.',
178167
], $results->pluck('name', 'id')->all());
179168
}
180169

181170
#[Depends('testItCanCreateTheCollection')]
182171
public function testItCanUseBasicSearchToFetchKeys()
183172
{
184-
$results = ScoutUser::search('lar')->take(10)->keys();
173+
$results = ScoutUser::search('lar')->orderBy('id')->take(10)->keys();
185174

186-
self::assertSame([
187-
42,
188-
11,
189-
20,
190-
44,
191-
43,
192-
41,
193-
40,
194-
39,
195-
12,
196-
1,
197-
], $results->all());
175+
self::assertSame([1, 11, 12, 20, 39, 40, 41, 42, 43, 44], $results->all());
198176
}
199177

200178
#[Depends('testItCanCreateTheCollection')]
201179
public function testItCanUseBasicSearchWithQueryCallbackToFetchKeys()
202180
{
203-
$results = ScoutUser::search('lar')->take(10)->query(function ($query) {
181+
$results = ScoutUser::search('lar')->take(10)->orderBy('id', 'desc')->query(function ($query) {
204182
return $query->whereNotNull('email_verified_at');
205183
})->keys();
206184

207-
self::assertSame([
208-
42,
209-
11,
210-
20,
211-
44,
212-
43,
213-
41,
214-
40,
215-
39,
216-
12,
217-
1,
218-
], $results->all());
185+
self::assertSame([44, 43, 42, 41, 40, 39, 20, 12, 11, 1], $results->all());
219186
}
220187

221188
#[Depends('testItCanCreateTheCollection')]
222189
public function testItCanUsePaginatedSearch()
223190
{
224-
$page1 = ScoutUser::search('lar')->take(10)->paginate(5, 'page', 1);
225-
$page2 = ScoutUser::search('lar')->take(10)->paginate(5, 'page', 2);
191+
$page1 = ScoutUser::search('lar')->take(10)->orderBy('id')->paginate(5, 'page', 1);
192+
$page2 = ScoutUser::search('lar')->take(10)->orderBy('id')->paginate(5, 'page', 2);
226193

227194
self::assertSame([
228-
42 => 'Dax Larkin',
195+
1 => 'Laravel Framework',
229196
11 => 'Larry Casper',
197+
12 => 'Reta Larkin',
230198
20 => 'Prof. Larry Prosacco DVM',
231-
44 => 'Amos Larson Sr.',
232-
43 => 'Dana Larson Sr.',
199+
39 => 'Linkwood Larkin',
233200
], $page1->pluck('name', 'id')->all());
234201

235202
self::assertSame([
236-
41 => 'Gudrun Larkin',
237203
40 => 'Otis Larson MD',
238-
39 => 'Linkwood Larkin',
239-
12 => 'Reta Larkin',
240-
1 => 'Laravel Framework',
204+
41 => 'Gudrun Larkin',
205+
42 => 'Dax Larkin',
206+
43 => 'Dana Larson Sr.',
207+
44 => 'Amos Larson Sr.',
241208
], $page2->pluck('name', 'id')->all());
242209
}
243210

@@ -248,20 +215,32 @@ public function testItCanUsePaginatedSearchWithQueryCallback()
248215
return $query->whereNotNull('email_verified_at');
249216
};
250217

251-
$page1 = ScoutUser::search('lar')->take(10)->query($queryCallback)->paginate(5, 'page', 1);
252-
$page2 = ScoutUser::search('lar')->take(10)->query($queryCallback)->paginate(5, 'page', 2);
218+
$page1 = ScoutUser::search('lar')->take(10)->orderBy('id')->query($queryCallback)->paginate(5, 'page', 1);
219+
$page2 = ScoutUser::search('lar')->take(10)->orderBy('id')->query($queryCallback)->paginate(5, 'page', 2);
253220

254221
self::assertSame([
255-
42 => 'Dax Larkin',
256-
44 => 'Amos Larson Sr.',
257-
43 => 'Dana Larson Sr.',
222+
1 => 'Laravel Framework',
223+
12 => 'Reta Larkin',
258224
], $page1->pluck('name', 'id')->all());
259225

260226
self::assertSame([
261-
41 => 'Gudrun Larkin',
262227
40 => 'Otis Larson MD',
263-
12 => 'Reta Larkin',
264-
1 => 'Laravel Framework',
228+
41 => 'Gudrun Larkin',
229+
42 => 'Dax Larkin',
230+
43 => 'Dana Larson Sr.',
231+
44 => 'Amos Larson Sr.',
265232
], $page2->pluck('name', 'id')->all());
266233
}
234+
235+
public function testItCannotIndexInTheSameNamespace()
236+
{
237+
self::expectException(LogicException::class);
238+
self::expectExceptionMessage(sprintf(
239+
'The MongoDB Scout collection "%s.searchable_in_same_namespaces" must use a different collection from the collection name of the model "%s". Set the "scout.prefix" configuration or use a distinct MongoDB database',
240+
env('MONGODB_DATABASE', 'unittest'),
241+
SearchableInSameNamespace::class,
242+
),);
243+
244+
SearchableInSameNamespace::create(['name' => 'test']);
245+
}
267246
}

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /