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 路径点应落在网格范围内");
}
}
}
}
}