Files
onGuard24/tests/test_status.py

64 lines
2.5 KiB
Python
Raw Permalink Normal View History

from unittest.mock import AsyncMock, patch
from fastapi.testclient import TestClient
def test_status_without_integrations(client: TestClient) -> None:
"""Без БД и без URL внешних сервисов — всё disabled."""
r = client.get("/api/v1/status")
assert r.status_code == 200
data = r.json()
assert data["service"] == "onGuard24"
assert data["database"] == "disabled"
assert data["vault"] == "disabled"
assert data["grafana"] == "disabled"
assert data["forgejo"] == "disabled"
def test_status_with_mocks(client: TestClient) -> None:
"""Моки внешних вызовов — ok-ветки без сети."""
with (
patch("onguard24.status_snapshot.vault_ping", new_callable=AsyncMock) as vp,
patch("onguard24.status_snapshot.grafana_api.ping", new_callable=AsyncMock) as gp,
patch(
"onguard24.status_snapshot.grafana_api.get_signed_in_user",
new_callable=AsyncMock,
) as gu,
patch("onguard24.status_snapshot.forgejo_api.probe", new_callable=AsyncMock) as fp,
):
vp.return_value = (True, None)
gp.return_value = (True, None)
gu.return_value = ({"login": "tester", "email": "t@x"}, None)
fp.return_value = {"status": "ok", "url": "https://x", "api": "authenticated", "login": "u"}
# Подмена полей settings (pydantic-settings иначе тянет env поверх конструктора)
from types import SimpleNamespace
app = client.app
real = app.state.settings
app.state.settings = SimpleNamespace(
database_url="",
vault_addr="https://vault.example",
vault_token="t",
grafana_url="https://grafana.example",
grafana_service_account_token="g",
grafana_sources_json="",
forgejo_url="https://git.example",
forgejo_token="f",
grafana_webhook_secret="",
http_addr="0.0.0.0:8080",
log_level="info",
)
try:
r = client.get("/api/v1/status")
finally:
app.state.settings = real
assert r.status_code == 200
d = r.json()
assert d["vault"]["status"] == "ok"
assert d["grafana"]["status"] == "ok"
assert len(d["grafana"]["instances"]) == 1
assert d["grafana"]["instances"][0].get("service_account_login") == "tester"
assert d["forgejo"]["status"] == "ok"