Realistische Demo-Daten (12 Wochen, 49 Sessions) + Roadmap + README-Verweis
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:
AI-Agent committed 2026-10-02 02:29:17 +00:00
1 parent 25ed34e80e
commit e91cd30479
4 files changed
+4145 -1398

No files matched your search

+15 -7
View File
@@ -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)