39 lines
1.3 KiB
PHP
39 lines
1.3 KiB
PHP
<?php
|
|
|
|
namespace Tests\Unit\Movies\Entities;
|
|
|
|
use App\Modules\Movies\Models\{Actor, Genre, Movie};
|
|
use App\Modules\Movies\Services\Browse\Entities\GetActorWithMoviesService;
|
|
use Illuminate\Foundation\Testing\RefreshDatabase;
|
|
use Tests\TestCase;
|
|
|
|
class GetActorWithMoviesServiceTest extends TestCase
|
|
{
|
|
use RefreshDatabase;
|
|
|
|
public function test_returns_entity_and_paginated_movies_and_filters_by_q(): void
|
|
{
|
|
$actor = Actor::factory()->create(['name' => 'Bruce Willis']);
|
|
$genre = Genre::factory()->create(['name' => 'Action']);
|
|
|
|
$m1 = Movie::factory()->create(['title' => 'Alpha']);
|
|
$m2 = Movie::factory()->create(['title' => 'Beta']);
|
|
$m1->actors()->sync([$actor->id]);
|
|
$m2->actors()->sync([$actor->id]);
|
|
$m1->genres()->sync([$genre->id]);
|
|
$m2->genres()->sync([$genre->id]);
|
|
|
|
$svc = new GetActorWithMoviesService();
|
|
$res = $svc->handle($actor->id, ['per_page' => 20]);
|
|
|
|
$this->assertSame($actor->id, $res['entity']->id);
|
|
$this->assertSame(2, $res['movies']->total());
|
|
$first = $res['movies']->items()[0];
|
|
$this->assertTrue($first->relationLoaded('genres'));
|
|
|
|
// Filter by title
|
|
$res2 = $svc->handle($actor->id, ['q' => 'Alpha']);
|
|
$this->assertSame(1, $res2['movies']->total());
|
|
}
|
|
}
|