@@ -298,6 +298,53 @@ describe('Converters', () => {
298298 expect ( url . searchParams . getAll ( 'multi' ) ) . toEqual ( [ 'value1' , 'value2' ] ) ;
299299 } ) ;
300300
301+ it ( 'handles same parameter in both queryStringParameters and multiValueQueryStringParameters without duplication' , ( ) => {
302+ // Prepare
303+ const event = {
304+ ...baseEvent ,
305+ queryStringParameters : {
306+ filter : 'published' , // Last value (API Gateway behavior)
307+ } ,
308+ multiValueQueryStringParameters : {
309+ filter : [ 'active' , 'published' ] , // All values (API Gateway behavior)
310+ } ,
311+ } ;
312+
313+ // Act
314+ const request = proxyEventToWebRequest ( event ) ;
315+
316+ // Assess
317+ expect ( request ) . toBeInstanceOf ( Request ) ;
318+ const url = new URL ( request . url ) ;
319+ expect ( url . searchParams . getAll ( 'filter' ) ) . toEqual ( [
320+ 'active' ,
321+ 'published' ,
322+ ] ) ;
323+ } ) ;
324+
325+ it ( 'handles mixed single and multi-value query parameters correctly' , ( ) => {
326+ // Prepare
327+ const event = {
328+ ...baseEvent ,
329+ queryStringParameters : {
330+ single : 'value1' , // Only in single-value
331+ multi : 'last' , // Also in multi-value (should be ignored)
332+ } ,
333+ multiValueQueryStringParameters : {
334+ multi : [ 'first' , 'last' ] , // Should take precedence
335+ } ,
336+ } ;
337+
338+ // Act
339+ const request = proxyEventToWebRequest ( event ) ;
340+
341+ // Assess
342+ expect ( request ) . toBeInstanceOf ( Request ) ;
343+ const url = new URL ( request . url ) ;
344+ expect ( url . searchParams . get ( 'single' ) ) . toBe ( 'value1' ) ;
345+ expect ( url . searchParams . getAll ( 'multi' ) ) . toEqual ( [ 'first' , 'last' ] ) ;
346+ } ) ;
347+
301348 it ( 'skips undefined queryStringParameter values' , ( ) => {
302349 // Prepare
303350 const event = {
0 commit comments