using Shouldly;
using Xunit;
namespace ZB.MOM.WW.OtOpcUa.AdminUI.Tests;
///
/// Pins DriverStatusPanel to the /hosts page (Gitea #546). The panel is the only
/// component carrying the Restart/Reconnect driver controls, and it had ZERO references
/// repo-wide — the commands worked end to end over the mesh transport while no user could reach
/// them, and nothing failed to build, test or deploy. Deleting the last <DriverStatusPanel
/// tag would silently restore exactly that state, so it is pinned here.
///
///
/// This is a source scan rather than a rendering assertion because the repo has no bUnit (same
/// technique as MeshRegistrationRoleScopingTests; panel markup is otherwise live-verified).
/// A scan proves reachability of the component, not that it renders correctly.
///
[Trait("Category", "Unit")]
public sealed class HostsPanelWiringTests
{
private static string ReadHostsPageSource()
{
var dir = new DirectoryInfo(AppContext.BaseDirectory);
while (dir is not null && !File.Exists(Path.Combine(dir.FullName, "ZB.MOM.WW.OtOpcUa.slnx")))
dir = dir.Parent;
dir.ShouldNotBeNull("could not locate the repository root (no ZB.MOM.WW.OtOpcUa.slnx above the test binary)");
return File.ReadAllText(Path.Combine(
dir!.FullName, "src", "Server", "ZB.MOM.WW.OtOpcUa.AdminUI",
"Components", "Pages", "Hosts.razor"));
}
/// THE #546 regression pin: the panel must remain reachable from a routable page.
[Fact]
public void Hosts_page_renders_the_driver_status_panel()
{
ReadHostsPageSource().ShouldContain(
"
/// The panel must be fed the dialog driver's real identity and enabled-state, not literals.
/// Hard-coding any of the three would make every dialog drive the same driver, or claim a
/// disabled instance is live — both of which a source scan for the tag alone would pass.
/// Since the Controls dialog rework the panel renders once, inside the modal, bound to the
/// row that FindControlsDriver() re-resolves from the current groups (cd/cg)
/// — never to a cached row record, which the 5 s rebuild replaces.
///
[Fact]
public void The_panel_is_bound_to_the_dialogs_own_driver_cluster_and_enabled_state()
{
var source = ReadHostsPageSource();
source.ShouldContain("DriverInstanceId=\"@cd.DriverInstanceId\"");
source.ShouldContain("ClusterId=\"@cg.ClusterId\"");
source.ShouldContain("Enabled=\"@cd.Enabled\"");
}
}