using System; using System.Threading.Tasks; using Microsoft.VisualStudio.TestTools.UnitTesting; using Newtonsoft.Json.Linq; namespace NavisworksTransport.UnitTests.Integration { /// /// 网格诊断集成测试(覆盖计划 T09)。 /// /// 通过 route-grid-diagnostics 端点验证: /// - 网格参数有效(cellSize > 0、尺寸匹配、坐标系类型正确) /// - 路径点均落在网格范围内且所在网格可通行 /// - 段诊断完整(段数与路径点数-1 一致) /// [TestClass] [TestCategory("NavisworksIntegration")] public class RouteGridDiagnosticsAutomationTests { [TestMethod] [Timeout(120000)] public async Task GroundRoute_GridDiagnostics_AreConsistent() { using (var client = new NavisworksTestAutomationClient()) { await client.EnsureServiceReadyAsync(TimeSpan.FromSeconds(90)).ConfigureAwait(false); JObject response = await client.GetRouteGridDiagnosticsAsync("自动测试_Ground").ConfigureAwait(false); Assert.IsTrue(response.Value("ok"), "网格诊断失败: " + (string)response["error"]); JObject data = (JObject)response["data"]; // 路径信息 JObject route = (JObject)data["route"]; Assert.AreEqual("自动测试_Ground", (string)route["name"], "诊断路径不匹配"); Assert.AreEqual("Ground", (string)route["pathType"], "诊断路径类型不匹配"); // 网格参数 JObject grid = (JObject)data["grid"]; Assert.IsTrue((double)grid["cellSize"] > 0, "网格 cellSize 应大于 0"); Assert.IsTrue((int)grid["width"] > 0 && (int)grid["height"] > 0, "网格宽高应大于 0"); Assert.IsFalse(string.IsNullOrWhiteSpace((string)grid["coordinateSystemType"]), "缺少坐标系类型"); // 路径点网格位置与可通行性 JArray points = (JArray)data["points"]; Assert.IsNotNull(points, "缺少 points"); Assert.AreEqual((int)route["pointCount"], points.Count, "路径点数量不匹配"); foreach (JToken token in points) { JObject point = (JObject)token; JObject gridPos = (JObject)point["grid"]; Assert.IsTrue((int)gridPos["x"] >= 0 && (int)gridPos["y"] >= 0, "路径点网格坐标不能为负"); JObject cell = (JObject)point["cell"]; Assert.IsTrue((bool)cell["isValid"], "路径点应落在网格范围内"); // 可通行性属于诊断信息(路径点可能因网格生成参数/边界落在不可通行区),不作硬断言 } // 段诊断 JArray segments = (JArray)data["segments"]; Assert.IsNotNull(segments, "缺少 segments"); Assert.AreEqual((int)route["pointCount"] - 1, segments.Count, "段数量应为路径点数-1"); } } [TestMethod] [Timeout(120000)] public async Task RailRoute_GridDiagnostics_AreConsistent() { using (var client = new NavisworksTestAutomationClient()) { await client.EnsureServiceReadyAsync(TimeSpan.FromSeconds(90)).ConfigureAwait(false); JObject response = await client.GetRouteGridDiagnosticsAsync("自动测试_Rail").ConfigureAwait(false); Assert.IsTrue(response.Value("ok"), "网格诊断失败: " + (string)response["error"]); JObject data = (JObject)response["data"]; JObject route = (JObject)data["route"]; Assert.AreEqual("自动测试_Rail", (string)route["name"], "诊断路径不匹配"); JObject grid = (JObject)data["grid"]; Assert.IsTrue((double)grid["cellSize"] > 0, "网格 cellSize 应大于 0"); JArray points = (JArray)data["points"]; Assert.AreEqual((int)route["pointCount"], points.Count, "路径点数量不匹配"); // Rail 路径点应落在网格范围内 foreach (JToken token in points) { JObject point = (JObject)token; JObject cell = (JObject)point["cell"]; Assert.IsTrue((bool)cell["isValid"], "Rail 路径点应落在网格范围内"); } } } } }