PIMS/tests/Unit/Movies/Entities/GetStudioWithMoviesServiceTest.php

38 lines
1.3 KiB
PHP

<?php
namespace Tests\Unit\Movies\Entities;
use App\Modules\Movies\Models\{Studio, Genre, Movie};
use App\Modules\Movies\Services\Browse\Entities\GetStudioWithMoviesService;
use Illuminate\Foundation\Testing\RefreshDatabase;
use Tests\TestCase;
class GetStudioWithMoviesServiceTest extends TestCase
{
use RefreshDatabase;
public function test_returns_entity_and_paginated_movies_and_filters_by_q(): void
{
$studio = Studio::factory()->create(['name' => 'Lightstorm']);
$genre = Genre::factory()->create(['name' => 'Sci-Fi']);
$m1 = Movie::factory()->create(['title' => 'The Abyss']);
$m2 = Movie::factory()->create(['title' => 'Aliens']);
$m1->studios()->sync([$studio->id]);
$m2->studios()->sync([$studio->id]);
$m1->genres()->sync([$genre->id]);
$m2->genres()->sync([$genre->id]);
$svc = new GetStudioWithMoviesService();
$res = $svc->handle($studio->id, ['per_page' => 20]);
$this->assertSame($studio->id, $res['entity']->id);
$this->assertSame(2, $res['movies']->total());
$first = $res['movies']->items()[0];
$this->assertTrue($first->relationLoaded('genres'));
$res2 = $svc->handle($studio->id, ['q' => 'Aliens']);
$this->assertSame(1, $res2['movies']->total());
}
}