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