import os import sys import tempfile from pathlib import Path PROJECT_ROOT = Path(__file__).resolve().parents[1] sys.path.insert(0, str(PROJECT_ROOT)) db = tempfile.NamedTemporaryFile(delete=False, suffix=".db") db.close() os.environ["DATABASE_URL"] = "sqlite:///" + db.name.replace("\\", "/") os.environ["API_KEY"] = "test-key" os.environ["LEGACY_ALLOWED_QUERIES"] = "{}" os.environ["LEGACY_DATABASE_URL"] = "" os.environ["LEGACY_PROJECT_QUERY"] = "" os.environ["MODEL_PROVIDER"] = "noop" os.environ["SCHEDULER_ENABLED"] = "false" from fastapi.testclient import TestClient from app.core.database import Base, engine from app.main import app def request(method: str, url: str, **kwargs): client = TestClient(app) headers = kwargs.pop("headers", {}) headers.setdefault("X-API-Key", "test-key") response = getattr(client, method)(url, headers=headers, **kwargs) response.raise_for_status() return response try: Base.metadata.create_all(bind=engine) project = request( "post", "/api/v1/business/projects", json={ "actor": "smoke", "data": { "code": "P-VERIFY-001", "name": "Verify Project", "owner": "tester", "status": "执行中", "budget_amount": 1000, "actual_amount": 200, }, }, ).json() print("project:", project["data"]["code"]) report = request("get", "/api/v1/reports/daily-brief").json() print("report:", report["title"]) command = request( "post", "/api/v1/integrations/feishu/commands/preview", json={"text": "日报", "auto_reply": False}, ).json() print("command:", command["command"]) ai = request( "post", "/api/v1/ai/ask", json={"prompt": "生成项目摘要", "context": {"project": "P-VERIFY-001"}}, ).json() print("ai:", ai["provider"]) print("smoke verification ok") finally: engine.dispose() path = Path(db.name) if path.exists(): path.unlink()