using System.Text.Json; using StellaOps.Bench.ScannerAnalyzers; using StellaOps.Bench.ScannerAnalyzers.Baseline; using StellaOps.Bench.ScannerAnalyzers.Reporting; using Xunit; namespace StellaOps.Bench.ScannerAnalyzers.Tests; public sealed class BenchmarkJsonWriterTests { [Fact] public async Task WriteAsync_EmitsMetadataAndScenarioDetails() { var metadata = new BenchmarkJsonMetadata("1.0", DateTimeOffset.Parse("2025-10-23T12:00:00Z"), "abc123", "ci"); var result = new ScenarioResult( "scenario", "Scenario", SampleCount: 5, MeanMs: 10, P95Ms: 12, MaxMs: 20, Iterations: 5, ThresholdMs: 5000); var baseline = new BaselineEntry("scenario", 5, 5, 9, 11, 10); var report = new BenchmarkScenarioReport(result, baseline, 1.2); var path = Path.Combine(Path.GetTempPath(), $"bench-{Guid.NewGuid():N}.json"); await BenchmarkJsonWriter.WriteAsync(path, metadata, new[] { report }, CancellationToken.None); using var document = JsonDocument.Parse(await File.ReadAllTextAsync(path)); var root = document.RootElement; Assert.Equal("1.0", root.GetProperty("schemaVersion").GetString()); Assert.Equal("abc123", root.GetProperty("commit").GetString()); var scenario = root.GetProperty("scenarios")[0]; Assert.Equal("scenario", scenario.GetProperty("id").GetString()); Assert.Equal(20, scenario.GetProperty("maxMs").GetDouble()); Assert.Equal(10, scenario.GetProperty("baseline").GetProperty("maxMs").GetDouble()); Assert.True(scenario.GetProperty("regression").GetProperty("breached").GetBoolean()); } }