import json import unittest from datetime import datetime from app.services.ops_release_service import _serialize_release_row, _serialize_rollout_row class OpsReleaseServiceContractTests(unittest.TestCase): def test_serialize_release_row_adds_contract_aliases(self) -> None: row = ( 9, "2026.04.18+bd6bcb2", "stable", "bd6bcb2", "ready", "https://example.com/domaincheck.tar.gz", "sha256:test", "release notes", json.dumps( { "source": "package", "manifest": { "artifact_kind": "tarball", "package_name": "domaincheck-2026.04.18+bd6bcb2.tgz", "included_services": ["domaincheck-api", "domaincheck-worker"], "rollback_hint": "切回上一个 current", }, } ), "www", datetime(2026, 4, 18, 9, 0, 0), datetime(2026, 4, 18, 9, 5, 0), datetime(2026, 4, 18, 9, 6, 0), ) payload = _serialize_release_row(row) self.assertEqual("已就绪", payload["status_label"]) self.assertIn("已就绪", payload["summary_text"]) self.assertEqual("release_hub", payload["focus_ref"]["kind"]) self.assertEqual(9, payload["focus_ref"]["release_id"]) self.assertEqual("release_detail", payload["focus_ref"]["section"]) self.assertEqual("tarball", payload["manifest"]["artifact_kind"]) self.assertEqual("domaincheck-2026.04.18+bd6bcb2.tgz", payload["manifest"]["package_name"]) self.assertEqual(["domaincheck-api", "domaincheck-worker"], payload["manifest"]["included_services"]) def test_serialize_rollout_row_adds_contract_aliases(self) -> None: row = ( 11, 9, "rollout-20260418090000-a1b2", json.dumps({"region": "mainland", "role": "worker"}), json.dumps( { "items": [ {"node_code": "mainland-worker-01", "region": "mainland", "role": "worker"}, {"node_code": "mainland-worker-02", "region": "mainland", "role": "worker"}, ] } ), json.dumps({"execution_mode": "ssh", "batch_size": 1}), "running", 1, 2, 2, 1, json.dumps( { "status": "running", "launched_targets": 1, "remaining_targets": 1, "active_jobs": 1, "current_batch_index": 1, "batches_total": 2, } ), "web-ui", datetime(2026, 4, 18, 9, 10, 0), datetime(2026, 4, 18, 9, 11, 0), ) payload = _serialize_rollout_row(row) self.assertEqual("执行中", payload["status_label"]) self.assertEqual(["mainland-worker-01", "mainland-worker-02"], payload["target_node_codes"]) self.assertIn("当前已覆盖 1/2 台节点", payload["summary_text"]) self.assertEqual("release_rollout", payload["focus_ref"]["kind"]) self.assertEqual(11, payload["focus_ref"]["rollout_id"]) self.assertEqual("rollout_jobs", payload["focus_ref"]["section"]) if __name__ == "__main__": unittest.main()