using System.Text; using StellaOps.TestKit; using Xunit; namespace StellaOps.Canonical.Json.Tests; public partial class CanonVersionTests { [Trait("Category", TestCategories.Unit)] [Fact] public void CanonicalizeVersioned_IncludesVersionMarker() { var obj = new { foo = "bar" }; var canonical = CanonJson.CanonicalizeVersioned(obj); var json = Encoding.UTF8.GetString(canonical); Assert.StartsWith("{\"_canonVersion\":\"stella:canon:v1\"", json); Assert.Contains("\"foo\":\"bar\"", json); } [Trait("Category", TestCategories.Unit)] [Fact] public void CanonicalizeVersioned_VersionMarkerIsFirst() { var obj = new { aaa = 1, zzz = 2 }; var canonical = CanonJson.CanonicalizeVersioned(obj); var json = Encoding.UTF8.GetString(canonical); var versionIndex = json.IndexOf("_canonVersion", StringComparison.Ordinal); var aaaIndex = json.IndexOf("aaa", StringComparison.Ordinal); Assert.True(versionIndex < aaaIndex); } [Trait("Category", TestCategories.Unit)] [Fact] public void CanonicalizeVersioned_SortsOtherKeys() { var obj = new { z = 3, a = 1, m = 2 }; var canonical = CanonJson.CanonicalizeVersioned(obj); var json = Encoding.UTF8.GetString(canonical); Assert.Matches(@"\{""_canonVersion"":""[^""]+"",""a"":1,""m"":2,""z"":3\}", json); } }