Files
mikhail 742a97177b feat: drawing_fill_title_block — основная надпись чертежа (API7)
Веха 2D-ЧЕРТЁЖ, инкремент 2 (оформление). DrawingService.FillTitleBlockAsync:
LayoutSheets.ItemByNumber[1].Stamp.Text[id].Str = text → Update(). Enum StampField
→ номер графы ГОСТ (designation=2, name=1, material=3). Заполнение нескольких
граф за вызов; перезапись (Str замещает, Clear не нужен — подтверждено спайком).
Новый инструмент drawing_fill_title_block; ReadStampCellAsync для проверки.

Ревью Codex спека учтено: Update() результат проверяется; null-checks
(LayoutSheets/sheet/Stamp); RequireActiveDrawing выделен (сохраняет cast-проверку);
ColumnId switch с дефолтным throw; счётчик = непустые поля; name=графа 1 однозначно.

Валидация — чистый StampFields (ColumnId + Collect). Тесты: +7 unit (StampFields),
+4 integration (DrawingStampTests: заполнение+reread 3 граф, перезапись, пустой
ввод, не-чертёж). Итого 123 unit + 65 integration = 188.

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

42 lines
1.4 KiB
C#

using Kompas.Mcp.Core.Drawings;
namespace Kompas.Mcp.Tests;
[Trait("Category", "Unit")]
public sealed class StampFieldsTests
{
[Theory]
[InlineData(StampField.Designation, 2)]
[InlineData(StampField.Name, 1)]
[InlineData(StampField.Material, 3)]
public void ColumnId_maps_known_fields(StampField field, int expected)
=> Assert.Equal(expected, StampFields.ColumnId(field));
[Fact]
public void ColumnId_throws_on_unknown()
=> Assert.Throws<ArgumentOutOfRangeException>(() => StampFields.ColumnId((StampField)999));
[Fact]
public void Collect_skips_null_empty_and_whitespace()
=> Assert.Empty(StampFields.Collect(null, "", " "));
[Fact]
public void Collect_trims_and_maps_provided_fields()
{
var result = StampFields.Collect(" ДЕТАЛЬ.001 ", null, "Сталь 45");
Assert.Equal(2, result.Count);
Assert.Contains(result, t => t.ColumnId == 2 && t.Text == "ДЕТАЛЬ.001"); // designation
Assert.Contains(result, t => t.ColumnId == 3 && t.Text == "Сталь 45"); // material
Assert.DoesNotContain(result, t => t.ColumnId == 1); // name не задан
}
[Fact]
public void Collect_includes_name_as_column_1()
{
var result = StampFields.Collect(null, "Кронштейн", null);
Assert.Single(result);
Assert.Equal((1, "Кронштейн"), result[0]);
}
}