95 lines
3.0 KiB
C#
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));
|
|
}
|
|
}
|