diff --git a/demo.py b/demo.py index 07b27a2b..7ee47732 100755 --- a/demo.py +++ b/demo.py @@ -144,7 +144,7 @@ def __init__(self): # API call settings self.default_limit = 100 self.start = 0 - self.start_badge = 1 # Badge related calls start counting at 1 + self.start_badge = 1 # Badge, challenge and goal calls start counting at 1 # Activity settings self.activityfile = "test_data/*.gpx" # Supported file types: .fit .gpx .tcx @@ -4942,26 +4942,26 @@ def execute_api_call(api: Garmin, key: str) -> None: "get_active_goals": lambda: call_and_display( api.get_goals, status="active", - start=config.start, + start=config.start_badge, limit=config.default_limit, method_name="get_goals", - api_call_desc=f"api.get_goals(status='active', start={config.start}, limit={config.default_limit})", + api_call_desc=f"api.get_goals(status='active', start={config.start_badge},limit={config.default_limit})", ), "get_future_goals": lambda: call_and_display( api.get_goals, status="future", - start=config.start, + start=config.start_badge, limit=config.default_limit, method_name="get_goals", - api_call_desc=f"api.get_goals(status='future', start={config.start}, limit={config.default_limit})", + api_call_desc=f"api.get_goals(status='future', start={config.start_badge},limit={config.default_limit})", ), "get_past_goals": lambda: call_and_display( api.get_goals, status="past", - start=config.start, + start=config.start_badge, limit=config.default_limit, method_name="get_goals", - api_call_desc=f"api.get_goals(status='past', start={config.start}, limit={config.default_limit})", + api_call_desc=f"api.get_goals(status='past', start={config.start_badge},limit={config.default_limit})", ), "get_badge_challenges": lambda: call_and_display( api.get_badge_challenges, diff --git a/garminconnect/__init__.py b/garminconnect/__init__.py index b5b1c5a4..000eb537 100644 --- a/garminconnect/__init__.py +++ b/garminconnect/__init__.py @@ -2036,7 +2036,7 @@ def get_adhoc_challenges(self, start: int, limit: int) -> dict[str, Any]: def get_badge_challenges(self, start: int, limit: int) -> dict[str, Any]: """Return badge challenges for the current user.""" - start = _validate_non_negative_integer(start, "start") + start = _validate_positive_integer(start, "start") limit = _validate_positive_integer(limit, "limit") url = self.garmin_connect_badge_challenges_url params = {"start": str(start), "limit": str(limit)} @@ -2046,7 +2046,7 @@ def get_badge_challenges(self, start: int, limit: int) -> dict[str, Any]: def get_available_badge_challenges(self, start: int, limit: int) -> dict[str, Any]: """Return available badge challenges.""" - start = _validate_non_negative_integer(start, "start") + start = _validate_positive_integer(start, "start") limit = _validate_positive_integer(limit, "limit") url = self.garmin_connect_available_badge_challenges_url params = {"start": str(start), "limit": str(limit)} @@ -2058,7 +2058,7 @@ def get_non_completed_badge_challenges( self, start: int, limit: int ) -> dict[str, Any]: """Return badge non-completed challenges for current user.""" - start = _validate_non_negative_integer(start, "start") + start = _validate_positive_integer(start, "start") limit = _validate_positive_integer(limit, "limit") url = self.garmin_connect_non_completed_badge_challenges_url params = {"start": str(start), "limit": str(limit)} diff --git a/tests/test_garmin_unit.py b/tests/test_garmin_unit.py index 1f27f1d7..6584f8ba 100644 --- a/tests/test_garmin_unit.py +++ b/tests/test_garmin_unit.py @@ -1902,6 +1902,21 @@ def test_get_goals_rejects_zero_start(self, garmin: garminconnect.Garmin): with pytest.raises(ValueError, match="positive integer"): garmin.get_goals(start=0) + @pytest.mark.parametrize( + "method", + [ + "get_badge_challenges", + "get_available_badge_challenges", + "get_non_completed_badge_challenges", + "get_inprogress_virtual_challenges", + ], + ) + def test_badge_challenges_reject_zero_start( + self, garmin: garminconnect.Garmin, method: str + ): + with pytest.raises(ValueError, match="positive integer"): + getattr(garmin, method)(0, 10) + def test_get_goals_sends_sec_fetch_site_header(self, garmin: garminconnect.Garmin): """goal-service silently returns [] without this header (#431).""" with patch.object(garmin, "connectapi", return_value=[]) as mock: