import unittest from types import SimpleNamespace from fastapi.testclient import TestClient from app.core.security import get_password_hash from app.db import get_db_session from app.main import app class StubScalarResult: def __init__(self, user=None): self.user = user def scalar(self): return 1 def scalar_one_or_none(self): return self.user class StubReadyDb: def __init__(self, password="rotated-secret"): self.user = SimpleNamespace( username="admin@example.com", password_hash=get_password_hash(password), ) def execute(self, _statement): return StubScalarResult(self.user) class StubBrokenDb: def execute(self, _statement): raise RuntimeError("database unavailable") class SystemApiTestCase(unittest.TestCase): def tearDown(self): app.dependency_overrides.clear() def test_readiness_returns_pilot_assets(self): app.dependency_overrides[get_db_session] = lambda: StubReadyDb() client = TestClient(app) response = client.get("/api/v1/system/readiness") self.assertEqual(response.status_code, 200) payload = response.json()["data"] self.assertEqual(payload["status"], "ready") self.assertEqual(payload["pilot_assets"]["default_admin"]["username"], "admin@example.com") self.assertTrue(payload["pilot_assets"]["default_admin"]["password_rotated"]) self.assertGreaterEqual(len(payload["pilot_assets"]["demo_flow"]), 4) self.assertTrue(any(item["key"] == "database" and item["status"] == "ok" for item in payload["checks"])) self.assertTrue(any(item["key"] == "default_admin_password" and item["status"] == "ok" for item in payload["checks"])) def test_readiness_warns_when_default_admin_password_is_active(self): app.dependency_overrides[get_db_session] = lambda: StubReadyDb(password="123456") client = TestClient(app) response = client.get("/api/v1/system/readiness") self.assertEqual(response.status_code, 200) payload = response.json()["data"] self.assertEqual(payload["status"], "ready") self.assertFalse(payload["pilot_assets"]["default_admin"]["password_rotated"]) self.assertGreaterEqual(payload["summary"]["warnings"], 1) self.assertTrue(any(item["key"] == "default_admin_password" and item["status"] == "warning" for item in payload["checks"])) def test_readiness_degrades_when_database_check_fails(self): app.dependency_overrides[get_db_session] = lambda: StubBrokenDb() client = TestClient(app) response = client.get("/api/v1/system/readiness") self.assertEqual(response.status_code, 200) payload = response.json()["data"] self.assertEqual(payload["status"], "degraded") self.assertEqual(payload["summary"]["failed_required"], 1) self.assertTrue(any(item["key"] == "database" and item["status"] == "failed" for item in payload["checks"])) if __name__ == "__main__": unittest.main()