chatbotai_rag / tests /test_api.py
quoctrong's picture
feat: production-hardening, upload validation, admin auth, threadpool, logging & HF dataset repo integration
0d6af6d
Raw
History Blame Contribute Delete
2.14 kB
"""
Unit tests for FastAPI REST Endpoints in src/main.py.
"""
import sys
from pathlib import Path
sys.path.append(str(Path(__file__).parent.parent))
import src.core.win_fix
import os
import numpy as np
from unittest.mock import patch, MagicMock
import sentence_transformers
# Mock SentenceTransformer encode to prevent slow model downloads during unit testing
mock_st = MagicMock()
mock_st.encode.return_value = np.zeros((1, 384), dtype=np.float32)
mock_st.get_sentence_embedding_dimension.return_value = 384
with patch.object(sentence_transformers, "SentenceTransformer", return_value=mock_st):
from fastapi.testclient import TestClient
from src.main import app
client = TestClient(app)
def test_get_sessions():
"""Test retrieving session metadata dictionary."""
response = client.get("/api/sessions")
assert response.status_code == 200
data = response.json()
assert isinstance(data, dict)
def test_create_session():
"""Test creating a new session."""
response = client.post("/api/sessions/new")
assert response.status_code == 200
data = response.json()
assert "id" in data
assert data["id"].startswith("session_")
assert data["doc_count"] == 0
def test_ask_chitchat_query():
"""Test asking a conversational chitchat query with mocked pipeline."""
new_sess = client.post("/api/sessions/new").json()
sess_id = new_sess["id"]
mock_rag_result = {
"answer": "Xin chào! Tôi là DocBrain AI.",
"confidence": 1.0,
"is_conversational": True,
"sources": [],
"execution_time_sec": 0.05
}
with patch("src.main.pipeline.ask", return_value=mock_rag_result):
payload = {"query": "xin chào"}
response = client.post(f"/api/sessions/{sess_id}/ask", json=payload)
assert response.status_code == 200
data = response.json()
assert "answer_short" in data
assert "answer_full" in data
assert data["confidence"] == 1.0
if __name__ == "__main__":
test_get_sessions()
test_create_session()
test_ask_chitchat_query()
print("✅ test_api.py PASSED!")