Files
kompas3d-mcp/tests/Kompas.Mcp.Tests/Integration/DrawingTechReqTests.cs
T
mikhail 5272066bef feat(drawing): текстовые обозначения — шероховатость, текст, тех. требования
drawing_add_rough (знак шероховатости: ISymbols2DContainer.Roughs + IRoughParams,
SignType ksRoughSignEnum, значение Ra/Rz через RoughParamText.Str),
drawing_add_text (свободная надпись: IDrawingContainer.DrawingTexts + IText.Str),
drawing_set_technical_requirements (блок тех. требований уровня документа:
IDrawingDocument.TechnicalDemand.Text).

- DrawingService: AddRoughAsync/AddTextAsync/SetTechnicalRequirementsAsync +
  ReadTechnicalRequirementsAsync + счётчики; RequireDrawingContainer/RequireTechnicalDemand
- RoughSignType (enum + Parse/ToKompas), DrawingAnnotationResult (Value read-back из COM)
- RequireNonEmptyText в DrawingValidation
- 13 unit + 13 интеграционных тестов (всего 267 зелёных), сборка Release чистая

Спайк подтвердил: значение шероховатости через IRoughParams.RoughParamText.Str (round-trip);
текст НЕ в IView.ObjectCount (счёт по DrawingTexts.Count); тех. требования IsCreated False→True
при первом Text.Str+Update, многострочно через \n. Ревью Codex спека учтено (height убран —
это высота блока, не шрифт; guards; read-back возврат). Спек — docs/superpowers/specs/.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-27 21:13:11 +03:00

77 lines
2.7 KiB
C#

using Kompas.Mcp.Core.Documents;
using Kompas.Mcp.Core.Drawings;
namespace Kompas.Mcp.Tests.Integration;
/// <summary>Интеграция: технические требования чертежа (API7 IDrawingDocument.TechnicalDemand).</summary>
[Trait("Category", "Integration")]
[Collection(KompasCollection.Name)]
public sealed class DrawingTechReqTests : IntegrationTestBase
{
private readonly DocumentService _docs;
private readonly DrawingService _drawing;
public DrawingTechReqTests(KompasFixture fx) : base(fx)
{
_docs = new DocumentService(fx.Session, fx.Dispatcher);
_drawing = new DrawingService(fx.Session, fx.Dispatcher);
}
[Fact]
public async Task Requirements_are_set_and_read_back()
{
await _docs.CreateAsync(KompasDocumentType.Drawing);
try
{
var text = "1. Общие допуски по ГОСТ 30893.1.\n2. Острые кромки притупить.";
var lines = await _drawing.SetTechnicalRequirementsAsync(text);
Assert.Equal(2, lines);
var readBack = await _drawing.ReadTechnicalRequirementsAsync();
Assert.Contains("Общие допуски", readBack);
Assert.Contains("Острые кромки", readBack);
}
finally { await _docs.CloseAsync(save: false); }
}
[Fact]
public async Task Overwrite_replaces_previous()
{
await _docs.CreateAsync(KompasDocumentType.Drawing);
try
{
await _drawing.SetTechnicalRequirementsAsync("1. Первая редакция.");
await _drawing.SetTechnicalRequirementsAsync("1. Вторая редакция.\n2. Ещё пункт.");
var readBack = await _drawing.ReadTechnicalRequirementsAsync();
Assert.Contains("Вторая редакция", readBack);
Assert.DoesNotContain("Первая редакция", readBack);
}
finally { await _docs.CloseAsync(save: false); }
}
[Fact]
public async Task Empty_text_throws()
{
await _docs.CreateAsync(KompasDocumentType.Drawing);
try
{
await Assert.ThrowsAsync<ArgumentException>(() =>
_drawing.SetTechnicalRequirementsAsync(" "));
}
finally { await _docs.CloseAsync(save: false); }
}
[Fact]
public async Task Active_document_not_drawing_throws()
{
await _docs.CreateAsync(KompasDocumentType.Part); // деталь, не чертёж
try
{
await Assert.ThrowsAsync<InvalidOperationException>(() =>
_drawing.SetTechnicalRequirementsAsync("1. Требование."));
}
finally { await _docs.CloseAsync(save: false); }
}
}