From bf80ca1388a925e9551d01696f3f0584613fffa2 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Tue, 16 Jun 2026 17:38:57 -0400 Subject: [PATCH] =?UTF-8?q?test(commons):=20NJ-1=20review=20=E2=80=94=20ba?= =?UTF-8?q?ckward-compat=20decode=20tests=20for=20old-form=20Float/DateTim?= =?UTF-8?q?e=20+=20assert=20DateTime=20list=20is=20quoted-string=20array?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Types/AttributeValueCodecTests.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/tests/ZB.MOM.WW.ScadaBridge.Commons.Tests/Types/AttributeValueCodecTests.cs b/tests/ZB.MOM.WW.ScadaBridge.Commons.Tests/Types/AttributeValueCodecTests.cs index 15229611..fa717bdb 100644 --- a/tests/ZB.MOM.WW.ScadaBridge.Commons.Tests/Types/AttributeValueCodecTests.cs +++ b/tests/ZB.MOM.WW.ScadaBridge.Commons.Tests/Types/AttributeValueCodecTests.cs @@ -93,10 +93,28 @@ public class AttributeValueCodecTests { var json = AttributeValueCodec.Encode( new List { new(2026, 6, 16, 0, 0, 0, DateTimeKind.Utc) }); + Assert.StartsWith("[\"", json); // DateTime list must be an array of quoted strings Assert.Contains("2026-06-16T00:00:00", json); Assert.DoesNotContain("06/16/2026", json); } + [Fact] + public void Decode_OldStringFloatForm_BackwardCompatible() + { + var back = (IList)AttributeValueCodec.Decode("[\"1.5\",\"2.25\"]", DataType.List, DataType.Float)!; + Assert.Equal(new[] { 1.5f, 2.25f }, back); + } + + [Fact] + public void Decode_OldStringDateTimeForm_BackwardCompatible() + { + // The pre-native codec encoded DateTime via IFormattable.ToString(null, InvariantCulture): + // "06/16/2026 12:30:45" (US-invariant, no 'T'/'Z'). New Decode must still parse it. + var back = (IList)AttributeValueCodec.Decode( + "[\"06/16/2026 12:30:45\"]", DataType.List, DataType.DateTime)!; + Assert.Equal(new DateTime(2026, 6, 16, 12, 30, 45, DateTimeKind.Unspecified), back[0]); + } + [Fact] public void Decode_NewNativeIntForm_Parses() {