using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using NSubstitute; using ZB.MOM.WW.ScadaBridge.AuditLog.Site; using ZB.MOM.WW.ScadaBridge.Commons.Interfaces.Services; using ZB.MOM.WW.ScadaBridge.HealthMonitoring; namespace ZB.MOM.WW.ScadaBridge.AuditLog.Tests.Site; /// /// Deferred-work #21: the backlog reporter's poll cadence is configurable via /// instead of the /// old hard-coded 30 s constant. /// public class SiteAuditBacklogReporterCadenceTests { private static SiteAuditBacklogReporter Create( IOptions? options, TimeSpan? explicitInterval = null) => new( Substitute.For(), Substitute.For(), NullLogger.Instance, explicitInterval, options); [Fact] public void Cadence_ComesFromOptions_WhenConfigured() { var options = Options.Create(new SqliteAuditWriterOptions { BacklogPollIntervalSeconds = 12 }); var reporter = Create(options); Assert.Equal(TimeSpan.FromSeconds(12), reporter.RefreshInterval); } [Fact] public void Cadence_FallsBackToDefault_WhenOptionsNonPositive() { var options = Options.Create(new SqliteAuditWriterOptions { BacklogPollIntervalSeconds = 0 }); var reporter = Create(options); Assert.Equal(SiteAuditBacklogReporter.DefaultRefreshInterval, reporter.RefreshInterval); } [Fact] public void Cadence_FallsBackToDefault_WhenNoOptions() { var reporter = Create(options: null); Assert.Equal(SiteAuditBacklogReporter.DefaultRefreshInterval, reporter.RefreshInterval); } [Fact] public void ExplicitInterval_WinsOverOptions() { var options = Options.Create(new SqliteAuditWriterOptions { BacklogPollIntervalSeconds = 12 }); var reporter = Create(options, explicitInterval: TimeSpan.FromSeconds(3)); Assert.Equal(TimeSpan.FromSeconds(3), reporter.RefreshInterval); } }