Skip to content

Commit 27e9a55

Browse files
committed
Continue standardizing on mock_response_factory
- Update more test files to consistently use mock_response_factory: - nutrition/test_get_food_locales.py - nutrition/test_get_food_units.py - body_timeseries/test_get_body_timeseries_by_date_range.py - nutrition/test_get_recent_foods.py - nutrition/test_get_favorite_foods.py - activity_timeseries/test_get_activity_timeseries_by_date_range.py - active_zone_minutes/test_get_azm_timeseries_by_interval.py - nutrition/test_get_meal.py - nutrition/test_update_meal.py This continues the standardization effort to ensure consistent usage of mock_response_factory throughout the test suite.
1 parent a3a4bdf commit 27e9a55

18 files changed

+162
-124
lines changed

tests/fitbit_client/resources/active_zone_minutes/test_get_azm_timeseries_by_interval.py

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,29 +16,32 @@
1616
from fitbit_client.exceptions import InvalidDateRangeException
1717

1818

19-
def test_get_azm_timeseries_by_interval_success(azm_resource, mock_response):
19+
def test_get_azm_timeseries_by_interval_success(azm_resource, mock_response_factory):
2020
"""Test successful retrieval of AZM time series by date range"""
21-
mock_response.json.return_value = {
22-
"activities-active-zone-minutes": [
23-
{
24-
"dateTime": "2025-02-01",
25-
"value": {
26-
"activeZoneMinutes": 102,
27-
"fatBurnActiveZoneMinutes": 90,
28-
"cardioActiveZoneMinutes": 8,
29-
"peakActiveZoneMinutes": 4,
21+
mock_response = mock_response_factory(
22+
200,
23+
{
24+
"activities-active-zone-minutes": [
25+
{
26+
"dateTime": "2025-02-01",
27+
"value": {
28+
"activeZoneMinutes": 102,
29+
"fatBurnActiveZoneMinutes": 90,
30+
"cardioActiveZoneMinutes": 8,
31+
"peakActiveZoneMinutes": 4,
32+
},
3033
},
31-
},
32-
{
33-
"dateTime": "2025-02-02",
34-
"value": {
35-
"activeZoneMinutes": 47,
36-
"fatBurnActiveZoneMinutes": 43,
37-
"cardioActiveZoneMinutes": 4,
34+
{
35+
"dateTime": "2025-02-02",
36+
"value": {
37+
"activeZoneMinutes": 47,
38+
"fatBurnActiveZoneMinutes": 43,
39+
"cardioActiveZoneMinutes": 4,
40+
},
3841
},
39-
},
40-
]
41-
}
42+
]
43+
},
44+
)
4245
azm_resource.oauth.request.return_value = mock_response
4346
result = azm_resource.get_azm_timeseries_by_interval(
4447
start_date="2025-02-01", end_date="2025-02-02"
@@ -54,9 +57,9 @@ def test_get_azm_timeseries_by_interval_success(azm_resource, mock_response):
5457
)
5558

5659

57-
def test_get_azm_timeseries_by_interval_with_user_id(azm_resource, mock_response):
60+
def test_get_azm_timeseries_by_interval_with_user_id(azm_resource, mock_response_factory):
5861
"""Test getting AZM time series by date range for a specific user"""
59-
mock_response.json.return_value = {"activities-active-zone-minutes": []}
62+
mock_response = mock_response_factory(200, {"activities-active-zone-minutes": []})
6063
azm_resource.oauth.request.return_value = mock_response
6164
result = azm_resource.get_azm_timeseries_by_interval(
6265
start_date="2025-02-01", end_date="2025-02-02", user_id="123ABC"

tests/fitbit_client/resources/activity_timeseries/test_get_activity_timeseries_by_date.py

Lines changed: 19 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,13 @@
1313
from fitbit_client.resources._constants import Period
1414

1515

16-
def test_get_activity_timeseries_by_date_success(activity_timeseries_resource, mock_response):
16+
def test_get_activity_timeseries_by_date_success(
17+
activity_timeseries_resource, mock_response_factory
18+
):
1719
"""Test successful retrieval of activity time series by date"""
18-
mock_response.json.return_value = {
19-
"activities-steps": [{"dateTime": "2024-02-01", "value": "10000"}]
20-
}
20+
mock_response = mock_response_factory(
21+
200, {"activities-steps": [{"dateTime": "2024-02-01", "value": "10000"}]}
22+
)
2123
activity_timeseries_resource.oauth.request.return_value = mock_response
2224
result = activity_timeseries_resource.get_activity_timeseries_by_date(
2325
resource_path=ActivityTimeSeriesPath.STEPS, date="2024-02-01", period=Period.ONE_DAY
@@ -33,9 +35,11 @@ def test_get_activity_timeseries_by_date_success(activity_timeseries_resource, m
3335
)
3436

3537

36-
def test_get_activity_timeseries_by_date_with_user_id(activity_timeseries_resource, mock_response):
38+
def test_get_activity_timeseries_by_date_with_user_id(
39+
activity_timeseries_resource, mock_response_factory
40+
):
3741
"""Test getting time series for a specific user"""
38-
mock_response.json.return_value = {"activities-steps": []}
42+
mock_response = mock_response_factory(200, {"activities-steps": []})
3943
activity_timeseries_resource.oauth.request.return_value = mock_response
4044
result = activity_timeseries_resource.get_activity_timeseries_by_date(
4145
resource_path=ActivityTimeSeriesPath.STEPS,
@@ -68,13 +72,16 @@ def test_get_activity_timeseries_by_date_invalid_date(activity_timeseries_resour
6872
# Local imports
6973

7074

71-
def test_calories_variants(activity_timeseries_resource, mock_response):
75+
def test_calories_variants(activity_timeseries_resource, mock_response_factory):
7276
"""Test different calorie measurement types return expected data"""
73-
mock_response.json.return_value = {
74-
"activities-activityCalories": [{"dateTime": "2024-02-01", "value": "300"}],
75-
"activities-calories": [{"dateTime": "2024-02-01", "value": "2000"}],
76-
"activities-caloriesBMR": [{"dateTime": "2024-02-01", "value": "1700"}],
77-
}
77+
mock_response = mock_response_factory(
78+
200,
79+
{
80+
"activities-activityCalories": [{"dateTime": "2024-02-01", "value": "300"}],
81+
"activities-calories": [{"dateTime": "2024-02-01", "value": "2000"}],
82+
"activities-caloriesBMR": [{"dateTime": "2024-02-01", "value": "1700"}],
83+
},
84+
)
7885
activity_timeseries_resource.oauth.request.return_value = mock_response
7986
calorie_types = [
8087
ActivityTimeSeriesPath.ACTIVITY_CALORIES,

tests/fitbit_client/resources/activity_timeseries/test_get_activity_timeseries_by_date_range.py

Lines changed: 14 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -14,14 +14,19 @@
1414
from fitbit_client.resources._constants import ActivityTimeSeriesPath
1515

1616

17-
def test_get_activity_timeseries_by_date_range_success(activity_timeseries_resource, mock_response):
17+
def test_get_activity_timeseries_by_date_range_success(
18+
activity_timeseries_resource, mock_response_factory
19+
):
1820
"""Test successful retrieval of activity time series by date range"""
19-
mock_response.json.return_value = {
20-
"activities-steps": [
21-
{"dateTime": "2024-02-01", "value": "10000"},
22-
{"dateTime": "2024-02-02", "value": "12000"},
23-
]
24-
}
21+
mock_response = mock_response_factory(
22+
200,
23+
{
24+
"activities-steps": [
25+
{"dateTime": "2024-02-01", "value": "10000"},
26+
{"dateTime": "2024-02-02", "value": "12000"},
27+
]
28+
},
29+
)
2530
activity_timeseries_resource.oauth.request.return_value = mock_response
2631
result = activity_timeseries_resource.get_activity_timeseries_by_date_range(
2732
resource_path=ActivityTimeSeriesPath.STEPS, start_date="2024-02-01", end_date="2024-02-02"
@@ -43,10 +48,10 @@ def test_get_activity_timeseries_by_date_range_success(activity_timeseries_resou
4348

4449

4550
def test_get_activity_timeseries_by_date_range_with_user_id(
46-
activity_timeseries_resource, mock_response
51+
activity_timeseries_resource, mock_response_factory
4752
):
4853
"""Test getting time series by date range for a specific user"""
49-
mock_response.json.return_value = {"activities-steps": []}
54+
mock_response = mock_response_factory(200, {"activities-steps": []})
5055
activity_timeseries_resource.oauth.request.return_value = mock_response
5156
result = activity_timeseries_resource.get_activity_timeseries_by_date_range(
5257
resource_path=ActivityTimeSeriesPath.STEPS,

tests/fitbit_client/resources/body_timeseries/test_get_body_timeseries_by_date_range.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,11 +54,13 @@ def test_get_body_timeseries_by_date_range_max_days(body_timeseries):
5454
)
5555

5656

57-
def test_get_body_timeseries_by_date_range_makes_correct_request(body_timeseries, mock_response):
57+
def test_get_body_timeseries_by_date_range_makes_correct_request(
58+
body_timeseries, mock_response_factory
59+
):
5860
"""Test that the correct endpoint is called with proper parameters."""
5961
# Set up the mock response
62+
mock_response = mock_response_factory(200, {"expected": "response"})
6063
body_timeseries.oauth.request.return_value = mock_response
61-
mock_response.json.return_value = {"expected": "response"}
6264

6365
# Call the method with valid parameters that don't exceed range limits
6466
result = body_timeseries.get_body_timeseries_by_date_range(

tests/fitbit_client/resources/body_timeseries/test_get_bodyfat_timeseries_by_date.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,13 @@ def test_get_bodyfat_timeseries_by_date_period_validation(body_timeseries):
3636
assert f"Period {period.value} not supported for body fat" in str(exc_info.value)
3737

3838

39-
def test_get_bodyfat_timeseries_by_date_makes_correct_request(body_timeseries, mock_response):
39+
def test_get_bodyfat_timeseries_by_date_makes_correct_request(
40+
body_timeseries, mock_response_factory
41+
):
4042
"""Test that the correct endpoint is called with proper parameters."""
4143
# Set up the mock response
44+
mock_response = mock_response_factory(200, {"expected": "response"})
4245
body_timeseries.oauth.request.return_value = mock_response
43-
mock_response.json.return_value = {"expected": "response"}
4446

4547
# Call the method
4648
result = body_timeseries.get_bodyfat_timeseries_by_date(

tests/fitbit_client/resources/body_timeseries/test_get_bodyfat_timeseries_by_date_range.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,11 +42,13 @@ def test_get_bodyfat_timeseries_by_date_range_max_days(body_timeseries):
4242
assert "body fat" in str(exc_info.value)
4343

4444

45-
def test_get_bodyfat_timeseries_by_date_range_makes_correct_request(body_timeseries, mock_response):
45+
def test_get_bodyfat_timeseries_by_date_range_makes_correct_request(
46+
body_timeseries, mock_response_factory
47+
):
4648
"""Test that the correct endpoint is called with proper parameters."""
4749
# Set up the mock response
50+
mock_response = mock_response_factory(200, {"expected": "response"})
4851
body_timeseries.oauth.request.return_value = mock_response
49-
mock_response.json.return_value = {"expected": "response"}
5052

5153
# Call the method with a valid date range (under 30 days)
5254
result = body_timeseries.get_bodyfat_timeseries_by_date_range(

tests/fitbit_client/resources/heartrate_timeseries/test_get_heartrate_timeseries_by_date_range.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,15 +13,15 @@
1313
from fitbit_client.exceptions import ParameterValidationException
1414

1515

16-
def test_get_heartrate_timeseries_by_date_range_success(heartrate_resource, mock_response):
16+
def test_get_heartrate_timeseries_by_date_range_success(heartrate_resource, mock_response_factory):
1717
"""Test successful retrieval of heart rate data by date range"""
1818
response_data = {
1919
"activities-heart": [
2020
{"dateTime": "2024-02-10", "value": {"restingHeartRate": 65, "heartRateZones": []}},
2121
{"dateTime": "2024-02-11", "value": {"restingHeartRate": 68, "heartRateZones": []}},
2222
]
2323
}
24-
mock_response.json.return_value = response_data
24+
mock_response = mock_response_factory(200, response_data)
2525
heartrate_resource.oauth.request.return_value = mock_response
2626
result = heartrate_resource.get_heartrate_timeseries_by_date_range(
2727
start_date="2024-02-10", end_date="2024-02-11"
@@ -37,9 +37,9 @@ def test_get_heartrate_timeseries_by_date_range_success(heartrate_resource, mock
3737
)
3838

3939

40-
def test_get_heartrate_timeseries_by_date_range_today(heartrate_resource, mock_response):
40+
def test_get_heartrate_timeseries_by_date_range_today(heartrate_resource, mock_response_factory):
4141
"""Test that 'today' is accepted in date range"""
42-
mock_response.json.return_value = {"activities-heart": []}
42+
mock_response = mock_response_factory(200, {"activities-heart": []})
4343
heartrate_resource.oauth.request.return_value = mock_response
4444
result = heartrate_resource.get_heartrate_timeseries_by_date_range(
4545
start_date="today", end_date="today"

tests/fitbit_client/resources/nutrition/test_get_favorite_foods.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@
33
"""Tests for the get_favorite_foods endpoint."""
44

55

6-
def test_get_favorite_foods_success(nutrition_resource, mock_response):
6+
def test_get_favorite_foods_success(nutrition_resource, mock_response_factory):
77
"""Test successful retrieval of favorite foods"""
8-
mock_response.json.return_value = [
9-
{"foodId": 12345, "name": "Test Food", "defaultServingSize": 100.0, "calories": 100}
10-
]
8+
mock_response = mock_response_factory(
9+
200, [{"foodId": 12345, "name": "Test Food", "defaultServingSize": 100.0, "calories": 100}]
10+
)
1111
nutrition_resource.oauth.request.return_value = mock_response
1212
result = nutrition_resource.get_favorite_foods()
1313
assert result == mock_response.json.return_value

tests/fitbit_client/resources/nutrition/test_get_food_locales.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,15 @@
33
"""Tests for the get_food_locales endpoint."""
44

55

6-
def test_get_food_locales_success(nutrition_resource, mock_response):
6+
def test_get_food_locales_success(nutrition_resource, mock_response_factory):
77
"""Test successful retrieval of food locales"""
8-
mock_response.json.return_value = [
9-
{"value": "en_US", "label": "United States"},
10-
{"value": "en_GB", "label": "United Kingdom"},
11-
]
8+
mock_response = mock_response_factory(
9+
200,
10+
[
11+
{"value": "en_US", "label": "United States"},
12+
{"value": "en_GB", "label": "United Kingdom"},
13+
],
14+
)
1215
nutrition_resource.oauth.request.return_value = mock_response
1316
result = nutrition_resource.get_food_locales()
1417
assert result == mock_response.json.return_value

tests/fitbit_client/resources/nutrition/test_get_food_log.py

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -11,12 +11,15 @@
1111
from fitbit_client.exceptions import InvalidDateException
1212

1313

14-
def test_get_food_log_success(nutrition_resource, mock_response):
14+
def test_get_food_log_success(nutrition_resource, mock_response_factory):
1515
"""Test successful retrieval of food log entries"""
16-
mock_response.json.return_value = {
17-
"foods": [{"logId": 12345, "loggedFood": {"foodId": 67890, "amount": 100.0}}],
18-
"summary": {"calories": 500},
19-
}
16+
mock_response = mock_response_factory(
17+
200,
18+
{
19+
"foods": [{"logId": 12345, "loggedFood": {"foodId": 67890, "amount": 100.0}}],
20+
"summary": {"calories": 500},
21+
},
22+
)
2023
nutrition_resource.oauth.request.return_value = mock_response
2124
result = nutrition_resource.get_food_log(date="2025-02-08")
2225
assert result == mock_response.json.return_value
@@ -36,9 +39,8 @@ def test_get_food_log_invalid_date(nutrition_resource):
3639
nutrition_resource.get_food_log("invalid-date")
3740

3841

39-
def test_get_food_log_allows_today(nutrition_resource, mock_response):
42+
def test_get_food_log_allows_today(nutrition_resource, mock_response_factory):
4043
"""Test that 'today' is accepted as a valid date"""
41-
mock_response.json.return_value = {"foods": []}
42-
mock_response.headers = {"content-type": "application/json"}
44+
mock_response = mock_response_factory(200, {"foods": []})
4345
nutrition_resource.oauth.request.return_value = mock_response
4446
nutrition_resource.get_food_log("today")

0 commit comments

Comments
 (0)