INITIAL COMMIT

This commit is contained in:
2026-06-16 15:14:37 +02:00
commit 1477ec36fd
49 changed files with 6835 additions and 0 deletions

51
tests/test_coach.py Normal file
View File

@ -0,0 +1,51 @@
from __future__ import annotations
from datetime import date
from garmin_coach_clone.coach import (
best_workout_for_date,
find_workout_like_objects,
task_workout_for_date,
)
def test_best_workout_for_date_requires_date_match() -> None:
plan = {
"phases": [
{
"scheduledDate": "2026-06-17",
"workout": {"workoutSegments": [{"workoutSteps": []}]},
}
]
}
assert best_workout_for_date(plan, date(2026, 6, 16)) is None
def test_best_workout_for_date_returns_nested_matched_workout() -> None:
workout = {"workoutSegments": [{"workoutSteps": []}]}
plan = {"items": [{"date": "2026-06-16", "workout": workout}]}
assert best_workout_for_date(plan, date(2026, 6, 16)) == workout
def test_find_workout_like_objects_finds_segments_and_steps() -> None:
data = {
"a": {"workoutSegments": []},
"b": [{"workoutSteps": []}],
}
assert len(find_workout_like_objects(data)) == 2
def test_task_workout_for_date_returns_adaptive_task_workout() -> None:
workout = {"workoutName": "Sprint", "workoutUuid": "abc"}
plan = {
"taskList": [
{"calendarDate": "2026-06-15", "taskWorkout": {"workoutName": "Base"}},
{"calendarDate": "2026-06-16", "taskWorkout": workout},
]
}
assert task_workout_for_date(plan, date(2026, 6, 16)) == workout
assert task_workout_for_date(plan, date(2026, 6, 17)) is None