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)");
}
}