Skip to content

Commit 1ffcc19

Browse files
committed
Update tests for map/lazyMap
1 parent b22192b commit 1ffcc19

File tree

1 file changed

+66
-39
lines changed

1 file changed

+66
-39
lines changed

tests/Scout/ScoutEngineTest.php

Lines changed: 66 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -5,22 +5,24 @@
55
use Closure;
66
use DateTimeImmutable;
77
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;
910
use Laravel\Scout\Builder;
1011
use Laravel\Scout\Jobs\RemoveFromSearch;
1112
use Mockery as m;
12-
use MongoDB\BSON\Document;
1313
use MongoDB\BSON\UTCDateTime;
1414
use MongoDB\Collection;
1515
use MongoDB\Database;
1616
use MongoDB\Driver\CursorInterface;
17+
use MongoDB\Laravel\Eloquent\Model;
1718
use MongoDB\Laravel\Scout\ScoutEngine;
19+
use MongoDB\Laravel\Tests\Scout\Models\ScoutUser;
1820
use MongoDB\Laravel\Tests\Scout\Models\SearchableModel;
1921
use MongoDB\Laravel\Tests\TestCase;
20-
use MongoDB\Model\BSONDocument;
2122
use PHPUnit\Framework\Attributes\DataProvider;
2223

2324
use function array_replace_recursive;
25+
use function count;
2426
use function serialize;
2527
use function unserialize;
2628

@@ -402,46 +404,71 @@ public function testPaginate()
402404
$engine->paginate($builder, $perPage, $page);
403405
}
404406

405-
#[DataProvider('provideResultsForMapIds')]
406-
public function testLazyMapIds(array $results): void
407+
public function testMapMethodRespectsOrder()
407408
{
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());
414438
}
415439

416-
public static function provideResultsForMapIds(): iterable
440+
public function testLazyMapMethodRespectsOrder()
417441
{
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());
445472
}
446473

447474
public function testUpdate(): void

0 commit comments

Comments
 (0)