using ClaudeDo.Logging; using Serilog; using Serilog.Context; using Serilog.Core; using Serilog.Events; namespace ClaudeDo.Worker.Tests.Logging; public sealed class DefaultTaskIdEnricherTests { private sealed class CollectingSink : ILogEventSink { public List Events { get; } = new(); public void Emit(LogEvent logEvent) => Events.Add(logEvent); } [Fact] public void AddsDash_WhenNoTaskIdInScope() { var sink = new CollectingSink(); using var logger = new LoggerConfiguration() .Enrich.FromLogContext() .Enrich.With(new DefaultTaskIdEnricher()) .WriteTo.Sink(sink) .CreateLogger(); logger.Information("hello"); var prop = Assert.Single(sink.Events).Properties["TaskId"]; Assert.Equal("\"-\"", prop.ToString()); } [Fact] public void KeepsPushedTaskId_WhenInScope() { var sink = new CollectingSink(); using var logger = new LoggerConfiguration() .Enrich.FromLogContext() .Enrich.With(new DefaultTaskIdEnricher()) .WriteTo.Sink(sink) .CreateLogger(); using (LogContext.PushProperty("TaskId", "task-42")) logger.Information("hello"); var prop = Assert.Single(sink.Events).Properties["TaskId"]; Assert.Equal("\"task-42\"", prop.ToString()); } }