52 lines
1.4 KiB
Python
52 lines
1.4 KiB
Python
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
|