"""Admin dashboard stats — verify all fields the frontend needs are present.""" from unittest.mock import AsyncMock async def test_overview_returns_all_frontend_fields(admin_client, mock_db): mock_db.fetchval = AsyncMock(return_value=0) r = await admin_client.get("/api/v1/admin/stats/overview") assert r.status_code == 200 data = r.json()["data"] # Revenue (extra, for future admin analytics) assert "revenue_today" in data assert "revenue_week" in data assert "revenue_month" in data # Fields the frontend dashboard currently displays assert "products_count" in data assert "bookings_pending" in data assert "bookings_confirmed" in data assert "catalog_value" in data # Bonus fields assert "low_stock_count" in data assert "new_customers_month" in data async def test_overview_requires_admin(auth_client, mock_db): mock_db.fetchval = AsyncMock(return_value=0) r = await auth_client.get("/api/v1/admin/stats/overview") assert r.status_code == 403 async def test_overview_requires_auth(anon_client): r = await anon_client.get("/api/v1/admin/stats/overview") assert r.status_code == 401 async def test_revenue_stats(admin_client, mock_db): mock_db.fetch = AsyncMock(return_value=[]) r = await admin_client.get("/api/v1/admin/stats/revenue?period=month") assert r.status_code == 200 data = r.json()["data"] assert "orders" in data assert "bookings" in data async def test_revenue_invalid_period(admin_client): r = await admin_client.get("/api/v1/admin/stats/revenue?period=decade") assert r.status_code == 422 async def test_activity_feed(admin_client, mock_db): mock_db.fetch = AsyncMock(return_value=[]) r = await admin_client.get("/api/v1/admin/stats/activity") assert r.status_code == 200 assert isinstance(r.json()["data"], list)