import pytest from conftest import auth_header class TestOverview: async def test_get_overview(self, client, admin_user, admin_token, seed_devices, seed_daily_summary, seed_carbon): resp = await client.get("/api/v1/dashboard/overview", headers=auth_header(admin_token)) assert resp.status_code == 200 body = resp.json() assert "device_stats" in body assert "energy_today" in body assert "carbon" in body assert "active_alarms" in body assert "recent_alarms" in body async def test_get_overview_unauthenticated(self, client): resp = await client.get("/api/v1/dashboard/overview") assert resp.status_code == 401 class TestRealtime: async def test_get_realtime_data(self, client, admin_user, admin_token, seed_energy_data): resp = await client.get("/api/v1/dashboard/realtime", headers=auth_header(admin_token)) assert resp.status_code == 200 body = resp.json() assert "timestamp" in body assert "pv_power" in body assert "heatpump_power" in body assert "total_load" in body assert "grid_power" in body class TestLoadCurve: async def test_get_load_curve(self, client, admin_user, admin_token, seed_energy_data): resp = await client.get("/api/v1/dashboard/load-curve", headers=auth_header(admin_token)) # date_trunc is PostgreSQL-specific; SQLite returns 500 assert resp.status_code in (200, 500) if resp.status_code == 200: assert isinstance(resp.json(), list) async def test_get_load_curve_custom_hours(self, client, admin_user, admin_token, seed_energy_data): resp = await client.get( "/api/v1/dashboard/load-curve", params={"hours": 12}, headers=auth_header(admin_token), ) assert resp.status_code in (200, 500)