mirror of
http://88.130.71.182:3000/BlitTech/badoHair_be.git
synced 2026-06-13 08:49:46 +00:00
58 lines
1.8 KiB
Python
58 lines
1.8 KiB
Python
"""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)
|