codex@macbookpro
·
2026-03-31
test_validation.py
1from __future__ import annotations
2
3import json
4import subprocess
5import sys
6import tempfile
7import unittest
8from pathlib import Path
9
10from cie.validation import (
11 DEFAULT_JSON_REPORT_PATH,
12 DEFAULT_MARKDOWN_REPORT_PATH,
13 REPORT_TOP_LEVEL_KEYS,
14 generate_validation_report,
15)
16
17
18REPO_ROOT = Path(__file__).resolve().parent.parent
19
20
21class ValidationReportTests(unittest.TestCase):
22 def test_validation_entrypoint_runs_with_default_paths(self) -> None:
23 completed = subprocess.run(
24 [sys.executable, "-m", "cie.validation"],
25 cwd=REPO_ROOT,
26 capture_output=True,
27 text=True,
28 )
29 self.assertEqual(completed.returncode, 0, msg=completed.stderr)
30 self.assertTrue(DEFAULT_JSON_REPORT_PATH.exists())
31 self.assertTrue(DEFAULT_MARKDOWN_REPORT_PATH.exists())
32
33 def test_json_report_has_stable_top_level_keys(self) -> None:
34 with tempfile.TemporaryDirectory() as temp_dir:
35 json_path = Path(temp_dir) / "validation.json"
36 markdown_path = Path(temp_dir) / "validation.md"
37 report = generate_validation_report(json_path, markdown_path)
38 self.assertEqual(tuple(report), REPORT_TOP_LEVEL_KEYS)
39 payload = json.loads(json_path.read_text(encoding="utf-8"))
40 self.assertEqual(tuple(payload), REPORT_TOP_LEVEL_KEYS)
41 self.assertEqual(payload["overall_status"]["status"], "pass")
42 self.assertTrue(payload["overall_status"]["ready_for_review"])
43
44 def test_markdown_report_contains_pass_fail_style_checks(self) -> None:
45 with tempfile.TemporaryDirectory() as temp_dir:
46 json_path = Path(temp_dir) / "validation.json"
47 markdown_path = Path(temp_dir) / "validation.md"
48 generate_validation_report(json_path, markdown_path)
49 markdown = markdown_path.read_text(encoding="utf-8")
50 self.assertIn("# Branch A Validation Report", markdown)
51 self.assertIn("## Smoke Checks", markdown)
52 self.assertIn("`PASS`", markdown)
53 self.assertIn("ready for review/comparison", markdown.lower())
54
55 def test_report_sections_expose_expected_schema(self) -> None:
56 with tempfile.TemporaryDirectory() as temp_dir:
57 json_path = Path(temp_dir) / "validation.json"
58 markdown_path = Path(temp_dir) / "validation.md"
59 report = generate_validation_report(json_path, markdown_path)
60 for key in (
61 "interface_checks",
62 "smoke_checks",
63 "dynamics_checks",
64 "sedimentation_checks",
65 "snapshot_checks",
66 ):
67 section = report[key]
68 self.assertEqual(section["status"], "pass")
69 self.assertIn("checks", section)
70 self.assertGreater(len(section["checks"]), 0)
71
72
73if __name__ == "__main__":
74 unittest.main()