1aaef71f52
Document-driven MVP with FastAPI backend, Vue H5, WeChat mini shell, product demo, and Docker dev stack. Co-authored-by: Cursor <cursoragent@cursor.com>
55 lines
1.7 KiB
Python
55 lines
1.7 KiB
Python
def test_training_plan_and_record(client, auth_headers):
|
|
child_id = client.post(
|
|
"/api/children",
|
|
headers=auth_headers,
|
|
json={"name": "训练测试", "birthday": "2016-01-01", "gender": "male"},
|
|
).json()["data"]["id"]
|
|
|
|
plan_resp = client.post(
|
|
"/api/training/plans",
|
|
headers=auth_headers,
|
|
json={
|
|
"childId": child_id,
|
|
"goal": "改善头前伸",
|
|
"cycleDays": 28,
|
|
},
|
|
)
|
|
assert plan_resp.status_code == 201
|
|
plan = plan_resp.json()["data"]
|
|
plan_id = plan["id"]
|
|
assert plan["status"] == "active"
|
|
assert plan["detail"]["cycleDays"] == 28
|
|
|
|
detail = client.get(f"/api/training/plans/{plan_id}", headers=auth_headers)
|
|
assert detail.status_code == 200
|
|
|
|
record_resp = client.post(
|
|
f"/api/training/plans/{plan_id}/records",
|
|
headers=auth_headers,
|
|
json={
|
|
"exerciseId": 1,
|
|
"completed": True,
|
|
"score": 81,
|
|
"durationSeconds": 272,
|
|
},
|
|
)
|
|
assert record_resp.status_code == 201
|
|
assert record_resp.json()["data"]["score"] == 81
|
|
|
|
updated = client.get(f"/api/training/plans/{plan_id}", headers=auth_headers).json()["data"]
|
|
assert updated["detail"]["completedDays"] == 1
|
|
|
|
|
|
def test_admin_dashboard(client, auth_headers):
|
|
client.post(
|
|
"/api/children",
|
|
headers=auth_headers,
|
|
json={"name": "看板测试", "birthday": "2015-06-01", "gender": "female"},
|
|
)
|
|
dash = client.get("/api/admin/dashboard", headers=auth_headers)
|
|
assert dash.status_code == 200
|
|
data = dash.json()["data"]
|
|
assert "newChildren" in data
|
|
assert "activePlans" in data
|
|
assert data["newChildren"] >= 1
|