@@ -241,3 +241,53 @@ def test_api_gateway_proxy_v2_iam_event():
241241 assert iam .principal_org_id == iam_raw ["principalOrgId" ]
242242 assert iam .user_arn == iam_raw ["userArn" ]
243243 assert iam .user_id == iam_raw ["userId" ]
244+
245+
246+ def test_api_gateway_proxy_event_merged_query_string_parameters ():
247+ """When both multiValueQueryStringParameters and queryStringParameters are present,
248+ resolved_query_string_parameters should merge them (GH #7993)."""
249+ raw_event = load_event ("apiGatewayProxyEvent.json" )
250+ raw_event ["multiValueQueryStringParameters" ] = {"ids" : ["1" , "2" , "3" ]}
251+ raw_event ["queryStringParameters" ] = {"status" : "fizzbuzz" }
252+
253+ parsed_event = APIGatewayProxyEvent (raw_event )
254+ resolved = parsed_event .resolved_query_string_parameters
255+
256+ assert resolved ["ids" ] == ["1" , "2" , "3" ]
257+ assert resolved ["status" ] == ["fizzbuzz" ]
258+
259+
260+ def test_api_gateway_proxy_event_multi_value_takes_precedence ():
261+ """When the same key exists in both, multiValueQueryStringParameters wins."""
262+ raw_event = load_event ("apiGatewayProxyEvent.json" )
263+ raw_event ["multiValueQueryStringParameters" ] = {"key" : ["a" , "b" ]}
264+ raw_event ["queryStringParameters" ] = {"key" : "c" }
265+
266+ parsed_event = APIGatewayProxyEvent (raw_event )
267+ resolved = parsed_event .resolved_query_string_parameters
268+
269+ assert resolved ["key" ] == ["a" , "b" ]
270+
271+
272+ def test_api_gateway_proxy_event_only_single_value_query_params ():
273+ """When only queryStringParameters is present, it should still work."""
274+ raw_event = load_event ("apiGatewayProxyEvent.json" )
275+ raw_event ["multiValueQueryStringParameters" ] = None
276+ raw_event ["queryStringParameters" ] = {"status" : "active" }
277+
278+ parsed_event = APIGatewayProxyEvent (raw_event )
279+ resolved = parsed_event .resolved_query_string_parameters
280+
281+ assert resolved ["status" ] == ["active" ]
282+
283+
284+ def test_api_gateway_proxy_event_only_multi_value_query_params ():
285+ """When only multiValueQueryStringParameters is present, it should still work."""
286+ raw_event = load_event ("apiGatewayProxyEvent.json" )
287+ raw_event ["multiValueQueryStringParameters" ] = {"ids" : ["1" , "2" ]}
288+ raw_event ["queryStringParameters" ] = None
289+
290+ parsed_event = APIGatewayProxyEvent (raw_event )
291+ resolved = parsed_event .resolved_query_string_parameters
292+
293+ assert resolved ["ids" ] == ["1" , "2" ]
0 commit comments