Files
Mangarr/tests/Domain/Manga/Application/QueryHandler/SearchMangaHandlerTest.php
ext.jeremy.guillot@maxicoffee.domains ae0eac3197 feat: SearchManga endpoint + tests
2025-02-10 21:33:34 +01:00

60 lines
1.9 KiB
PHP

<?php
namespace App\Tests\Domain\Manga\Application\QueryHandler;
use App\Domain\Manga\Application\Query\SearchManga;
use App\Domain\Manga\Application\QueryHandler\SearchMangaHandler;
use App\Domain\Manga\Domain\Model\Manga;
use App\Domain\Manga\Domain\Model\MangaCollection;
use App\Domain\Manga\Domain\Model\ValueObject\ExternalId;
use App\Domain\Manga\Domain\Model\ValueObject\MangaId;
use App\Domain\Manga\Domain\Model\ValueObject\MangaSlug;
use App\Domain\Manga\Domain\Model\ValueObject\MangaTitle;
use App\Tests\Domain\Manga\Adapter\InMemoryMangaProvider;
use PHPUnit\Framework\TestCase;
class SearchMangaHandlerTest extends TestCase
{
public function testHandleReturnsEmptyResultWhenNoMatches(): void
{
// Arrange
$provider = new InMemoryMangaProvider([]);
$handler = new SearchMangaHandler($provider);
// Act
$response = $handler->handle(new SearchManga('One Piece'));
// Assert
$this->assertEmpty($response->items);
}
public function testHandleReturnsMangaSearchResults(): void
{
// Arrange
$manga = new Manga(
new MangaId('123'),
new MangaTitle('One Piece'),
new MangaSlug('one-piece'),
'Description test',
'Eiichiro Oda',
1997,
['action', 'adventure'],
'ongoing',
new ExternalId('external-123'),
'http://example.com/image.jpg',
4.5
);
$provider = new InMemoryMangaProvider([$manga]);
$handler = new SearchMangaHandler($provider);
// Act
$response = $handler->handle(new SearchManga('One Piece'));
// Assert
$this->assertCount(1, $response->items);
$this->assertEquals('external-123', $response->items[0]->externalId);
$this->assertEquals('One Piece', $response->items[0]->title);
$this->assertEquals('one-piece', $response->items[0]->slug);
}
}