feat: add ops center and node onboarding flow
This commit is contained in:
162
domain-api/tests/test_show_latest_release.py
Normal file
162
domain-api/tests/test_show_latest_release.py
Normal file
@@ -0,0 +1,162 @@
|
||||
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()
|
||||
Reference in New Issue
Block a user