Files
git.stella-ops.org/src/__Libraries/__Tests/StellaOps.HybridLogicalClock.Tests/HlcTimestampJsonConverterTests.ObjectDeserialize.cs

95 lines
3.0 KiB
C#

using System.Text.Json;
using Xunit;
namespace StellaOps.HybridLogicalClock.Tests;
public partial class HlcTimestampJsonConverterTests
{
[Fact]
public void ObjectConverter_Deserialize_ReadsObject()
{
var options = CreateObjectOptions();
var json = """{"physicalTime":1704067200000,"nodeId":"test-node","logicalCounter":42}""";
var result = JsonSerializer.Deserialize<HlcTimestamp>(json, options);
Assert.Equal(BasePhysicalTime, result.PhysicalTime);
Assert.Equal("test-node", result.NodeId);
Assert.Equal(42, result.LogicalCounter);
}
[Fact]
public void ObjectConverter_Deserialize_PascalCaseProperties_Works()
{
var options = CreateObjectOptions();
var json = """{"PhysicalTime":1704067200000,"NodeId":"test-node","LogicalCounter":42}""";
var result = JsonSerializer.Deserialize<HlcTimestamp>(json, options);
Assert.Equal(BasePhysicalTime, result.PhysicalTime);
Assert.Equal("test-node", result.NodeId);
Assert.Equal(42, result.LogicalCounter);
}
[Fact]
public void ObjectConverter_Deserialize_MissingPhysicalTime_ThrowsJsonException()
{
var options = CreateObjectOptions();
var json = """{"nodeId":"test-node","logicalCounter":42}""";
var ex = Assert.Throws<JsonException>(() =>
JsonSerializer.Deserialize<HlcTimestamp>(json, options));
Assert.Contains("physicalTime", ex.Message);
}
[Fact]
public void ObjectConverter_Deserialize_MissingNodeId_ThrowsJsonException()
{
var options = CreateObjectOptions();
var json = """{"physicalTime":1704067200000,"logicalCounter":42}""";
var ex = Assert.Throws<JsonException>(() =>
JsonSerializer.Deserialize<HlcTimestamp>(json, options));
Assert.Contains("nodeId", ex.Message);
}
[Fact]
public void ObjectConverter_Deserialize_MissingLogicalCounter_ThrowsJsonException()
{
var options = CreateObjectOptions();
var json = """{"physicalTime":1704067200000,"nodeId":"test-node"}""";
var ex = Assert.Throws<JsonException>(() =>
JsonSerializer.Deserialize<HlcTimestamp>(json, options));
Assert.Contains("logicalCounter", ex.Message);
}
[Fact]
public void ObjectConverter_Deserialize_ExtraProperties_Ignored()
{
var options = CreateObjectOptions();
var json = """{"physicalTime":1704067200000,"nodeId":"test-node","logicalCounter":42,"extra":"ignored"}""";
var result = JsonSerializer.Deserialize<HlcTimestamp>(json, options);
Assert.Equal(BasePhysicalTime, result.PhysicalTime);
Assert.Equal("test-node", result.NodeId);
Assert.Equal(42, result.LogicalCounter);
}
[Fact]
public void ObjectConverter_Deserialize_StringToken_ThrowsJsonException()
{
var options = CreateObjectOptions();
Assert.Throws<JsonException>(() =>
JsonSerializer.Deserialize<HlcTimestamp>("\"not-an-object\"", options));
}
}