using System.Collections.Concurrent; using ZB.MOM.WW.MxGateway.Contracts.Proto; using ZB.MOM.WW.MxGateway.Server.Dashboard.Hubs; namespace ZB.MOM.WW.MxGateway.Tests.TestSupport; /// /// test double that captures every /// Publish(sessionId, mxEvent) call into a thread-safe list, so tests /// can prove the gRPC producer loop actually mirrors events to the dashboard /// fan-out seam. Tests-026. /// public sealed class RecordingDashboardEventBroadcaster : IDashboardEventBroadcaster { private readonly ConcurrentQueue _captures = new(); /// Gets a snapshot of every Publish call in arrival order. public IReadOnlyList Captures => _captures.ToArray(); /// public void Publish(string sessionId, MxEvent mxEvent) { _captures.Enqueue(new DashboardEventCapture(sessionId, mxEvent)); } } /// Captured (sessionId, mxEvent) pair from a Publish invocation. /// The session id passed to Publish. /// The MxEvent passed to Publish. public sealed record DashboardEventCapture(string SessionId, MxEvent MxEvent);