Skip to content

Commit ed7fb89

Browse files
committed
Standardize mock_response_factory usage in active_zone_minutes tests
1 parent 5d4664a commit ed7fb89

File tree

4 files changed

+98
-58
lines changed

4 files changed

+98
-58
lines changed

standardize_mock_responses.py

Lines changed: 50 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,15 @@ def fix_mock_response_usage(match):
114114
return test_func
115115

116116
content = re.sub(pattern5, fix_mock_response_usage, content, flags=re.DOTALL)
117+
118+
# Pattern 6: Replace assert result == mock_response.json.return_value with assert result == expected_data
119+
pattern6 = r'([ \t]*assert\s+.*?==\s*)mock_response\.json\.return_value'
120+
121+
def fix_assertions(match):
122+
before_part = match.group(1)
123+
return f"{before_part}mock_response.json()"
124+
125+
content = re.sub(pattern6, fix_assertions, content)
117126

118127
# If no changes were made, return False
119128
if content == original_content:
@@ -130,37 +139,68 @@ def fix_mock_response_usage(match):
130139
def find_files_to_transform() -> List[Tuple[str, bool]]:
131140
"""Find all test files that need to be transformed."""
132141
test_dir = Path("tests")
142+
# Allow specifying a subdirectory
143+
if len(sys.argv) > 1 and not sys.argv[1].startswith("--"):
144+
test_dir = Path(sys.argv[1])
145+
print(f"Searching in directory: {test_dir}")
146+
133147
result = []
134-
148+
verbose = "--verbose" in sys.argv
149+
135150
for root, _, files in os.walk(test_dir):
136151
for file in files:
137152
if file.endswith(".py") and file.startswith("test_"):
138153
file_path = os.path.join(root, file)
139-
140-
# Check if file uses mock_response directly
154+
155+
# First check for any mention of mock_response
156+
has_mock_response = bool(find_pattern_in_file(file_path, r"mock_response"))
157+
158+
if not has_mock_response:
159+
continue
160+
161+
# More detailed patterns
162+
# Check if file uses mock_response directly as parameter
141163
uses_mock_response = bool(
142164
find_pattern_in_file(
143165
file_path, r"def\s+test_\w+\([^)]*,\s*mock_response\s*[,)]"
144166
)
145167
)
146-
168+
147169
# Check if file directly manipulates mock_response
148170
manipulates_mock_response = bool(
149171
find_pattern_in_file(
150172
file_path, r"mock_response\.(json\.return_value|status_code)\s*="
151173
)
152174
)
153-
175+
176+
# Check if file uses mock_response.json.return_value in assertions
177+
uses_return_value_in_assertions = bool(
178+
find_pattern_in_file(
179+
file_path, r"assert\s+.*?=.*?mock_response\.json\.return_value"
180+
)
181+
)
182+
154183
# Check if file uses mock_response_factory
155184
uses_factory = bool(
156185
find_pattern_in_file(file_path, r"mock_response\s*=\s*mock_response_factory")
157186
)
158-
187+
159188
# Determine if file needs transformation
160-
needs_transform = (
161-
uses_mock_response or manipulates_mock_response
162-
) and not uses_factory
163-
189+
needs_transform = (uses_mock_response or manipulates_mock_response) and not uses_factory
190+
191+
# Also flag files that use factory but still use mock_response.json.return_value in assertions
192+
if uses_factory and uses_return_value_in_assertions and not needs_transform:
193+
needs_transform = True
194+
195+
if verbose or needs_transform:
196+
print(f"File: {file_path}")
197+
print(f" Has mock_response: {has_mock_response}")
198+
print(f" Uses as parameter: {uses_mock_response}")
199+
print(f" Manipulates: {manipulates_mock_response}")
200+
print(f" Uses in assertions: {uses_return_value_in_assertions}")
201+
print(f" Uses factory: {uses_factory}")
202+
print(f" Needs transform: {needs_transform}")
203+
164204
if needs_transform:
165205
result.append((file_path, needs_transform))
166206

tests/fitbit_client/resources/active_zone_minutes/test_get_azm_timeseries.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,11 @@
55

