from __future__ import annotations import unittest from unittest.mock import patch from app.api.routes.ops import ( ops_doctor_decision, ops_go_live_bundle, ops_go_live_review, ops_go_live_signoff, ops_go_live_summary, ) class OpsApiRoutesTestCase(unittest.TestCase): @patch("app.api.routes.ops.get_ops_go_live_signoff") def test_go_live_signoff_route_uses_service_payload(self, mock_get_ops_go_live_signoff) -> None: mock_get_ops_go_live_signoff.return_value = { "signoff_status": "ready", "headline": "ok", } response = ops_go_live_signoff(base_url="http://127.0.0.1:8100", report_dir="/tmp/signoff") self.assertEqual(0, response.code) self.assertEqual("ready", response.data["signoff_status"]) self.assertEqual("ok", response.data["headline"]) mock_get_ops_go_live_signoff.assert_called_once_with( base_url="http://127.0.0.1:8100", report_dir="/tmp/signoff", ) @patch("app.api.routes.ops.get_ops_go_live_summary") def test_go_live_summary_route_passes_base_url(self, mock_get_ops_go_live_summary) -> None: mock_get_ops_go_live_summary.return_value = { "go_live_status": "attention", } response = ops_go_live_summary(base_url="http://example.test") self.assertEqual(0, response.code) self.assertEqual("attention", response.data["go_live_status"]) mock_get_ops_go_live_summary.assert_called_once_with(base_url="http://example.test") @patch("app.api.routes.ops.get_ops_go_live_bundle") def test_go_live_bundle_route_passes_base_url_and_report_dir(self, mock_get_ops_go_live_bundle) -> None: mock_get_ops_go_live_bundle.return_value = { "status": "missing", } response = ops_go_live_bundle(base_url="http://example.test", report_dir="/tmp/go-live") self.assertEqual(0, response.code) self.assertEqual("missing", response.data["status"]) mock_get_ops_go_live_bundle.assert_called_once_with( base_url="http://example.test", report_dir="/tmp/go-live", ) @patch("app.api.routes.ops.get_ops_go_live_review") def test_go_live_review_route_passes_base_url_and_report_dir(self, mock_get_ops_go_live_review) -> None: mock_get_ops_go_live_review.return_value = { "status": "attention", "headline": "review", } response = ops_go_live_review(base_url="http://example.test", report_dir="/tmp/review") self.assertEqual(0, response.code) self.assertEqual("attention", response.data["status"]) self.assertEqual("review", response.data["headline"]) mock_get_ops_go_live_review.assert_called_once_with( base_url="http://example.test", report_dir="/tmp/review", ) @patch("app.api.routes.ops.get_ops_doctor_decision") def test_doctor_decision_route_passes_base_url_and_report_dir(self, mock_get_ops_doctor_decision) -> None: mock_get_ops_doctor_decision.return_value = { "status": "attention", "headline": "doctor", } response = ops_doctor_decision(base_url="http://example.test", report_dir="/tmp/doctor") self.assertEqual(0, response.code) self.assertEqual("attention", response.data["status"]) self.assertEqual("doctor", response.data["headline"]) mock_get_ops_doctor_decision.assert_called_once_with( base_url="http://example.test", report_dir="/tmp/doctor", ) if __name__ == "__main__": unittest.main()