Files
ai-exchange/tests/unit/test_run_maintenance_summary.py
T
2026-05-12 09:03:37 +08:00

53 lines
2.0 KiB
Python

import contextlib
import io
import json
import unittest
from unittest.mock import patch
from scripts import run_maintenance_summary
class RunMaintenanceSummaryTests(unittest.TestCase):
def test_main_outputs_json_summary(self) -> None:
payload = {
"status": "healthy",
"blockers": [],
"warnings": [],
"maintenance_actions": {"automatic_actions": [], "operator_actions": []},
}
output = io.StringIO()
with patch("scripts.run_maintenance_summary.get_maintenance_summary", return_value=payload) as summary:
with contextlib.redirect_stdout(output):
exit_code = run_maintenance_summary.main(
env={
"MAINTENANCE_SUMMARY_OUTPUT_JSON": "1",
"MAINTENANCE_SUMMARY_INSTRUMENT_ID": "2",
"MAINTENANCE_SUMMARY_ALERT_LIMIT": "3",
"MAINTENANCE_SUMMARY_VISUAL_LIMIT": "4",
"MAINTENANCE_SUMMARY_INCIDENT_LIMIT": "5",
}
)
self.assertEqual(exit_code, 0)
summary.assert_called_once_with(instrument_id=2, alert_limit=3, visual_limit=4, incident_limit=5)
self.assertEqual(json.loads(output.getvalue())["status"], "healthy")
def test_main_returns_nonzero_when_blocked(self) -> None:
payload = {
"status": "blocked",
"blockers": ["runtime.current_blockers"],
"warnings": [],
"maintenance_actions": {"automatic_actions": [], "operator_actions": ["resolve_runtime_blockers"]},
}
output = io.StringIO()
with patch("scripts.run_maintenance_summary.get_maintenance_summary", return_value=payload):
with contextlib.redirect_stdout(output):
exit_code = run_maintenance_summary.main(env={})
self.assertEqual(exit_code, 2)
self.assertIn("runtime.current_blockers", output.getvalue())
if __name__ == "__main__":
unittest.main()