Realistische Demo-Daten (12 Wochen, 49 Sessions) + Roadmap + README-Verweis
Image bauen und in die Registry schieben / build (push) Successful in 8s
Image bauen und in die Registry schieben / build (push) Successful in 8s
- demo-data.json neu generiert: 12 Wochen Push/Pull/Legs mit Plateau- Phasen, Deload-Woche, ausgelassenen Trainingstagen, Reps-Streuung, nicht abgehakten Saetzen und Notizen; dazu 12 Laeufe und 5 Fahrten - ROADMAP.md: interne Roadmap in 4 Phasen (Inhalt in der App bearbeiten, herstellerunabhaengige Info-Texte mit Bildern/Schritten, Plugin-System mit Ollama/Cloud-Coach, Wearable-Import, CLI-Harness, Volumen/1RM, PWA, a11y) - README: Roadmap-Sektion - test_auth: erwartete Demo-Zaehler dynamisch aus der Datei berechnet - Tests: 158 Checks gruen (39+18+43+32+26)
This commit is contained in:
1 parent
25ed34e80e
commit
e91cd30479
4 files changed
+4145
-1398
No files matched your search
+15
-7
@@ -147,7 +147,14 @@ def main():
|
||||
st, imp = req("POST", "/api/import",
|
||||
{"format": "trainingsplan-export-v2",
|
||||
"data": json.dumps(demo)}, token=token_b)
|
||||
check("Demo-Import in Berta", st == 200 and imp["created"] == 22, imp)
|
||||
demo_sessions = len(demo["sessions"])
|
||||
demo_gym = sum(1 for s in demo["sessions"] if s["activity"] == "gym")
|
||||
demo_ex_dates = len({s["date"] for s in demo["sessions"]
|
||||
for e in s.get("entries", [])
|
||||
if e.get("exercise") == "Push/Bankdrücken KH (je Hand)"
|
||||
and e.get("weight")})
|
||||
check("Demo-Import in Berta", st == 200
|
||||
and imp["created"] == demo_sessions, imp)
|
||||
|
||||
# --- Berta trainiert selbst -------------------------------------------
|
||||
st, sess_b = req("POST", "/api/sessions",
|
||||
@@ -161,8 +168,8 @@ def main():
|
||||
|
||||
st, done_b = req("GET", "/api/sessions?status=done", token=token_b)
|
||||
st, done_a = req("GET", "/api/sessions?status=done", token=token_a)
|
||||
check("Isolation: B sieht 23 eigene Sessions (22 Demo + 1)",
|
||||
len(done_b) == 23, len(done_b))
|
||||
check("Isolation: B sieht alle Demo-Sessions + 1 eigene",
|
||||
len(done_b) == demo_sessions + 1, len(done_b))
|
||||
check("Isolation: A sieht seine 1 Session (nicht B)",
|
||||
len(done_a) == 1, len(done_a))
|
||||
|
||||
@@ -191,22 +198,23 @@ def main():
|
||||
|
||||
# --- Workouts-API -----------------------------------------------------
|
||||
st, wo_b = req("GET", "/api/workouts", token=token_b)
|
||||
check("Workouts-API: 23 Workouts", st == 200 and len(wo_b) == 23, len(wo_b))
|
||||
check("Workouts-API: alle Demo-Workouts + eigene",
|
||||
st == 200 and len(wo_b) == demo_sessions + 1, len(wo_b))
|
||||
w = wo_b[0] # neueste Session = Berta heute
|
||||
check("Workouts-API: Shape", w["activity_name"] == "Gym (Kraft)"
|
||||
and w["day"] == "Push" and w["duration_min"] is not None
|
||||
and w["exercises"][0]["name"] == "Bankdrücken KH (je Hand)"
|
||||
and w["exercises"][0]["sets"][0]["weight"] == "40", w)
|
||||
st, wo_b = req("GET", "/api/workouts?activity=gym", token=token_b)
|
||||
check("Workouts nach Import (gym): 15 Demo + 1 eigene", len(wo_b) == 16,
|
||||
len(wo_b))
|
||||
check("Workouts nach Import (gym): Demo + 1 eigene",
|
||||
len(wo_b) == demo_gym + 1, len(wo_b))
|
||||
st, wo_a = req("GET", "/api/workouts", token=token_a)
|
||||
check("A bleibt unberuehrt vom Import", len(wo_a) == 1, len(wo_a))
|
||||
st, stats = req("GET", "/api/stats?exercise="
|
||||
+ urllib.parse.quote("Push/Bankdrücken KH (je Hand)"),
|
||||
token=token_b)
|
||||
check("Statistik aus Demo-Daten + eigene Session",
|
||||
st == 200 and len(stats) == 6
|
||||
st == 200 and len(stats) == demo_ex_dates + 1
|
||||
and stats[0]["weight"] < stats[-1]["weight"]
|
||||
and stats[-1]["weight"] == 40, stats)
|
||||
|
||||
|
||||
Reference in new issue
Block a user