import os from fastapi.testclient import TestClient os.environ["DATABASE_URL"] = "sqlite:///:memory:" from app.main import app def test_chat_session_and_message_flow() -> None: with TestClient(app) as client: create_session_response = client.post("/api/demo/chat/sessions", json={"tenant_id": "tenant-demo", "channel": "WEB"}) assert create_session_response.status_code == 200 session_payload = create_session_response.json()["data"] session_id = session_payload["session_id"] assert len(session_payload["messages"]) >= 1 assert len(session_payload["sample_prompts"]) >= 1 send_response = client.post( f"/api/demo/chat/sessions/{session_id}/messages", json={"content": "deploy order-service 1.2.3 to test", "context": {}}, ) assert send_response.status_code == 200 send_payload = send_response.json()["data"] task_id = send_payload["task_id"] assert send_payload["parsed_intent"]["app_code"] == "order-service" assert send_payload["next_action"] == "CONFIRM_TASK" confirm_response = client.post( f"/api/demo/chat/sessions/{session_id}/tasks/{task_id}/confirm", json={"comment": "from ui"}, ) assert confirm_response.status_code == 200 confirm_payload = confirm_response.json()["data"] assert confirm_payload["task_id"] == task_id assert confirm_payload["assistant_message"]["role"] == "assistant" session_detail = client.get(f"/api/demo/chat/sessions/{session_id}") assert session_detail.status_code == 200 session_detail_payload = session_detail.json()["data"] assert session_detail_payload["last_task_id"] == task_id assert len(session_detail_payload["messages"]) >= 4 def test_demo_chat_page_exists() -> None: with TestClient(app) as client: response = client.get("/demo/chat") assert response.status_code == 200 assert "智能化部署 Agent Demo" in response.text assert "Conversation" in response.text