from __future__ import annotations from pathlib import Path from data.notifications.ops_alerts import OpsAlertSink def test_admin_ops_alert_list_and_page(client, auth_headers, settings, tmp_path: Path): sink = OpsAlertSink(log_path=settings.ops_alert_log_path) sink.emit( alert_type="delivery_watchdog_failed", title="Gaokao delivery watchdog detected failed events", body="station failed once", details={"channel": "station", "failed": 1}, ) api = client.get("/api/admin/notifications/ops-alerts", headers=auth_headers) assert api.status_code == 200, api.text body = api.json() assert body["total"] == 1 assert body["items"][0]["alert_type"] == "delivery_watchdog_failed" assert body["items"][0]["details"]["channel"] == "station" page = client.get("/admin/ops-alerts", headers=auth_headers) assert page.status_code == 200, page.text assert "运维告警审计" in page.text assert "delivery_watchdog_failed" in page.text assert "station failed once" in page.text