"""T2.11 文件上传测试。""" import pytest from fastapi.testclient import TestClient class TestFileUpload: """月报文件上传接口测试。""" def test_upload_txt_file(self, client: TestClient, auth_headers: dict): """上传 TXT 文件应成功解析。""" resp = client.post( "/api/v1/reports/upload", files={"file": ("test.txt", "月报内容:营收 100 万,增长 20%".encode("utf-8"), "text/plain")}, headers=auth_headers, ) assert resp.status_code == 200 data = resp.json()["data"] assert data["filename"] == "test.txt" assert "extracted_text" in data assert "月报内容" in data["extracted_text"] def test_upload_csv_file(self, client: TestClient, auth_headers: dict): """上传 CSV 文件应成功解析。""" csv_content = b"month,revenue\n2024-01,1000000\n2024-02,1200000" resp = client.post( "/api/v1/reports/upload", files={"file": ("report.csv", csv_content, "text/csv")}, headers=auth_headers, ) assert resp.status_code == 200 data = resp.json()["data"] assert "revenue" in data["extracted_text"] def test_upload_no_auth(self, client: TestClient): """未认证应返回 401。""" resp = client.post( "/api/v1/reports/upload", files={"file": ("test.txt", b"content", "text/plain")}, ) assert resp.status_code == 401 def test_upload_unsupported_format(self, client: TestClient, auth_headers: dict): """不支持的文件格式应返回 400。""" resp = client.post( "/api/v1/reports/upload", files={"file": ("test.exe", b"binary", "application/octet-stream")}, headers=auth_headers, ) assert resp.status_code == 400 def test_upload_empty_filename(self, client: TestClient, auth_headers: dict): """空文件名应返回 422。""" resp = client.post( "/api/v1/reports/upload", files={"file": ("", b"content", "text/plain")}, headers=auth_headers, ) assert resp.status_code == 422