using Microsoft.Extensions.Options; namespace ZB.MOM.WW.ScadaBridge.StoreAndForward.Tests; /// /// retry intervals feed the background sweep /// timer (zero/negative trips the timer constructor) and the SQLite path backs the /// buffer. These tests assert the /// rejects a bad ScadaBridge:StoreAndForward section with a clear, /// key-naming message rather than crashing later with an opaque exception. /// public class StoreAndForwardOptionsValidatorTests { private static ValidateOptionsResult Validate(StoreAndForwardOptions options) => new StoreAndForwardOptionsValidator().Validate(Options.DefaultName, options); [Fact] public void DefaultOptions_AreValid() { var result = Validate(new StoreAndForwardOptions()); Assert.True(result.Succeeded, result.FailureMessage); } [Fact] public void ZeroDefaultRetryInterval_IsRejected() { var result = Validate(new StoreAndForwardOptions { DefaultRetryInterval = TimeSpan.Zero }); Assert.True(result.Failed); Assert.Contains("DefaultRetryInterval", result.FailureMessage); } [Fact] public void ZeroRetryTimerInterval_IsRejected() { var result = Validate(new StoreAndForwardOptions { RetryTimerInterval = TimeSpan.Zero }); Assert.True(result.Failed); Assert.Contains("RetryTimerInterval", result.FailureMessage); } [Fact] public void EmptySqliteDbPath_IsRejected() { var result = Validate(new StoreAndForwardOptions { SqliteDbPath = "" }); Assert.True(result.Failed); Assert.Contains("SqliteDbPath", result.FailureMessage); } }