feat(garmin): mark a wrapper 404 with not_found in the error response
garminconnect's own GarminConnectNotFoundError already exists specifically for this (its docstring: "so callers can now catch a missing resource specifically, e.g. deleting an already-deleted workout"), raised by connectapi() for any real HTTP 404. dispatch() now surfaces that distinction as an extra not_found: true field alongside the existing error string, so internal/garmin/client.go (next commit) can tell a definitive 404 apart from a transient failure. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
@@ -269,3 +269,25 @@ def test_authenticate_prevents_later_lazy_startup_login():
|
||||
wrapper.dispatch({"id": 34, "cmd": "call", "params": {"method": "x", "args": {}}})
|
||||
|
||||
mock_startup.assert_not_called()
|
||||
|
||||
|
||||
def test_call_marks_not_found_error_specifically():
|
||||
from garminconnect import GarminConnectNotFoundError
|
||||
|
||||
wrapper._auth_state = "authenticated"
|
||||
wrapper._client = MagicMock()
|
||||
wrapper._client.get_workout_by_id.side_effect = GarminConnectNotFoundError("API Error 404")
|
||||
resp = wrapper.dispatch({
|
||||
"id": 11, "cmd": "call", "params": {"method": "get_workout_by_id", "args": {"workout_id": "999"}},
|
||||
})
|
||||
assert resp == {"id": 11, "error": "API Error 404", "not_found": True}
|
||||
|
||||
|
||||
def test_call_does_not_mark_other_errors_as_not_found():
|
||||
wrapper._auth_state = "authenticated"
|
||||
wrapper._client = MagicMock()
|
||||
wrapper._client.get_workout_by_id.side_effect = Exception("rate limited")
|
||||
resp = wrapper.dispatch({
|
||||
"id": 12, "cmd": "call", "params": {"method": "get_workout_by_id", "args": {"workout_id": "999"}},
|
||||
})
|
||||
assert resp == {"id": 12, "error": "rate limited"}
|
||||
|
||||
Reference in New Issue
Block a user