using Kompas.Mcp.Core.Documents;
using Kompas.Mcp.Core.Drawings;
using Kompas.Mcp.Core.Modeling;
namespace Kompas.Mcp.Tests.Integration;
/// Интеграция: заполнение основной надписи чертежа (API7 IStamp.Text).
[Trait("Category", "Integration")]
[Collection(KompasCollection.Name)]
public sealed class DrawingStampTests : IntegrationTestBase
{
private readonly DocumentService _docs;
private readonly DrawingService _drawing;
private readonly PartModeler _modeler;
public DrawingStampTests(KompasFixture fx) : base(fx)
{
_docs = new DocumentService(fx.Session, fx.Dispatcher);
_drawing = new DrawingService(fx.Session, fx.Dispatcher);
_modeler = new PartModeler(fx.Session, fx.Dispatcher);
}
[Fact]
public async Task Fills_and_reads_back_title_block_cells()
{
await _docs.CreateAsync(KompasDocumentType.Drawing);
try
{
var filled = await _drawing.FillTitleBlockAsync(
designation: "ДЕТАЛЬ.001", name: "Кронштейн", material: "Сталь 45");
Assert.Equal(3, filled);
// Явный reread каждой графы (графа 2/1/3).
Assert.Equal("ДЕТАЛЬ.001", await _drawing.ReadStampCellAsync(2));
Assert.Equal("Кронштейн", await _drawing.ReadStampCellAsync(1));
Assert.Equal("Сталь 45", await _drawing.ReadStampCellAsync(3));
}
finally { await _docs.CloseAsync(save: false); }
}
[Fact]
public async Task Overwrites_existing_cell_text()
{
await _docs.CreateAsync(KompasDocumentType.Drawing);
try
{
await _drawing.FillTitleBlockAsync(designation: "СТАРОЕ.000");
await _drawing.FillTitleBlockAsync(designation: "НОВОЕ.111");
// Перезапись, не дописывание.
Assert.Equal("НОВОЕ.111", await _drawing.ReadStampCellAsync(2));
}
finally { await _docs.CloseAsync(save: false); }
}
[Fact]
public async Task Empty_input_throws()
{
await _docs.CreateAsync(KompasDocumentType.Drawing);
try
{
await Assert.ThrowsAsync(
() => _drawing.FillTitleBlockAsync(null, " ", null));
}
finally { await _docs.CloseAsync(save: false); }
}
[Fact]
public async Task Rejects_non_drawing_document()
{
await _docs.CreateAsync(KompasDocumentType.Part);
try
{
// Деталь — не чертёж: FillTitleBlock должен бросить.
var s = await _modeler.OpenSketchAsync(BasePlane.XOY);
await _modeler.AddRectangleAsync(s, 0, 0, 10, 10);
await _modeler.CloseSketchAsync(s);
await _modeler.ExtrudeAsync(s, depth: 5);
await Assert.ThrowsAsync(
() => _drawing.FillTitleBlockAsync(designation: "X"));
}
finally { await _docs.CloseAsync(save: false); }
}
}