<?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);
    }
} 