v1.4.0: модули с веб-UI, правое меню, расширенные тесты
Реестр MODULE_MOUNTS: API, ui_router, фрагменты главной, EventBus. Главная и страницы модулей с правой навигацией из реестра; wrap_module_html_page. Ingress: публикация alert.received после сохранения в БД. Документация MODULES.md; pytest покрывает API, UI и навигацию. Made-with: Cursor
This commit is contained in:
@ -36,8 +36,11 @@ def test_grafana_webhook_unauthorized_when_secret_set(client: TestClient) -> Non
|
||||
|
||||
|
||||
def test_grafana_webhook_inserts_with_mock_pool(client: TestClient) -> None:
|
||||
from uuid import uuid4
|
||||
|
||||
mock_conn = AsyncMock()
|
||||
mock_conn.execute = AsyncMock()
|
||||
uid = uuid4()
|
||||
mock_conn.fetchrow = AsyncMock(return_value={"id": uid})
|
||||
mock_cm = AsyncMock()
|
||||
mock_cm.__aenter__ = AsyncMock(return_value=mock_conn)
|
||||
mock_cm.__aexit__ = AsyncMock(return_value=None)
|
||||
@ -55,6 +58,37 @@ def test_grafana_webhook_inserts_with_mock_pool(client: TestClient) -> None:
|
||||
headers={"Content-Type": "application/json"},
|
||||
)
|
||||
assert r.status_code == 202
|
||||
mock_conn.execute.assert_called_once()
|
||||
mock_conn.fetchrow.assert_called_once()
|
||||
finally:
|
||||
app.state.pool = real_pool
|
||||
|
||||
|
||||
def test_grafana_webhook_publishes_alert_received(client: TestClient) -> None:
|
||||
from unittest.mock import patch
|
||||
from uuid import uuid4
|
||||
|
||||
mock_conn = AsyncMock()
|
||||
uid = uuid4()
|
||||
mock_conn.fetchrow = AsyncMock(return_value={"id": uid})
|
||||
mock_cm = AsyncMock()
|
||||
mock_cm.__aenter__ = AsyncMock(return_value=mock_conn)
|
||||
mock_cm.__aexit__ = AsyncMock(return_value=None)
|
||||
mock_pool = MagicMock()
|
||||
mock_pool.acquire = MagicMock(return_value=mock_cm)
|
||||
|
||||
app = client.app
|
||||
bus = app.state.event_bus
|
||||
with patch.object(bus, "publish_alert_received", new_callable=AsyncMock) as spy:
|
||||
real_pool = app.state.pool
|
||||
app.state.pool = mock_pool
|
||||
try:
|
||||
r = client.post(
|
||||
"/api/v1/ingress/grafana",
|
||||
content=json.dumps({"title": "x"}),
|
||||
headers={"Content-Type": "application/json"},
|
||||
)
|
||||
assert r.status_code == 202
|
||||
spy.assert_awaited_once()
|
||||
assert spy.await_args.kwargs.get("raw_payload_ref") == uid
|
||||
finally:
|
||||
app.state.pool = real_pool
|
||||
|
||||
Reference in New Issue
Block a user