using Omika.Core.Observability.Diagnostic; namespace Omika.Tests.Observability.Correlation; public class RequestDiagnosticContextTests { [Fact] public void Begin_SetsContext_AndRestoresOnDispose() { var context = new RequestDiagnosticContext(); Guid traceId = Guid.NewGuid(); Guid sessionId = Guid.NewGuid(); Assert.Null(context.TraceId); Assert.Null(context.SessionId); Assert.Null(context.StartedAtUtc); using (context.Begin(traceId, sessionId)) { Assert.Equal(traceId, context.TraceId); Assert.Equal(sessionId, context.SessionId); Assert.NotNull(context.StartedAtUtc); } Assert.Null(context.TraceId); Assert.Null(context.SessionId); Assert.Null(context.StartedAtUtc); } [Fact] public void SetIdentity_WithinScope_SetsFields() { var context = new RequestDiagnosticContext(); using (context.Begin(Guid.NewGuid())) { context.SetIdentity("device-1", "CLIENT01", "42", "7"); Assert.Equal("device-1", context.DeviceId); Assert.Equal("CLIENT01", context.ClientId); Assert.Equal("42", context.UserId); Assert.Equal("7", context.CollaborateurId); } } [Fact] public void SetIdentity_OutsideScope_IsNoOp() { var context = new RequestDiagnosticContext(); context.SetIdentity("device-1", "CLIENT01", "42", "7"); Assert.Null(context.DeviceId); Assert.Null(context.ClientId); Assert.Null(context.UserId); Assert.Null(context.CollaborateurId); } [Fact] public async Task NestedScopes_AreIsolated_AndRestored() { var context = new RequestDiagnosticContext(); Guid a = Guid.NewGuid(); Guid b = Guid.NewGuid(); using (context.Begin(a)) { await Task.Yield(); Assert.Equal(a, context.TraceId); using (context.Begin(b)) { Assert.Equal(b, context.TraceId); } Assert.Equal(a, context.TraceId); } Assert.Null(context.TraceId); } }