94 lines
3.4 KiB
Python
94 lines
3.4 KiB
Python
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()
|