Spaces:
Sleeping
Sleeping
| import os | |
| from pathlib import Path | |
| from fastapi.testclient import TestClient | |
| from app.core.database import Base, engine | |
| from app.core.models import User | |
| from app.main import app | |
| from sqlalchemy.orm import Session | |
| TEST_DB_PATH = Path(__file__).parent.parent / "test.db" | |
| def _reset_db(): | |
| # Dispose existing connections | |
| engine.dispose() | |
| # Delete SQLite file to avoid circular FK drop issues | |
| if TEST_DB_PATH.exists(): | |
| os.remove(TEST_DB_PATH) | |
| Base.metadata.create_all(bind=engine) | |
| with Session(engine) as session: | |
| session.add(User(id=1, google_id="test-google-id", email="test@test.com", persona="founder")) | |
| session.commit() | |
| def _start_session(client: TestClient, user_id: int = 1) -> str: | |
| resp = client.post( | |
| "/prd/start", | |
| json={"description": "Test PRD", "user_id": user_id}, | |
| ) | |
| assert resp.status_code == 200 | |
| return resp.json()["session_id"] | |
| # Happy path: PRD chat endpoint | |
| def test_prd_chat_happy(): | |
| _reset_db() | |
| client = TestClient(app) | |
| session_id = _start_session(client) | |
| resp = client.post( | |
| "/prd/chat", | |
| json={ | |
| "session_id": session_id, | |
| "message": "Our main goal is to improve user experience.", | |
| }, | |
| ) | |
| assert resp.status_code == 200 | |
| data = resp.json() | |
| assert "agent_response" in data | |
| assert "missing_requirements" in data | |
| # Sad path: PRD chat with empty message | |
| def test_prd_chat_empty(): | |
| _reset_db() | |
| client = TestClient(app) | |
| session_id = _start_session(client) | |
| resp = client.post("/prd/chat", json={"session_id": session_id, "message": ""}) | |
| assert resp.status_code == 200 | |
| data = resp.json() | |
| assert "agent_response" in data | |
| # Happy path: PRD doc endpoint | |
| def test_prd_doc_happy(): | |
| _reset_db() | |
| client = TestClient(app) | |
| session_id = _start_session(client) | |
| resp = client.get(f"/prd/doc/{session_id}") | |
| assert resp.status_code == 200 | |
| data = resp.json() | |
| assert data["session_id"] == session_id | |
| assert "generated_prd" in data | |
| # Sad path: PRD doc with missing session_id | |
| def test_prd_doc_missing(): | |
| _reset_db() | |
| client = TestClient(app) | |
| resp = client.get("/prd/doc") | |
| assert resp.status_code == 404 | |
| # Happy path: PRD status endpoint | |
| def test_prd_status_happy(): | |
| _reset_db() | |
| client = TestClient(app) | |
| session_id = _start_session(client) | |
| resp = client.get(f"/prd/status/{session_id}") | |
| assert resp.status_code == 200 | |
| data = resp.json() | |
| assert data["session_id"] == session_id | |
| assert "requirements_status" in data | |
| assert "missing_sections" in data | |
| # Sad path: PRD status with missing session_id | |
| def test_prd_status_missing(): | |
| _reset_db() | |
| client = TestClient(app) | |
| resp = client.get("/prd/status") | |
| assert resp.status_code == 404 | |