66
def test_get_azm_timeseries_with_today_date(azm_resource, mock_response_factory):
77
"""Test using 'today' as the date parameter"""
8-
mock_response = mock_response_factory(200, {"activities-active-zone-minutes": []})
8+
expected_data = {"activities-active-zone-minutes": []}
9+
mock_response = mock_response_factory(200, expected_data)
910
azm_resource.oauth.request.return_value = mock_response
1011
result = azm_resource.get_azm_timeseries_by_date(date="today")
11-
assert result == mock_response.json.return_value
12+
assert result == expected_data
1213
azm_resource.oauth.request.assert_called_once_with(
1314
"GET",
1415
"https://api.fitbit.com/1/user/-/activities/active-zone-minutes/date/today/1d.json",

tests/fitbit_client/resources/active_zone_minutes/test_get_azm_timeseries_by_date.py

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -15,25 +15,23 @@
1515

1616
def test_get_azm_timeseries_by_date_success(azm_resource, mock_response_factory):
1717
"""Test successful retrieval of AZM time series by date with default period"""
18-
mock_response = mock_response_factory(
19-
200,
20-
{
21-
"activities-active-zone-minutes": [
22-
{
23-
"dateTime": "2025-02-01",
24-
"value": {
25-
"activeZoneMinutes": 102,
26-
"fatBurnActiveZoneMinutes": 90,
27-
"cardioActiveZoneMinutes": 8,
28-
"peakActiveZoneMinutes": 4,
29-
},
30-
}
31-
]
32-
},
33-
)
18+
expected_data = {
19+
"activities-active-zone-minutes": [
20+
{
21+
"dateTime": "2025-02-01",
22+
"value": {
23+
"activeZoneMinutes": 102,
24+
"fatBurnActiveZoneMinutes": 90,
25+
"cardioActiveZoneMinutes": 8,
26+
"peakActiveZoneMinutes": 4,
27+
},
28+
}
29+
]
30+
}
31+
mock_response = mock_response_factory(200, expected_data)
3432
azm_resource.oauth.request.return_value = mock_response
3533
result = azm_resource.get_azm_timeseries_by_date(date="2025-02-01")
36-
assert result == mock_response.json.return_value
34+
assert result == expected_data
3735
azm_resource.oauth.request.assert_called_once_with(
3836
"GET",
3937
"https://api.fitbit.com/1/user/-/activities/active-zone-minutes/date/2025-02-01/1d.json",
@@ -46,10 +44,11 @@ def test_get_azm_timeseries_by_date_success(azm_resource, mock_response_factory)
4644

4745
def test_get_azm_timeseries_by_date_explicit_period(azm_resource, mock_response_factory):
4846
"""Test successful retrieval of AZM time series by date with explicit ONE_DAY period"""
49-
mock_response = mock_response_factory(200, {"activities-active-zone-minutes": []})
47+
expected_data = {"activities-active-zone-minutes": []}
48+
mock_response = mock_response_factory(200, expected_data)
5049
azm_resource.oauth.request.return_value = mock_response
5150
result = azm_resource.get_azm_timeseries_by_date(date="2025-02-01", period=Period.ONE_DAY)
52-
assert result == mock_response.json.return_value
51+
assert result == expected_data
5352
azm_resource.oauth.request.assert_called_once_with(
5453
"GET",
5554
"https://api.fitbit.com/1/user/-/activities/active-zone-minutes/date/2025-02-01/1d.json",
@@ -62,10 +61,11 @@ def test_get_azm_timeseries_by_date_explicit_period(azm_resource, mock_response_
6261

6362
def test_get_azm_timeseries_by_date_with_user_id(azm_resource, mock_response_factory):
6463
"""Test getting AZM time series for a specific user"""
65-
mock_response = mock_response_factory(200, {"activities-active-zone-minutes": []})
64+
expected_data = {"activities-active-zone-minutes": []}
65+
mock_response = mock_response_factory(200, expected_data)
6666
azm_resource.oauth.request.return_value = mock_response
6767
result = azm_resource.get_azm_timeseries_by_date(date="2025-02-01", user_id="123ABC")
68-
assert result == mock_response.json.return_value
68+
assert result == expected_data
6969
azm_resource.oauth.request.assert_called_once_with(
7070
"GET",
7171
"https://api.fitbit.com/1/user/123ABC/activities/active-zone-minutes/date/2025-02-01/1d.json",

tests/fitbit_client/resources/active_zone_minutes/test_get_azm_timeseries_by_interval.py

Lines changed: 24 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -18,35 +18,33 @@
1818

1919
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 = 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-
},
21+
expected_data = {
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,
3330
},
34-
{
35-
"dateTime": "2025-02-02",
36-
"value": {
37-
"activeZoneMinutes": 47,
38-
"fatBurnActiveZoneMinutes": 43,
39-
"cardioActiveZoneMinutes": 4,
40-
},
31+
},
32+
{
33+
"dateTime": "2025-02-02",
34+
"value": {
35+
"activeZoneMinutes": 47,
36+
"fatBurnActiveZoneMinutes": 43,
37+
"cardioActiveZoneMinutes": 4,
4138
},
42-
]
43-
},
44-
)
39+
},
40+
]
41+
}
42+
mock_response = mock_response_factory(200, expected_data)
4543
azm_resource.oauth.request.return_value = mock_response
4644
result = azm_resource.get_azm_timeseries_by_interval(
4745
start_date="2025-02-01", end_date="2025-02-02"
4846
)
49-
assert result == mock_response.json.return_value
47+
assert result == expected_data
5048
azm_resource.oauth.request.assert_called_once_with(
5149
"GET",
5250
"https://api.fitbit.com/1/user/-/activities/active-zone-minutes/date/2025-02-01/2025-02-02.json",
@@ -59,12 +57,13 @@ def test_get_azm_timeseries_by_interval_success(azm_resource, mock_response_fact
5957

6058
def test_get_azm_timeseries_by_interval_with_user_id(azm_resource, mock_response_factory):
6159
"""Test getting AZM time series by date range for a specific user"""
62-
mock_response = mock_response_factory(200, {"activities-active-zone-minutes": []})
60+
expected_data = {"activities-active-zone-minutes": []}
61+
mock_response = mock_response_factory(200, expected_data)
6362
azm_resource.oauth.request.return_value = mock_response
6463
result = azm_resource.get_azm_timeseries_by_interval(
6564
start_date="2025-02-01", end_date="2025-02-02", user_id="123ABC"
6665
)
67-
assert result == mock_response.json.return_value
66+
assert result == expected_data
6867
azm_resource.oauth.request.assert_called_once_with(
6968
"GET",
7069
"https://api.fitbit.com/1/user/123ABC/activities/active-zone-minutes/date/2025-02-01/2025-02-02.json",

0 commit comments

Comments
 (0)