import pytest from conftest import auth_header class TestReportTemplates: async def test_list_report_templates(self, client, admin_user, admin_token, seed_report_template): resp = await client.get("/api/v1/reports/templates", headers=auth_header(admin_token)) assert resp.status_code == 200 body = resp.json() assert isinstance(body, list) assert len(body) >= 1 assert "name" in body[0] assert "report_type" in body[0] async def test_create_report_template(self, client, admin_user, admin_token): resp = await client.post( "/api/v1/reports/templates", json={ "name": "月报模板", "report_type": "monthly", "description": "每月能耗报表", "fields": [{"name": "consumption", "label": "能耗"}], "aggregation": "sum", "time_granularity": "day", }, headers=auth_header(admin_token), ) assert resp.status_code == 200 body = resp.json() assert body["name"] == "月报模板" assert "id" in body async def test_list_templates_unauthenticated(self, client): resp = await client.get("/api/v1/reports/templates") assert resp.status_code == 401 class TestReportTasks: async def test_list_report_tasks(self, client, admin_user, admin_token, seed_report_task): resp = await client.get("/api/v1/reports/tasks", headers=auth_header(admin_token)) assert resp.status_code == 200 body = resp.json() assert isinstance(body, list) assert len(body) >= 1 async def test_create_report_task(self, client, admin_user, admin_token, seed_report_template): resp = await client.post( "/api/v1/reports/tasks", json={ "template_id": seed_report_template.id, "name": "新任务", "export_format": "csv", }, headers=auth_header(admin_token), ) assert resp.status_code == 200 body = resp.json() assert "id" in body async def test_run_report_task(self, client, admin_user, admin_token, seed_report_task): resp = await client.post( f"/api/v1/reports/tasks/{seed_report_task.id}/run", headers=auth_header(admin_token), ) assert resp.status_code == 200 body = resp.json() assert "task_id" in body async def test_run_nonexistent_task(self, client, admin_user, admin_token): resp = await client.post( "/api/v1/reports/tasks/99999/run", headers=auth_header(admin_token), ) assert resp.status_code == 404 async def test_create_task_unauthenticated(self, client): resp = await client.post( "/api/v1/reports/tasks", json={"template_id": 1, "name": "test"}, ) assert resp.status_code == 401