using MangaReader.Core.Data;
using MangaReader.Core.Metadata;
using MangaReader.Core.Pipeline;
using MangaReader.Tests.Utilities;

namespace MangaReader.Tests.Pipeline;

public class MangaPipelineTests(TestDbContextFactory factory) : IClassFixture<TestDbContextFactory>
{
    [Fact]
    public async Task RunAsync_SavesMangaTitlesChaptersGenres()
    {
        using MangaContext context = factory.CreateContext();
        var pipeline = new MangaPipeline(context);

        var sourceManga = new SourceManga
        {
            Title = "Fullmetal Alchemist",
            AlternateTitles =
            [
                new()
                {
                    Title = "Hagane no Renkinjutsushi",
                    Language = SourceMangaLanguage.Romanji
                }
            ],
            Genres = ["Action", "Adventure"],
            Chapters =
            [
                new()
                {
                    Number = 1,
                    Title = "The Two Alchemists",
                    Volume = 1,
                    Url = string.Empty
                }
            ]
        };

        MangaPipelineRequest request = new()
        {
            SourceName = "MySource",
            SourceManga = sourceManga
        };

        await pipeline.RunAsync(request);

        Assert.Single(context.Mangas);
        Assert.Single(context.MangaTitles);
        Assert.Equal(2, context.Genres.Count());
        Assert.Single(context.MangaChapters);
    }
}