|
5 | 5 | use Closure;
|
6 | 6 | use DateTimeImmutable;
|
7 | 7 | use Illuminate\Database\Eloquent\Collection as EloquentCollection;
|
8 |
| -use Illuminate\Support\Collection as IlluminateCollection; |
| 8 | +use Illuminate\Support\Collection as LaravelCollection; |
| 9 | +use Illuminate\Support\LazyCollection; |
9 | 10 | use Laravel\Scout\Builder;
|
10 | 11 | use Laravel\Scout\Jobs\RemoveFromSearch;
|
11 | 12 | use Mockery as m;
|
12 |
| -use MongoDB\BSON\Document; |
13 | 13 | use MongoDB\BSON\UTCDateTime;
|
14 | 14 | use MongoDB\Collection;
|
15 | 15 | use MongoDB\Database;
|
16 | 16 | use MongoDB\Driver\CursorInterface;
|
| 17 | +use MongoDB\Laravel\Eloquent\Model; |
17 | 18 | use MongoDB\Laravel\Scout\ScoutEngine;
|
| 19 | +use MongoDB\Laravel\Tests\Scout\Models\ScoutUser; |
18 | 20 | use MongoDB\Laravel\Tests\Scout\Models\SearchableModel;
|
19 | 21 | use MongoDB\Laravel\Tests\TestCase;
|
20 |
| -use MongoDB\Model\BSONDocument; |
21 | 22 | use PHPUnit\Framework\Attributes\DataProvider;
|
22 | 23 |
|
23 | 24 | use function array_replace_recursive;
|
| 25 | +use function count; |
24 | 26 | use function serialize;
|
25 | 27 | use function unserialize;
|
26 | 28 |
|
@@ -402,46 +404,71 @@ public function testPaginate()
|
402 | 404 | $engine->paginate($builder, $perPage, $page);
|
403 | 405 | }
|
404 | 406 |
|
405 |
| - #[DataProvider('provideResultsForMapIds')] |
406 |
| - public function testLazyMapIds(array $results): void |
| 407 | + public function testMapMethodRespectsOrder() |
407 | 408 | {
|
408 |
| - $engine = new ScoutEngine(m::mock(Database::class), softDelete: false); |
409 |
| - |
410 |
| - $ids = $engine->lazyMap($results); |
411 |
| - |
412 |
| - $this->assertInstanceOf(IlluminateCollection::class, $ids); |
413 |
| - $this->assertEquals(['key_1', 'key_2'], $ids->all()); |
| 409 | + $database = m::mock(Database::class); |
| 410 | + $engine = new ScoutEngine($database, false); |
| 411 | + |
| 412 | + $model = m::mock(Model::class); |
| 413 | + $model->shouldReceive(['getScoutKeyName' => 'id']); |
| 414 | + $model->shouldReceive('queryScoutModelsByIds->get') |
| 415 | + ->andReturn(LaravelCollection::make([ |
| 416 | + new ScoutUser(['id' => 1]), |
| 417 | + new ScoutUser(['id' => 2]), |
| 418 | + new ScoutUser(['id' => 3]), |
| 419 | + new ScoutUser(['id' => 4]), |
| 420 | + ])); |
| 421 | + |
| 422 | + $builder = m::mock(Builder::class); |
| 423 | + |
| 424 | + $results = $engine->map($builder, [ |
| 425 | + ['_id' => 1, '__count' => 4], |
| 426 | + ['_id' => 2, '__count' => 4], |
| 427 | + ['_id' => 4, '__count' => 4], |
| 428 | + ['_id' => 3, '__count' => 4], |
| 429 | + ], $model); |
| 430 | + |
| 431 | + $this->assertEquals(4, count($results)); |
| 432 | + $this->assertEquals([ |
| 433 | + 0 => ['id' => 1], |
| 434 | + 1 => ['id' => 2], |
| 435 | + 2 => ['id' => 4], |
| 436 | + 3 => ['id' => 3], |
| 437 | + ], $results->toArray()); |
414 | 438 | }
|
415 | 439 |
|
416 |
| - public static function provideResultsForMapIds(): iterable |
| 440 | + public function testLazyMapMethodRespectsOrder() |
417 | 441 | {
|
418 |
| - yield 'array' => [ |
419 |
| - [ |
420 |
| - ['_id' => 'key_1', 'foo' => 'bar'], |
421 |
| - ['_id' => 'key_2', 'foo' => 'bar'], |
422 |
| - ], |
423 |
| - ]; |
424 |
| - |
425 |
| - yield 'object' => [ |
426 |
| - [ |
427 |
| - (object) ['_id' => 'key_1', 'foo' => 'bar'], |
428 |
| - (object) ['_id' => 'key_2', 'foo' => 'bar'], |
429 |
| - ], |
430 |
| - ]; |
431 |
| - |
432 |
| - yield Document::class => [ |
433 |
| - [ |
434 |
| - Document::fromPHP(['_id' => 'key_1', 'foo' => 'bar']), |
435 |
| - Document::fromPHP(['_id' => 'key_2', 'foo' => 'bar']), |
436 |
| - ], |
437 |
| - ]; |
438 |
| - |
439 |
| - yield BSONDocument::class => [ |
440 |
| - [ |
441 |
| - new BSONDocument(['_id' => 'key_1', 'foo' => 'bar']), |
442 |
| - new BSONDocument(['_id' => 'key_2', 'foo' => 'bar']), |
443 |
| - ], |
444 |
| - ]; |
| 442 | + $lazy = false; |
| 443 | + $database = m::mock(Database::class); |
| 444 | + $engine = new ScoutEngine($database, false); |
| 445 | + |
| 446 | + $model = m::mock(Model::class); |
| 447 | + $model->shouldReceive(['getScoutKeyName' => 'id']); |
| 448 | + $model->shouldReceive('queryScoutModelsByIds->cursor') |
| 449 | + ->andReturn(LazyCollection::make([ |
| 450 | + new ScoutUser(['id' => 1]), |
| 451 | + new ScoutUser(['id' => 2]), |
| 452 | + new ScoutUser(['id' => 3]), |
| 453 | + new ScoutUser(['id' => 4]), |
| 454 | + ])); |
| 455 | + |
| 456 | + $builder = m::mock(Builder::class); |
| 457 | + |
| 458 | + $results = $engine->lazyMap($builder, [ |
| 459 | + ['_id' => 1, '__count' => 4], |
| 460 | + ['_id' => 2, '__count' => 4], |
| 461 | + ['_id' => 4, '__count' => 4], |
| 462 | + ['_id' => 3, '__count' => 4], |
| 463 | + ], $model); |
| 464 | + |
| 465 | + $this->assertEquals(4, count($results)); |
| 466 | + $this->assertEquals([ |
| 467 | + 0 => ['id' => 1], |
| 468 | + 1 => ['id' => 2], |
| 469 | + 2 => ['id' => 4], |
| 470 | + 3 => ['id' => 3], |
| 471 | + ], $results->toArray()); |
445 | 472 | }
|
446 | 473 |
|
447 | 474 | public function testUpdate(): void
|
|
0 commit comments