Files
ai-contract-platform/backend/tests/test_system_api.py
T

85 lines
3.0 KiB
Python

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()