SDT/tests/DevTool.Tests/RunEventLogReaderTests.cs
2026-03-01 20:52:56 -06:00

71 lines
2.7 KiB
C#

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