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() {