using Microsoft.EntityFrameworkCore; using Shouldly; using Xunit; using ZB.MOM.WW.OtOpcUa.AdminUI.Clients; using ZB.MOM.WW.OtOpcUa.Configuration; using ZB.MOM.WW.OtOpcUa.Configuration.Entities; namespace ZB.MOM.WW.OtOpcUa.AdminUI.Tests; /// A-F4 / A-F5: /fleet links to the per-node diagnostics page, which shows authored names. [Trait("Category", "Unit")] public sealed class FleetDiagnosticsLinksTests { [Fact] public void Link_escapes_the_node_id() => FleetDiagnosticsLinks.For("host-a:4053").ShouldBe("/fleet/diagnostics?node=host-a%3A4053"); [Fact] public async Task Display_names_join_from_the_config_db_and_unknown_ids_are_absent() { var name = Guid.NewGuid().ToString("N"); var options = new DbContextOptionsBuilder().UseInMemoryDatabase(name).Options; await using (var seed = new OtOpcUaConfigDbContext(options)) { seed.DriverInstances.Add(new DriverInstance { DriverInstanceId = "drv-press-1", ClusterId = "MAIN", Name = "Press line Modbus", DriverType = "Modbus", DriverConfig = "{}", }); await seed.SaveChangesAsync(TestContext.Current.CancellationToken); } await using var db = new OtOpcUaConfigDbContext(options); var names = await FleetDiagnosticsLinks.LoadDisplayNamesAsync(db, ["drv-press-1", "drv-unknown"], TestContext.Current.CancellationToken); names["DRV-PRESS-1"].ShouldBe("Press line Modbus"); // the returned map is case-insensitive names.ContainsKey("drv-unknown").ShouldBeFalse(); (await FleetDiagnosticsLinks.LoadDisplayNamesAsync(db, [], TestContext.Current.CancellationToken)).ShouldBeEmpty(); } [Fact] public void Fleet_rows_link_driver_nodes_and_the_page_uses_the_names() { AdminUiSource.Read("Components", "Pages", "Fleet.razor") .ShouldContain("href=\"@FleetDiagnosticsLinks.For(r.NodeId)\""); var diag = AdminUiSource.Read("Components", "Pages", "FleetDiagnostics.razor"); diag.ShouldContain("FleetDiagnosticsLinks.LoadDisplayNamesAsync("); diag.ShouldContain("@DisplayNameOf(d)"); } }