import json from v1.report import collect_jsonl, format_report, load_events, summarize def _write_events(path, events): path.write_text( "\n".join(json.dumps(e, ensure_ascii=False) for e in events) + "\n", encoding="utf-8", ) def _event(event_id, latency): return { "event_id": event_id, "track_id": "P-0001", "confirmed_at_utc": "2026-07-21T08:30:00+00:00", "latency_seconds": latency, "screenshot": "20260721/{0}.png".format(event_id), } def test_load_events_reads_each_jsonl_line(tmp_path): jsonl = tmp_path / "events.jsonl" _write_events(jsonl, [_event("FALL-A-000001", 1.8), _event("FALL-A-000002", 2.1)]) events = load_events(jsonl) assert len(events) == 2 assert events[0]["event_id"] == "FALL-A-000001" def test_summarize_counts_latency_in_target_window(tmp_path): events = [_event("a", 1.8), _event("b", 0.9), _event("c", 3.0)] summary = summarize(events) assert summary["count"] == 3 assert summary["latency_in_target"] == 2 # 1.8 and 3.0 are within 1-3s, 0.9 is not def test_empty_log_reads_as_clean_pass(tmp_path): jsonl = tmp_path / "events.jsonl" jsonl.write_text("", encoding="utf-8") events = load_events(jsonl) report = format_report(jsonl, events) assert events == [] assert "no confirmed events" in report def test_collect_jsonl_finds_day_directories(tmp_path): day = tmp_path / "20260721" day.mkdir() _write_events(day / "events.jsonl", [_event("FALL-A-000001", 1.8)]) found = collect_jsonl(tmp_path) assert found == [day / "events.jsonl"]