45 lines
1.4 KiB
C#
45 lines
1.4 KiB
C#
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);
|
|
}
|
|
}
|