Files
2026-10-23 18:46:50 +02:00

76 lines
2.7 KiB
C#

using System.Text.Json;
using Omika.Core.Observability.Outbox;
namespace Omika.Tests.Observability.Outbox;
/// <summary>Tests du contrat de transport versionné (§26, §27, §10).</summary>
public class DiagnosticTransportTests
{
private static readonly JsonSerializerOptions JsonOptions = new(JsonSerializerDefaults.Web);
[Fact]
public void SchemaVersion_IsOne()
{
Assert.Equal(1, DiagnosticTransportSchema.SchemaVersion);
}
[Fact]
public void Batch_SerializesWithSchemaVersionAndBatchId()
{
var batch = new DiagnosticBatchDto
{
BatchId = Guid.Parse("00000000-0000-0000-0000-0000000000AA"),
SentAtUtc = new DateTimeOffset(2024, 1, 2, 3, 4, 5, TimeSpan.Zero),
Events =
[
new DiagnosticEventDto
{
EventId = Guid.Parse("00000000-0000-0000-0000-000000000001"),
EventCode = "OMK-MOB-APP-001",
TimestampUtc = new DateTimeOffset(2024, 1, 2, 3, 4, 5, TimeSpan.Zero),
Level = "Info",
Priority = "P3"
}
]
};
string json = JsonSerializer.Serialize(batch, JsonOptions);
using JsonDocument document = JsonDocument.Parse(json);
Assert.Equal(1, document.RootElement.GetProperty("schemaVersion").GetInt32());
Assert.Equal(
"00000000-0000-0000-0000-0000000000aa",
document.RootElement.GetProperty("batchId").GetString());
Assert.Equal(1, document.RootElement.GetProperty("events").GetArrayLength());
}
[Fact]
public void Batch_RoundTrips_BatchIdAndEventIdStable()
{
Guid batchId = Guid.NewGuid();
Guid eventId = Guid.NewGuid();
var batch = new DiagnosticBatchDto
{
BatchId = batchId,
Events = [new DiagnosticEventDto { EventId = eventId, EventCode = "OMK-MOB-APP-001" }]
};
string json = JsonSerializer.Serialize(batch, JsonOptions);
DiagnosticBatchDto? back = JsonSerializer.Deserialize<DiagnosticBatchDto>(json, JsonOptions);
Assert.Equal(batchId, back!.BatchId);
Assert.Equal(eventId, back.Events[0].EventId);
}
[Fact]
public void Response_RoundTrips()
{
var response = new DiagnosticBatchResponseDto { BatchId = Guid.NewGuid(), AcceptedCount = 3 };
string json = JsonSerializer.Serialize(response, JsonOptions);
DiagnosticBatchResponseDto? back = JsonSerializer.Deserialize<DiagnosticBatchResponseDto>(json, JsonOptions);
Assert.Equal(response.BatchId, back!.BatchId);
Assert.Equal(3, back.AcceptedCount);
}
}