3934e528f2
Includes equality-as-normalized-instant remarks on OccurredAtUtc and a same-instant/different-offset equality regression test (code-review follow-up).
68 lines
2.4 KiB
C#
68 lines
2.4 KiB
C#
namespace ZB.MOM.WW.Audit.Tests;
|
|
|
|
public class AuditEventTests
|
|
{
|
|
private static AuditEvent Minimal() => new()
|
|
{
|
|
EventId = Guid.NewGuid(),
|
|
OccurredAtUtc = DateTimeOffset.UtcNow,
|
|
Actor = "alice",
|
|
Action = "ConfigPublished",
|
|
Outcome = AuditOutcome.Success,
|
|
};
|
|
|
|
[Fact]
|
|
public void Required_core_fields_round_trip()
|
|
{
|
|
var id = Guid.NewGuid();
|
|
var evt = Minimal() with { EventId = id, Actor = "svc", Action = "ApiCall", Outcome = AuditOutcome.Denied };
|
|
Assert.Equal(id, evt.EventId);
|
|
Assert.Equal("svc", evt.Actor);
|
|
Assert.Equal("ApiCall", evt.Action);
|
|
Assert.Equal(AuditOutcome.Denied, evt.Outcome);
|
|
}
|
|
|
|
[Fact]
|
|
public void OccurredAtUtc_is_normalized_to_utc()
|
|
{
|
|
var local = new DateTimeOffset(2026, 6, 1, 12, 0, 0, TimeSpan.FromHours(5));
|
|
var evt = Minimal() with { OccurredAtUtc = local };
|
|
Assert.Equal(TimeSpan.Zero, evt.OccurredAtUtc.Offset);
|
|
Assert.Equal(local.UtcDateTime, evt.OccurredAtUtc.UtcDateTime);
|
|
}
|
|
|
|
[Fact]
|
|
public void Optional_fields_default_to_null()
|
|
{
|
|
var evt = Minimal();
|
|
Assert.Null(evt.Category);
|
|
Assert.Null(evt.Target);
|
|
Assert.Null(evt.SourceNode);
|
|
Assert.Null(evt.CorrelationId);
|
|
Assert.Null(evt.DetailsJson);
|
|
}
|
|
|
|
[Fact]
|
|
public void Records_with_same_values_are_equal()
|
|
{
|
|
var id = Guid.NewGuid();
|
|
var when = DateTimeOffset.UtcNow;
|
|
AuditEvent Make() => new() { EventId = id, OccurredAtUtc = when, Actor = "a", Action = "x", Outcome = AuditOutcome.Success };
|
|
Assert.Equal(Make(), Make());
|
|
}
|
|
|
|
[Fact]
|
|
public void Same_instant_at_different_offset_compares_equal()
|
|
{
|
|
// Guards the UTC-normalizing init-setter: if OccurredAtUtc is ever "simplified" back to a
|
|
// plain auto-property, these two (same instant, different offset) would stop comparing equal.
|
|
var id = Guid.NewGuid();
|
|
var utc = new DateTimeOffset(2026, 6, 1, 7, 0, 0, TimeSpan.Zero);
|
|
var plus5 = new DateTimeOffset(2026, 6, 1, 12, 0, 0, TimeSpan.FromHours(5)); // same instant as utc
|
|
AuditEvent With(DateTimeOffset when) =>
|
|
new() { EventId = id, OccurredAtUtc = when, Actor = "a", Action = "x", Outcome = AuditOutcome.Success };
|
|
Assert.Equal(With(utc), With(plus5));
|
|
Assert.Equal(With(utc).GetHashCode(), With(plus5).GetHashCode());
|
|
}
|
|
}
|