foxygit / digitalskrivare_merge Log in
commits tags

/tests/Remiss.Core.Tests/PdfPipelineTests.cs · 1.72 KB

raw
using PdfSharp.Pdf.IO;
using Remiss.Core.Pdf;
using Xunit;

namespace Remiss.Core.Tests;

public sealed class PdfPipelineTests : IDisposable
{
    private readonly string _dir = Path.Combine(Path.GetTempPath(), "remiss-tests-" + Guid.NewGuid().ToString("N"));

    public PdfPipelineTests() => Directory.CreateDirectory(_dir);

    public void Dispose()
    {
        try { Directory.Delete(_dir, recursive: true); } catch { /* ignore */ }
    }

    [Fact]
    public void CoverPageGenerator_producesReadableSinglePagePdf()
    {
        var path = Path.Combine(_dir, "cover.pdf");

        CoverPageGenerator.Generate(path, new CoverInfo("Hudmottagningen Sahlgrenska", "SE2321000131-E000000000001", DateTime.Now));

        Assert.True(File.Exists(path));
        using var doc = PdfReader.Open(path, PdfDocumentOpenMode.Import);
        Assert.Equal(1, doc.PageCount);
    }

    [Fact]
    public void PdfMerger_concatenatesPagesInOrder()
    {
        var cover = Path.Combine(_dir, "cover.pdf");
        var body = Path.Combine(_dir, "body.pdf");
        var merged = Path.Combine(_dir, "merged.pdf");

        CoverPageGenerator.Generate(cover, new CoverInfo("A", "hsa-a", DateTime.Now));
        // Återanvänd generatorn för att skapa en 1-sidig "remiss".
        CoverPageGenerator.Generate(body, new CoverInfo("B", "hsa-b", DateTime.Now));

        PdfMerger.Merge(merged, cover, body);

        using var doc = PdfReader.Open(merged, PdfDocumentOpenMode.Import);
        Assert.Equal(2, doc.PageCount);
    }

    [Fact]
    public void PdfMerger_throwsWhenSourceMissing()
    {
        var merged = Path.Combine(_dir, "merged.pdf");
        Assert.Throws<FileNotFoundException>(() => PdfMerger.Merge(merged, Path.Combine(_dir, "nope.pdf")));
    }
}