Skip to content

Commit 3c11ddf

Browse files
authored
Refactor MockResponse class and update tests
refactor mock response handling and improve error behavior.
1 parent 774172b commit 3c11ddf

File tree

1 file changed

+26
-45
lines changed

1 file changed

+26
-45
lines changed

web/tests/test_pandas_web.py

Lines changed: 26 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,30 @@
1-
from unittest.mock import ( # noqa: TID251
2-
mock_open,
3-
patch,
4-
)
5-
1+
from unittest.mock import mock_open, patch
62
import pytest
73
import requests
84

95
from web.pandas_web import Preprocessors
106

117

128
class MockResponse:
9+
"""Minimal mock for requests.Response with correct error behavior."""
1310
def __init__(self, status_code: int, response: dict) -> None:
1411
self.status_code = status_code
1512
self._resp = response
1613

1714
def json(self):
1815
return self._resp
1916

20-
@staticmethod
21-
def raise_for_status() -> None:
22-
return
17+
def raise_for_status(self) -> None:
18+
"""Raise an HTTPError for non-2xx responses (important behavior)."""
19+
if not (200 <= self.status_code < 300):
20+
raise requests.HTTPError(f"HTTP {self.status_code}")
21+
22+
# Add context manager support
23+
def __enter__(self):
24+
return self
25+
26+
def __exit__(self, exc_type, exc, tb):
27+
return False
2328

2429

2530
@pytest.fixture
@@ -31,51 +36,27 @@ def context() -> dict:
3136

3237

3338
@pytest.fixture
34-
def mock_response(monkeypatch, request) -> None:
39+
def mock_response(monkeypatch, request):
40+
"""Safer fixture — ensures parametrize includes correct tuple."""
41+
3542
def mocked_resp(*args, **kwargs):
43+
if not hasattr(request, "param") or len(request.param) != 2:
44+
raise RuntimeError(
45+
"mock_response must be parametrized as (status_code, response_json)"
46+
)
3647
status_code, response = request.param
3748
return MockResponse(status_code, response)
3849

3950
monkeypatch.setattr(requests, "get", mocked_resp)
4051

4152

4253
_releases_list = [
43-
{
44-
"prerelease": False,
45-
"published_at": "2024-01-19T03:34:05Z",
46-
"tag_name": "v1.5.6",
47-
"assets": None,
48-
},
49-
{
50-
"prerelease": False,
51-
"published_at": "2023-11-10T19:07:37Z",
52-
"tag_name": "v2.1.3",
53-
"assets": None,
54-
},
55-
{
56-
"prerelease": False,
57-
"published_at": "2023-08-30T13:24:32Z",
58-
"tag_name": "v2.1.0",
59-
"assets": None,
60-
},
61-
{
62-
"prerelease": False,
63-
"published_at": "2023-04-30T13:24:32Z",
64-
"tag_name": "v2.0.0",
65-
"assets": None,
66-
},
67-
{
68-
"prerelease": True,
69-
"published_at": "2023-01-19T03:34:05Z",
70-
"tag_name": "v1.5.3xd",
71-
"assets": None,
72-
},
73-
{
74-
"prerelease": False,
75-
"published_at": "2027-01-19T03:34:05Z",
76-
"tag_name": "v10.0.1",
77-
"assets": None,
78-
},
54+
{"prerelease": False, "published_at": "2024-01-19T03:34:05Z", "tag_name": "v1.5.6", "assets": None},
55+
{"prerelease": False, "published_at": "2023-11-10T19:07:37Z", "tag_name": "v2.1.3", "assets": None},
56+
{"prerelease": False, "published_at": "2023-08-30T13:24:32Z", "tag_name": "v2.1.0", "assets": None},
57+
{"prerelease": False, "published_at": "2023-04-30T13:24:32Z", "tag_name": "v2.0.0", "assets": None},
58+
{"prerelease": True, "published_at": "2023-01-19T03:34:05Z", "tag_name": "v1.5.3xd", "assets": None},
59+
{"prerelease": False, "published_at": "2027-01-19T03:34:05Z", "tag_name": "v10.0.1", "assets": None},
7960
]
8061

8162

0 commit comments

Comments
 (0)