using Kompas.Mcp.Core.Documents;

namespace Kompas.Mcp.Tests.Integration;

/// <summary>Интеграция: жизненный цикл документов.</summary>
[Trait("Category", "Integration")]
[Collection(KompasCollection.Name)]
public sealed class DocumentTests : IntegrationTestBase
{
    private readonly DocumentService _docs;

    public DocumentTests(KompasFixture fx) : base(fx)
        => _docs = new DocumentService(fx.Session, fx.Dispatcher);

    [Fact]
    public async Task Create_part_saveas_close_roundtrip()
    {
        var created = await _docs.CreateAsync(KompasDocumentType.Part);
        Assert.Equal(KompasDocumentType.Part, created.Type);

        var path = TestPaths.NewFile(".m3d");
        await _docs.SaveAsAsync(path);

        var active = await _docs.GetActiveAsync();
        Assert.NotNull(active);
        Assert.Equal(path, active!.PathName, ignoreCase: true);

        var closed = await _docs.CloseAsync(save: false);
        Assert.True(closed);
        Assert.True(File.Exists(path));
    }

    [Fact]
    public async Task Create_fragment_reports_type()
    {
        await _docs.CreateAsync(KompasDocumentType.Fragment);
        var active = await _docs.GetActiveAsync();
        Assert.NotNull(active);
        Assert.Equal(KompasDocumentType.Fragment, active!.Type);
        await _docs.CloseAsync(save: false);
    }
}
