import uuid from tests.helpers import auth_headers, client, register_user def _admin_token() -> str: from app.core.config import get_settings settings = get_settings() response = client.post( "/api/admin/auth/login", json={"email": settings.admin_email, "password": settings.admin_password}, ) if response.status_code != 200: raise RuntimeError(f"Admin login failed: {response.text} — run scripts/seed_admin.py") return response.json()["access_token"] def test_attendee_cannot_access_admin_dashboard() -> None: _, token = register_user() response = client.get("/api/admin/dashboard/metrics", headers=auth_headers(token)) assert response.status_code == 401 def test_admin_dashboard_metrics() -> None: token = _admin_token() response = client.get("/api/admin/dashboard/metrics", headers={"Authorization": f"Bearer {token}"}) assert response.status_code == 200 body = response.json() assert "total_revenue_paise" in body assert "tickets_sold" in body assert "upcoming_events" in body def test_admin_lists_catalog() -> None: token = _admin_token() headers = {"Authorization": f"Bearer {token}"} assert client.get("/api/admin/events", headers=headers).status_code == 200 assert client.get("/api/admin/venues", headers=headers).status_code == 200 assert client.get("/api/admin/orders", headers=headers).status_code == 200 assert client.get("/api/admin/payments", headers=headers).status_code == 200 assert client.get("/api/admin/stats/events", headers=headers).status_code == 200 def test_admin_invalid_login() -> None: response = client.post( "/api/admin/auth/login", json={"email": f"nope-{uuid.uuid4().hex}@example.com", "password": "wrongpass"}, ) assert response.status_code == 401