multi-agent-system / tests /test_prd_endpoints.py
firepenguindisopanda
updated with new prompts and new workflow to generate a document
94f31ec
Raw
History Blame Contribute Delete
2.83 kB
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