Files
dreamweaver/backend/tests/test_profiles.py
zhangtuo e9d7f8832a Initial commit: clean project structure
- Backend: FastAPI + SQLAlchemy + Celery (Python 3.11+)
- Frontend: Vue 3 + TypeScript + Pinia + Tailwind
- Admin Frontend: separate Vue 3 app for management
- Docker Compose: 9 services orchestration
- Specs: design prototypes, memory system PRD, product roadmap

Cleanup performed:
- Removed temporary debug scripts from backend root
- Removed deprecated admin_app.py (embedded UI)
- Removed duplicate docs from admin-frontend
- Updated .gitignore for Vite cache and egg-info
2026-01-20 18:20:03 +08:00

79 lines
2.4 KiB
Python

"""Child profile API tests."""
from datetime import date
def _calc_age(birth_date: date) -> int:
today = date.today()
return today.year - birth_date.year - (
(today.month, today.day) < (birth_date.month, birth_date.day)
)
def test_list_profiles_empty(auth_client):
response = auth_client.get("/api/profiles")
assert response.status_code == 200
data = response.json()
assert data["profiles"] == []
assert data["total"] == 0
def test_create_update_delete_profile(auth_client):
payload = {
"name": "小明",
"birth_date": "2020-05-12",
"gender": "male",
"interests": ["太空", "机器人"],
"growth_themes": ["勇气"],
}
response = auth_client.post("/api/profiles", json=payload)
assert response.status_code == 201
data = response.json()
assert data["name"] == payload["name"]
assert data["gender"] == payload["gender"]
assert data["interests"] == payload["interests"]
assert data["growth_themes"] == payload["growth_themes"]
assert data["age"] == _calc_age(date.fromisoformat(payload["birth_date"]))
profile_id = data["id"]
update_payload = {"growth_themes": ["分享", "独立"]}
response = auth_client.put(f"/api/profiles/{profile_id}", json=update_payload)
assert response.status_code == 200
data = response.json()
assert data["growth_themes"] == update_payload["growth_themes"]
response = auth_client.delete(f"/api/profiles/{profile_id}")
assert response.status_code == 200
assert response.json()["message"] == "Deleted"
def test_profile_limit_and_duplicate(auth_client):
# 先测试重复名称(在达到限制前)
response = auth_client.post(
"/api/profiles",
json={"name": "孩子1", "gender": "female"},
)
assert response.status_code == 201
response = auth_client.post(
"/api/profiles",
json={"name": "孩子1", "gender": "female"},
)
assert response.status_code == 409 # 重复名称
# 继续创建到上限
for i in range(2, 6):
response = auth_client.post(
"/api/profiles",
json={"name": f"孩子{i}", "gender": "female"},
)
assert response.status_code == 201
# 测试数量限制
response = auth_client.post(
"/api/profiles",
json={"name": "孩子6", "gender": "female"},
)
assert response.status_code == 400 # 超过5个限制