@@ -473,6 +473,70 @@ func TestParseQueryParams(t *testing.T) {
473
473
testQueryParams (t , expParams , parser , parser .UUIDs )
474
474
})
475
475
476
+ t .Run ("JSONStringMap" , func (t * testing.T ) {
477
+ t .Parallel ()
478
+
479
+ expParams := []queryParamTestCase [map [string ]string ]{
480
+ {
481
+ QueryParam : "valid_map" ,
482
+ Value : `{"key1": "value1", "key2": "value2"}` ,
483
+ Expected : map [string ]string {
484
+ "key1" : "value1" ,
485
+ "key2" : "value2" ,
486
+ },
487
+ },
488
+ {
489
+ QueryParam : "empty" ,
490
+ Value : "{}" ,
491
+ Default : map [string ]string {},
492
+ Expected : map [string ]string {},
493
+ },
494
+ {
495
+ QueryParam : "no_value" ,
496
+ NoSet : true ,
497
+ Default : map [string ]string {},
498
+ Expected : map [string ]string {},
499
+ },
500
+ {
501
+ QueryParam : "default" ,
502
+ NoSet : true ,
503
+ Default : map [string ]string {"key" : "value" },
504
+ Expected : map [string ]string {"key" : "value" },
505
+ },
506
+ {
507
+ QueryParam : "null" ,
508
+ Value : "null" ,
509
+ Expected : map [string ]string (nil ),
510
+ },
511
+ {
512
+ QueryParam : "undefined" ,
513
+ Value : "undefined" ,
514
+ Expected : map [string ]string (nil ),
515
+ },
516
+ {
517
+ QueryParam : "invalid_map" ,
518
+ Value : `{"key1": "value1", "key2": "value2"` , // missing closing brace
519
+ Expected : map [string ]string (nil ),
520
+ Default : map [string ]string {},
521
+ ExpectedErrorContains : `Query param "invalid_map" must be a valid JSON object: unexpected EOF` ,
522
+ },
523
+ {
524
+ QueryParam : "incorrect_type" ,
525
+ Value : `{"key1": 1, "key2": true}` ,
526
+ Expected : map [string ]string (nil ),
527
+ ExpectedErrorContains : `Query param "incorrect_type" must be a valid JSON object: json: cannot unmarshal number into Go value of type string` ,
528
+ },
529
+ {
530
+ QueryParam : "multiple_keys" ,
531
+ Values : []string {`{"key1": "value1"}` , `{"key2": "value2"}` },
532
+ Expected : map [string ]string (nil ),
533
+ ExpectedErrorContains : `Query param "multiple_keys" provided more than once, found 2 times.` ,
534
+ },
535
+ }
536
+ parser := httpapi .NewQueryParamParser ()
537
+ testQueryParams (t , expParams , parser , parser .JSONStringMap )
538
+ })
539
+
476
540
t .Run ("Required" , func (t * testing.T ) {
477
541
t .Parallel ()
478
542
0 commit comments