using Sdt.Core; using Xunit; namespace DevTool.Tests; public sealed class RunEventLogReaderTests { [Fact] public void ReadEvents_ParsesValidJsonlLines() { var root = Path.Combine(Path.GetTempPath(), "sdt-logreader-" + Guid.NewGuid().ToString("N")); var dir = Path.Combine(root, ".sdt", "events"); Directory.CreateDirectory(dir); var file = Path.Combine(dir, "workflow-test.jsonl"); File.WriteAllLines(file, [ """{"category":"workflow","type":"WorkflowStarted","message":"start","workflowId":"build","occurredAt":"2026-03-01T10:00:00Z"}""", """{"category":"workflow","type":"WorkflowCompleted","message":"done","workflowId":"build","success":true,"exitCode":0,"occurredAt":"2026-03-01T10:00:01Z"}""" ]); var reader = new RunEventLogReader(); var events = reader.ReadEvents(file); Assert.Equal(2, events.Count); Assert.Equal(RunEventType.WorkflowStarted, events[0].Type); Assert.Equal(RunEventType.WorkflowCompleted, events[1].Type); Assert.True(events[1].Success); } [Fact] public void ReadEvents_ParsesVersionedEventFields() { var root = Path.Combine(Path.GetTempPath(), "sdt-logreader-" + Guid.NewGuid().ToString("N")); var dir = Path.Combine(root, ".sdt", "events"); Directory.CreateDirectory(dir); var file = Path.Combine(dir, "workflow-test-v1.jsonl"); File.WriteAllLines(file, [ """{"category":"workflow","event_type":"WorkflowStarted","message":"start","run_event_version":"1.0","run_id":"abc","project_root":"C:/repo","timestamp_utc":"2026-03-01T10:00:00Z"}""" ]); var reader = new RunEventLogReader(); var events = reader.ReadEvents(file); Assert.Single(events); Assert.Equal(RunEventType.WorkflowStarted, events[0].Type); Assert.Equal("abc", events[0].EventRunId); Assert.Equal("C:/repo", events[0].EventProjectRoot); Assert.Equal("1.0", events[0].EventVersion); } [Fact] public void ListEventFiles_ReturnsNewestFirst() { var root = Path.Combine(Path.GetTempPath(), "sdt-logreader-" + Guid.NewGuid().ToString("N")); var dir = Path.Combine(root, ".sdt", "events"); Directory.CreateDirectory(dir); var older = Path.Combine(dir, "older.jsonl"); var newer = Path.Combine(dir, "newer.jsonl"); File.WriteAllText(older, "{}"); Thread.Sleep(20); File.WriteAllText(newer, "{}"); var reader = new RunEventLogReader(); var files = reader.ListEventFiles(root); Assert.True(files.Count >= 2); Assert.Equal("newer.jsonl", files[0].Name); } }