diff --git a/responses/__init__.py b/responses/__init__.py index 3f6e4743..f5a2193b 100644 --- a/responses/__init__.py +++ b/responses/__init__.py @@ -1051,7 +1051,10 @@ def _parse_request_params( self, url: str ) -> Dict[str, Union[str, int, float, List[Optional[Union[str, int, float]]]]]: params: Dict[str, Union[str, int, float, List[Any]]] = {} - for key, val in groupby(parse_qsl(urlsplit(url).query), lambda kv: kv[0]): + for key, val in groupby( + parse_qsl(urlsplit(url).query, keep_blank_values=True), + lambda kv: kv[0], + ): values = list(map(lambda x: x[1], val)) if len(values) == 1: values = values[0] # type: ignore[assignment] diff --git a/responses/tests/test_matchers.py b/responses/tests/test_matchers.py index 1888ac3b..44544f34 100644 --- a/responses/tests/test_matchers.py +++ b/responses/tests/test_matchers.py @@ -260,6 +260,24 @@ def run(): assert_reset() +def test_query_param_matcher_empty_value(): + @responses.activate + def run(): + responses.add( + responses.GET, + "https://example.com/foo", + match=[ + matchers.query_param_matcher({"bar": ""}), + ], + json={}, + ) + resp = requests.get("https://example.com/foo?bar=") + assert resp.status_code == 200 + + run() + assert_reset() + + def test_query_param_matcher_loose(): @responses.activate def run():