from __future__ import annotations
import importlib.util
import json
import os
import subprocess
import sys
import tempfile
import unittest
from pathlib import Path
SCRIPT = Path(__file__).with_name("check_desktop_backend_drift.py")
SPEC = importlib.util.spec_from_file_location("check_desktop_backend_drift", SCRIPT)
assert SPEC and SPEC.loader
MODULE = importlib.util.module_from_spec(SPEC)
sys.modules[SPEC.name] = MODULE
SPEC.loader.exec_module(MODULE)
class ServingShaTests(unittest.TestCase):
def test_accepts_only_40_lowercase_hex(self) -> None:
sha = "a" * 40
self.assertEqual(MODULE.serving_sha({"backend_release_sha": sha}), sha)
self.assertIsNone(MODULE.serving_sha({"backend_release_sha": "ABC" + "a" * 37}))
self.assertIsNone(MODULE.serving_sha({"backend_release_sha": "deadbeef"}))
self.assertIsNone(MODULE.serving_sha({}))
self.assertIsNone(MODULE.serving_sha({"backend_release_sha": None}))
def test_unknown_sha_table_omits_deployed_at(self) -> None:
row = MODULE.ServiceDrift("api-backend", "unknown", None, None, (), True)
table = MODULE.render_table((row,))
self.assertIn("`unknown`", table)
self.assertNotIn("Deployed at", table)
def test_self_test_mode_passes(self) -> None:
result = subprocess.run(
[sys.executable, str(SCRIPT), "--self-test"],
check=False,
capture_output=True,
text=True,
)
self.assertEqual(result.returncode, 0, result.stdout + result.stderr)
self.assertIn("self-test OK", result.stdout)
def test_self_test_mode_ignores_hook_git_dir(self) -> None:
env = os.environ.copy()
env["GIT_DIR"] = "/nonexistent/hook.git"
env["GIT_WORK_TREE"] = "/nonexistent/worktree"
env["GIT_INDEX_FILE"] = "/nonexistent/index"
result = subprocess.run(
[sys.executable, str(SCRIPT), "--self-test"],
check=False,
capture_output=True,
text=True,
env=env,
)
self.assertEqual(result.returncode, 0, result.stdout + result.stderr)
self.assertIn("self-test OK", result.stdout)
def test_writes_summary_and_exits_zero_without_strict(self) -> None:
with tempfile.TemporaryDirectory() as raw:
summary = Path(raw) / "summary.md"
desktop = Path(raw) / "desktop.json"
api = Path(raw) / "api.json"
desktop.write_text("{}", encoding="utf-8")
api.write_text(json.dumps({"backend_release_sha": None}), encoding="utf-8")
code = MODULE.report(
desktop_health=MODULE._load_json(desktop),
api_health=MODULE._load_json(api),
repo=Path(__file__).resolve().parents[2],
base="HEAD",
summary_file=summary,
strict=False,
)
self.assertEqual(code, 0)
text = summary.read_text(encoding="utf-8")
self.assertIn("Backend drift at promotion", text)
self.assertIn("`unknown`", text)
if __name__ == "__main__":
unittest.main()