From c3fec1426c17ee7113296e62a4fc0151af42d21b Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Fri, 29 May 2026 09:10:41 -0400 Subject: [PATCH] fix(adminui): case-insensitive resilience policy keys + malformed-json test (review) --- .../Components/Shared/Drivers/ResilienceFormModel.cs | 2 +- .../ResilienceFormModelTests.cs | 8 ++++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/ResilienceFormModel.cs b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/ResilienceFormModel.cs index 8dd05184..729b6ab3 100644 --- a/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/ResilienceFormModel.cs +++ b/src/Server/ZB.MOM.WW.OtOpcUa.AdminUI/Components/Shared/Drivers/ResilienceFormModel.cs @@ -20,7 +20,7 @@ public sealed class ResilienceFormModel // capability name -> (timeout, retry, breaker), each nullable. public Dictionary Policies { get; set; } = - Capabilities.ToDictionary(c => c, _ => new CapabilityRow()); + Capabilities.ToDictionary(c => c, _ => new CapabilityRow(), StringComparer.OrdinalIgnoreCase); public sealed class CapabilityRow { diff --git a/tests/Server/ZB.MOM.WW.OtOpcUa.AdminUI.Tests/ResilienceFormModelTests.cs b/tests/Server/ZB.MOM.WW.OtOpcUa.AdminUI.Tests/ResilienceFormModelTests.cs index 12e8a65f..cb95310a 100644 --- a/tests/Server/ZB.MOM.WW.OtOpcUa.AdminUI.Tests/ResilienceFormModelTests.cs +++ b/tests/Server/ZB.MOM.WW.OtOpcUa.AdminUI.Tests/ResilienceFormModelTests.cs @@ -26,6 +26,14 @@ public class ResilienceFormModelTests 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() {