52 lines
2.0 KiB
Python
52 lines
2.0 KiB
Python
import contextlib
|
|
import io
|
|
import json
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from scripts import run_runtime_incident_journal
|
|
|
|
|
|
class RunRuntimeIncidentJournalTests(unittest.TestCase):
|
|
def test_main_outputs_json_journal(self) -> None:
|
|
payload = {
|
|
"status": "completed",
|
|
"persisted": True,
|
|
"incident_count": 1,
|
|
"severity_counts": {"blocker": 1},
|
|
"recommended_actions": ["check_market_truth_stream_proxy_and_backfill"],
|
|
"latest_incident": {"severity": "blocker", "source": "market_state", "reason": "market_stream_degraded"},
|
|
"items": [],
|
|
"warnings": [],
|
|
}
|
|
output = io.StringIO()
|
|
with patch("scripts.run_runtime_incident_journal.get_trading_runtime_incidents", return_value=payload) as journal:
|
|
with contextlib.redirect_stdout(output):
|
|
exit_code = run_runtime_incident_journal.main(
|
|
env={
|
|
"RUNTIME_INCIDENT_OUTPUT_JSON": "1",
|
|
"RUNTIME_INCIDENT_LIMIT": "7",
|
|
"RUNTIME_INCIDENT_REFRESH": "0",
|
|
}
|
|
)
|
|
|
|
self.assertEqual(exit_code, 0)
|
|
journal.assert_called_once_with(limit=7, refresh=False)
|
|
self.assertEqual(json.loads(output.getvalue())["severity_counts"]["blocker"], 1)
|
|
|
|
def test_main_returns_nonzero_when_journal_unavailable(self) -> None:
|
|
output = io.StringIO()
|
|
with patch(
|
|
"scripts.run_runtime_incident_journal.get_trading_runtime_incidents",
|
|
return_value={"status": "unavailable", "warnings": ["runtime_incident_journal_unavailable"]},
|
|
):
|
|
with contextlib.redirect_stdout(output):
|
|
exit_code = run_runtime_incident_journal.main(env={})
|
|
|
|
self.assertEqual(exit_code, 2)
|
|
self.assertIn("runtime_incident_journal_unavailable", output.getvalue())
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|