Skip to content

Commit 0cd35b3

Browse files
toxinuGeoffrey LEHEE
andauthored
Fix aiohttp tuple parameters handling (#162)
Co-authored-by: Geoffrey LEHEE <[email protected]>
1 parent 64feed0 commit 0cd35b3

File tree

2 files changed

+29
-5
lines changed

2 files changed

+29
-5
lines changed

src/pook/interceptors/aiohttp.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,11 +95,11 @@ async def _on_request(
9595
if not kw.get("params"):
9696
req.url = str(full_url)
9797
else:
98-
req.url = (
99-
str(full_url)
100-
+ "?"
101-
+ urlencode([(x, y) for x, y in kw["params"].items()])
102-
)
98+
# Transform params as a list of tuple
99+
params = kw["params"]
100+
if isinstance(params, dict):
101+
params = [(x, y) for x, y in kw["params"].items()]
102+
req.url = str(full_url) + "?" + urlencode(params)
103103

104104
# If a json payload is provided, serialize it for JSONMatcher support
105105
if json_body := kw.get("json"):

tests/unit/interceptors/aiohttp_test.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,27 @@ async def test_client_headers_both_session_and_request(local_responder):
109109
)
110110
assert res.status == 200
111111
assert await res.read() == b"hello from pook"
112+
113+
114+
@pytest.mark.asyncio
115+
async def test_client_params_dict(local_responder):
116+
""" "Params using dict"""
117+
pook.get(local_responder + "/status/404").reply(200)
118+
async with aiohttp.ClientSession(base_url=local_responder.url) as session:
119+
res = await session.get("/status/404", params={"key": "value"})
120+
assert res.status == 200
121+
assert res.url.query.get("key") == "value"
122+
assert res.url.query.getall("key") == ["value"]
123+
124+
125+
@pytest.mark.asyncio
126+
async def test_client_params_tuple_of_tuple(local_responder):
127+
""" "Params using tuple of tuple for multiple parameter key usage"""
128+
pook.get(local_responder + "/status/404").reply(200)
129+
async with aiohttp.ClientSession(base_url=local_responder.url) as session:
130+
res = await session.get(
131+
"/status/404", params=(("key", "value"), ("key", "another-value"))
132+
)
133+
assert res.status == 200
134+
assert res.url.query.get("key") == "value"
135+
assert res.url.query.getall("key") == ["value", "another-value"]

0 commit comments

Comments
 (0)