diff --git a/plugins/trainingsplan/static/index.html b/plugins/trainingsplan/static/index.html index 9c6ece2..0e924fb 100644 --- a/plugins/trainingsplan/static/index.html +++ b/plugins/trainingsplan/static/index.html @@ -129,7 +129,19 @@ const $ = (id) => document.getElementById(id); const $$ = (sel, root = document) => Array.from(root.querySelectorAll(sel)); -const api = (path) => window.BT ? BT.api(path) : fetch(path).then((r) => r.json()); +const api = async (path, options = {}) => { + if (window.BT) return BT.api(path, options); + const opts = {...options}; + if (opts.body !== undefined && !(opts.body instanceof FormData)) { + opts.headers = {"Content-Type": "application/json", ...(opts.headers || {})}; + } + const response = await fetch(path, opts); + const text = await response.text(); + let payload = {}; + try { payload = text ? JSON.parse(text) : {}; } catch (_) { payload = {raw: text}; } + if (!response.ok) throw new Error(payload.error || payload.detail || `HTTP ${response.status}`); + return payload; +}; const esc = (value) => window.BT ? BT.escape(value) : String(value ?? "").replace(/[&<>"']/g, (ch) => ({"&": "&", "<": "<", ">": ">", '"': """, "'": "'"}[ch])); const uid = (prefix) => `${prefix}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`; diff --git a/plugins/trainingstracker/tests/test_app.py b/plugins/trainingstracker/tests/test_app.py index b844b2c..9f3d8ee 100644 --- a/plugins/trainingstracker/tests/test_app.py +++ b/plugins/trainingstracker/tests/test_app.py @@ -52,6 +52,14 @@ def sample_plan() -> dict: "warmup": {"items": ["Mobilisieren"]}, "cooldown": {"items": ["Atmen"]}, "exercises": [{"id": "item-1", "exercise_id": "exercise-push"}], + }, + { + "id": "day-2", + "num": 2, + "name": "Tag 2", + "warmup": {"items": []}, + "cooldown": {"items": []}, + "exercises": [{"id": "item-2", "exercise_id": "exercise-push"}], } ], }, @@ -79,6 +87,14 @@ def sample_plan() -> dict: "warmup": {"items": ["Mobilisieren"]}, "cooldown": {"items": ["Atmen"]}, "exercises": [{"id": "item-1", "exercise_id": "exercise-push"}], + }, + { + "id": "day-2", + "num": 2, + "name": "Tag 2", + "warmup": {"items": []}, + "cooldown": {"items": []}, + "exercises": [{"id": "item-2", "exercise_id": "exercise-push"}], } ], }, @@ -124,6 +140,12 @@ def test_current_progression_update_writes_config_and_draft(tmp_path: Path): payload = response.get_json() exercise = payload["plan"]["config"]["exercises"][0] assert exercise["current_progression_id"] == "progression-negative" + day_progressions = [ + item["exercise"]["current_progression"]["id"] + for day in payload["plan"]["config"]["days"] + for item in day["exercises"] + ] + assert day_progressions == ["progression-negative", "progression-negative"] saved = json.loads(plan_file.read_text(encoding="utf-8")) assert saved["config"]["exercises"][0]["current_progression_id"] == "progression-negative"