feat: smart recreate and dedupe
This commit is contained in:
@ -216,6 +216,7 @@ def test_sync_recreates_date_name_match_with_different_steps(tmp_path, monkeypat
|
||||
|
||||
assert result["created"] == 1
|
||||
assert garmin.client.unscheduled == ["s1"]
|
||||
assert garmin.client.deleted == ["w-old"]
|
||||
assert garmin.client.scheduled == [("w1", "2026-06-16")]
|
||||
|
||||
|
||||
@ -295,6 +296,7 @@ def test_current_mapping_recreates_when_calendar_entry_is_missing(
|
||||
assert garmin.client.uploads
|
||||
assert garmin.client.scheduled == [("w1", "2026-06-16")]
|
||||
assert garmin.client.unscheduled == []
|
||||
assert garmin.client.deleted == ["w-old"]
|
||||
mapping = repo.get_clone_mapping("2026-06-16")
|
||||
assert mapping is not None
|
||||
assert mapping["clone_workout_id"] == "w1"
|
||||
|
||||
@ -60,6 +60,44 @@ def test_workout_steps_equal_ignores_ids_but_compares_steps() -> None:
|
||||
assert not workout_steps_equal(left, right)
|
||||
|
||||
|
||||
def test_workout_steps_equal_ignores_garmin_upload_defaults() -> None:
|
||||
left = build_dummy_cycling_workout("Left")
|
||||
right = build_dummy_cycling_workout("Right")
|
||||
repeat = right["workoutSegments"][0]["workoutSteps"][1]
|
||||
repeat["stepOrder"] = 2
|
||||
repeat["childStepId"] = 1
|
||||
repeat["smartRepeat"] = False
|
||||
for idx, step in enumerate(right["workoutSegments"][0]["workoutSteps"], start=1):
|
||||
step["stepId"] = 1000 + idx
|
||||
step["stepOrder"] = idx
|
||||
step["equipmentType"] = {
|
||||
"displayOrder": 0,
|
||||
"equipmentTypeId": 0,
|
||||
"equipmentTypeKey": None,
|
||||
}
|
||||
step["strokeType"] = {
|
||||
"displayOrder": 0,
|
||||
"strokeTypeId": 0,
|
||||
"strokeTypeKey": None,
|
||||
}
|
||||
for idx, step in enumerate(repeat["workoutSteps"], start=3):
|
||||
step["childStepId"] = 1
|
||||
step["stepId"] = 1000 + idx
|
||||
step["stepOrder"] = idx
|
||||
step["equipmentType"] = {
|
||||
"displayOrder": 0,
|
||||
"equipmentTypeId": 0,
|
||||
"equipmentTypeKey": None,
|
||||
}
|
||||
step["strokeType"] = {
|
||||
"displayOrder": 0,
|
||||
"strokeTypeId": 0,
|
||||
"strokeTypeKey": None,
|
||||
}
|
||||
|
||||
assert workout_steps_equal(left, right)
|
||||
|
||||
|
||||
def test_existing_clone_names_filters_by_prefix_and_date() -> None:
|
||||
names = existing_clone_names(
|
||||
[
|
||||
|
||||
Reference in New Issue
Block a user