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