using Shouldly; using Xunit; using ZB.MOM.WW.OtOpcUa.AdminUI.Hubs; namespace ZB.MOM.WW.OtOpcUa.AdminUI.Tests; /// /// Covers the in-process fan-out the Blazor Server Alerts / Script log pages rely on: /// raises Received for every current /// subscriber, and unsubscribing stops delivery. These pages read this broadcaster directly /// instead of opening a self-targeted SignalR connection (unreachable behind a reverse proxy). /// public sealed class InProcessBroadcasterTests { [Fact] public void Publish_raises_Received_for_all_current_subscribers() { var broadcaster = new InProcessBroadcaster(); var a = new List(); var b = new List(); broadcaster.Received += a.Add; broadcaster.Received += b.Add; broadcaster.Publish("evt-1"); a.ShouldBe(["evt-1"]); b.ShouldBe(["evt-1"]); } [Fact] public void Unsubscribed_handler_stops_receiving() { var broadcaster = new InProcessBroadcaster(); var received = new List(); void Handler(string s) => received.Add(s); broadcaster.Received += Handler; broadcaster.Publish("first"); broadcaster.Received -= Handler; broadcaster.Publish("second"); received.ShouldBe(["first"]); } [Fact] public void Publish_with_no_subscribers_does_not_throw() { var broadcaster = new InProcessBroadcaster(); Should.NotThrow(() => broadcaster.Publish(42)); } }