Files
kompas3d-mcp/tests/Kompas.Mcp.Tests/Error3dTests.cs
T
mikhail 28d2ae3868 feat(inspection): структурное «зрение» модели — осмотр без снимка
Новый слой «модель как данные» (приоритетный над model_snapshot):
- describe_model — структурный «паспорт» детали одним вызовом (габарит,
  МЦХ, тела, сводка топологии, дерево построения с параметрами, переменные)
- list_features / list_bodies / list_variables
- describe_face / describe_edge (drill-down по индексу)
- measure (расстояние/угол между гранями/рёбрами/вершинами)
- model_snapshot понижен до fallback для визуально-пространственных вопросов

Реализация: ModelInspectionService (COM) + чистый InspectionText (рендер,
группировка, детект «импорт без истории») + record-модели; InspectionTools.
Дерево читается через ksPart.GetFeature()->SubFeatureCollection; точный тип
и параметры операций берутся из GetObject()->GetDefinition() (ksFeature.type
отдаёт лишь coarse o3d_entity).

Снимок дерева также включает слои conversion (STEP), editing (move_face/solid)
и validation, развивавшиеся параллельно. Полный прогон: 61 тест зелёный,
43 MCP-инструмента. Документация (README, ARCHITECTURE, OPEN_QUESTIONS,
CLAUDE.md, presentation.html) синхронизирована.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 18:44:38 +03:00

26 lines
923 B
C#

using Kompas.Mcp.Core.Validation;
namespace Kompas.Mcp.Tests;
/// <summary>Юнит-тесты расшифровки кодов ошибок построения (ErrorType3d). COM не требуется.</summary>
[Trait("Category", "Unit")]
public sealed class Error3dTests
{
[Theory]
[InlineData(123, "пересек")]
[InlineData(130, "топологи")]
[InlineData(144, "невозможн")]
[InlineData(179, "контур")]
[InlineData(185, "не найден")]
public void Describe_contains_meaningful_text(int code, string fragment)
=> Assert.Contains(fragment, Errors3d.Describe(code), StringComparison.OrdinalIgnoreCase);
[Fact]
public void Unknown_code_falls_back_to_number()
=> Assert.Contains("777", Errors3d.Describe(777));
[Fact]
public void Zero_code_means_no_error()
=> Assert.True(Errors3d.IsOk(0) && !Errors3d.IsOk(144));
}