forked from zhouruizhe/gmTouringMiniApp
Initial commit: gmTouringMiniApp project
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
from fastapi.testclient import TestClient
|
||||
|
||||
from app.main import app
|
||||
|
||||
|
||||
client = TestClient(app)
|
||||
|
||||
|
||||
def preferences(**overrides):
|
||||
payload = {
|
||||
"destination": "深圳市光明区",
|
||||
"themes": ["亲子"],
|
||||
"duration": "half_day",
|
||||
"pace": "relaxed",
|
||||
"interests": ["自然风光", "生态科普"],
|
||||
"adults": 2,
|
||||
"children": 1,
|
||||
"childAges": [6],
|
||||
"transport": "public_transport",
|
||||
"budgetLevel": "standard",
|
||||
"extraRequirements": "",
|
||||
}
|
||||
payload.update(overrides)
|
||||
return payload
|
||||
|
||||
|
||||
def test_health_reports_knowledge_and_mock_model():
|
||||
response = client.get("/api/v1/health")
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert data["status"] == "ok"
|
||||
assert data["knowledgeCount"] >= 15
|
||||
assert data["modelConfigured"] is True
|
||||
|
||||
|
||||
def test_create_plan_only_returns_known_guangming_places():
|
||||
response = client.post("/api/v1/plans", json=preferences())
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert data["conversationId"]
|
||||
assert data["itinerary"]["items"]
|
||||
assert len(data["itinerary"]["items"]) >= 2
|
||||
assert len(data["itinerary"]["items"]) <= 3
|
||||
assert all(
|
||||
item["placeId"].startswith("guangming-")
|
||||
for item in data["itinerary"]["items"]
|
||||
)
|
||||
assert len(data["itinerary"]["sources"]) == len(
|
||||
{item["placeId"] for item in data["itinerary"]["items"]}
|
||||
)
|
||||
|
||||
|
||||
def test_indoor_requirement_filters_out_outdoor_places():
|
||||
response = client.post(
|
||||
"/api/v1/plans",
|
||||
json=preferences(
|
||||
themes=["研学"],
|
||||
interests=["文化场馆"],
|
||||
extraRequirements="下午下雨,只安排室内项目",
|
||||
),
|
||||
)
|
||||
assert response.status_code == 200
|
||||
outdoor_ids = {
|
||||
"guangming-science-park",
|
||||
"guangming-happy-farm",
|
||||
"guangming-hongqiao-park",
|
||||
"guangming-dadingling-greenway",
|
||||
}
|
||||
ids = {item["placeId"] for item in response.json()["itinerary"]["items"]}
|
||||
assert ids.isdisjoint(outdoor_ids)
|
||||
|
||||
|
||||
def test_adjust_existing_plan():
|
||||
created = client.post("/api/v1/plans", json=preferences()).json()
|
||||
response = client.post(
|
||||
f"/api/v1/conversations/{created['conversationId']}/messages",
|
||||
json={"message": "改成室内研学路线"},
|
||||
)
|
||||
assert response.status_code == 200
|
||||
data = response.json()
|
||||
assert data["conversationId"] == created["conversationId"]
|
||||
assert data["changeSummary"]
|
||||
assert data["itinerary"]["items"]
|
||||
|
||||
|
||||
def test_missing_preferences_are_rejected():
|
||||
response = client.post(
|
||||
"/api/v1/plans",
|
||||
json=preferences(themes=[], interests=[]),
|
||||
)
|
||||
assert response.status_code == 422
|
||||
|
||||
|
||||
def test_expired_or_unknown_session_is_404():
|
||||
response = client.post(
|
||||
"/api/v1/conversations/not-found/messages",
|
||||
json={"message": "慢一点"},
|
||||
)
|
||||
assert response.status_code == 404
|
||||
Reference in New Issue
Block a user