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