using Shouldly; using Xunit; using ZB.MOM.WW.OtOpcUa.AdminUI.Components.Shared.Drivers; using ZB.MOM.WW.OtOpcUa.Core.Abstractions; using ZB.MOM.WW.OtOpcUa.Core.Resilience; public class ResilienceFormModelTests { [Fact] public void Blank_form_serializes_to_null() => new ResilienceFormModel().ToJson().ShouldBeNull(); [Fact] public void Partial_override_round_trips() { var m = new ResilienceFormModel { BulkheadMaxConcurrent = 16 }; m.Policies["Read"].TimeoutSeconds = 5; m.Policies["Read"].RetryCount = 5; var json = m.ToJson(); json.ShouldNotBeNull(); var back = ResilienceFormModel.FromJson(json); back.BulkheadMaxConcurrent.ShouldBe(16); back.Policies["Read"].TimeoutSeconds.ShouldBe(5); back.Policies["Write"].IsEmpty.ShouldBeTrue(); } [Fact] public void Malformed_json_yields_empty_model() { var m = ResilienceFormModel.FromJson("{ not valid json"); m.BulkheadMaxConcurrent.ShouldBeNull(); m.Policies["Read"].IsEmpty.ShouldBeTrue(); } [Fact] public void Emitted_json_is_consumable_by_the_runtime_parser() { var m = new ResilienceFormModel { BulkheadMaxConcurrent = 16 }; m.Policies["Read"].TimeoutSeconds = 7; var opts = DriverResilienceOptionsParser.ParseOrDefaults(DriverTier.B, m.ToJson(), out var diag); diag.ShouldBeNull(); opts.BulkheadMaxConcurrent.ShouldBe(16); opts.Resolve(DriverCapability.Read).TimeoutSeconds.ShouldBe(7); opts.Resolve(DriverCapability.Write).RetryCount.ShouldBe(0); } }