from __future__ import annotations import json import os import subprocess import tempfile import unittest from pathlib import Path class ShowLatestReleaseTests(unittest.TestCase): def test_show_latest_release_marks_stale_final_report_as_not_ok(self) -> None: repo_root = Path(__file__).resolve().parents[2] script_path = repo_root / "show_latest_release.sh" with tempfile.TemporaryDirectory() as temp_dir: release_root = Path(temp_dir) latest_payload = { "package_name": "domaincheck_release_new", "archive_path": str(release_root / "domaincheck_release_new.tar.gz"), "sha256": "new-sha256", } final_report = { "ok": True, "latest_release": { "package_name": "domaincheck_release_old", "archive_path": str(release_root / "domaincheck_release_old.tar.gz"), "sha256": "old-sha256", }, } (release_root / "latest_release.json").write_text( json.dumps(latest_payload, ensure_ascii=False, indent=2), encoding="utf-8", ) (release_root / "final_release_report.json").write_text( json.dumps(final_report, ensure_ascii=False, indent=2), encoding="utf-8", ) env = dict(os.environ) env["DOMAINCHECK_RELEASE_ROOT"] = str(release_root) result = subprocess.run( ["bash", str(script_path)], cwd=repo_root, check=True, capture_output=True, text=True, env=env, ) payload = json.loads(result.stdout) self.assertFalse(payload["final_release_ok"]) self.assertTrue(payload["final_release_report_ok"]) self.assertFalse(payload["final_release_report_matches_latest"]) self.assertEqual("domaincheck_release_old", payload["final_release_report_package_name"]) self.assertIn("package_name", payload["final_release_report_stale_reason"]) self.assertEqual("", payload["final_release_gate_decision"]) self.assertEqual([], payload["final_release_gate_blocked_reasons"]) def test_show_latest_release_keeps_final_report_ok_when_it_matches_latest(self) -> None: repo_root = Path(__file__).resolve().parents[2] script_path = repo_root / "show_latest_release.sh" with tempfile.TemporaryDirectory() as temp_dir: release_root = Path(temp_dir) latest_payload = { "package_name": "domaincheck_release_new", "archive_path": str(release_root / "domaincheck_release_new.tar.gz"), "sha256": "new-sha256", } final_report = { "ok": True, "latest_release": latest_payload, "release_gate": { "decision": "ready", "blocked_reasons": [], "verify_ok": True, "smoke_test_ok": True, }, } (release_root / "latest_release.json").write_text( json.dumps(latest_payload, ensure_ascii=False, indent=2), encoding="utf-8", ) (release_root / "final_release_report.json").write_text( json.dumps(final_report, ensure_ascii=False, indent=2), encoding="utf-8", ) env = dict(os.environ) env["DOMAINCHECK_RELEASE_ROOT"] = str(release_root) result = subprocess.run( ["bash", str(script_path)], cwd=repo_root, check=True, capture_output=True, text=True, env=env, ) payload = json.loads(result.stdout) self.assertTrue(payload["final_release_ok"]) self.assertTrue(payload["final_release_report_ok"]) self.assertTrue(payload["final_release_report_matches_latest"]) self.assertEqual("domaincheck_release_new", payload["final_release_report_package_name"]) self.assertEqual("", payload["final_release_report_stale_reason"]) self.assertEqual("ready", payload["final_release_gate_decision"]) self.assertEqual([], payload["final_release_gate_blocked_reasons"]) self.assertTrue(payload["final_release_gate_verify_ok"]) self.assertTrue(payload["final_release_gate_smoke_test_ok"]) def test_show_latest_release_accepts_zip_path_fallback(self) -> None: repo_root = Path(__file__).resolve().parents[2] script_path = repo_root / "show_latest_release.sh" with tempfile.TemporaryDirectory() as temp_dir: release_root = Path(temp_dir) latest_payload = { "package_name": "domaincheck_release_win", "zip_path": str(release_root / "domaincheck_release_win.zip"), "sha256": "zip-sha256", } final_report = { "ok": True, "latest_release": latest_payload, "release_gate": { "decision": "ready", "blocked_reasons": [], "verify_ok": True, "smoke_test_ok": True, }, } (release_root / "latest_release.json").write_text( json.dumps(latest_payload, ensure_ascii=False, indent=2), encoding="utf-8", ) (release_root / "final_release_report.json").write_text( json.dumps(final_report, ensure_ascii=False, indent=2), encoding="utf-8", ) env = dict(os.environ) env["DOMAINCHECK_RELEASE_ROOT"] = str(release_root) result = subprocess.run( ["bash", str(script_path)], cwd=repo_root, check=True, capture_output=True, text=True, env=env, ) payload = json.loads(result.stdout) self.assertTrue(payload["final_release_ok"]) self.assertTrue(payload["final_release_report_ok"]) self.assertTrue(payload["final_release_report_matches_latest"]) self.assertEqual("domaincheck_release_win", payload["final_release_report_package_name"]) self.assertEqual("ready", payload["final_release_gate_decision"]) if __name__ == "__main__": unittest.main()