using NSubstitute; using ZB.MOM.WW.ScadaBridge.AuditLog.Site; using ZB.MOM.WW.ScadaBridge.HealthMonitoring; namespace ZB.MOM.WW.ScadaBridge.AuditLog.Tests.Site; /// /// The /// adapter is the production binding for /// on site nodes; it forwards every FallbackAuditWriter primary failure into /// the shared so the site health report /// surfaces the failure count as SiteAuditWriteFailures. /// public class HealthMetricsAuditWriteFailureCounterTests { /// Verifies that a single increment is routed to the collector as a site audit write failure. [Fact] public void Increment_Routes_To_Collector_IncrementSiteAuditWriteFailures() { var collector = Substitute.For(); var counter = new HealthMetricsAuditWriteFailureCounter(collector); counter.Increment(); collector.Received(1).IncrementSiteAuditWriteFailures(); } /// Verifies that each of several increments is routed to the collector. [Fact] public void Increment_Multiple_Calls_Route_To_Collector_Each_Time() { var collector = Substitute.For(); var counter = new HealthMetricsAuditWriteFailureCounter(collector); counter.Increment(); counter.Increment(); counter.Increment(); collector.Received(3).IncrementSiteAuditWriteFailures(); } /// Verifies that constructing the counter with a null collector throws an . [Fact] public void Construction_With_Null_Collector_Throws_ArgumentNullException() { Assert.Throws( () => new HealthMetricsAuditWriteFailureCounter(null!)); } }