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

80 lines
2.2 KiB
C#

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);
}
}