@@ -564,6 +564,110 @@ func TestOptionalIntArrayParam(t *testing.T) {
564564 }
565565}
566566
567+ func TestRequiredIntArrayParam (t * testing.T ) {
568+ tests := []struct {
569+ name string
570+ params map [string ]interface {}
571+ paramName string
572+ expected []int
573+ expectError bool
574+ }{
575+ {
576+ name : "parameter not in request" ,
577+ params : map [string ]any {},
578+ paramName : "numbers" ,
579+ expected : nil ,
580+ expectError : true ,
581+ },
582+ {
583+ name : "valid any array parameter with float64" ,
584+ params : map [string ]any {
585+ "numbers" : []any {float64 (1 ), float64 (2 ), float64 (3 )},
586+ },
587+ paramName : "numbers" ,
588+ expected : []int {1 , 2 , 3 },
589+ expectError : false ,
590+ },
591+ {
592+ name : "valid int array parameter" ,
593+ params : map [string ]any {
594+ "numbers" : []int {1 , 2 , 3 },
595+ },
596+ paramName : "numbers" ,
597+ expected : []int {1 , 2 , 3 },
598+ expectError : false ,
599+ },
600+ {
601+ name : "mixed numeric types" ,
602+ params : map [string ]any {
603+ "numbers" : []any {float64 (1 ), int (2 ), int32 (3 ), int64 (4 )},
604+ },
605+ paramName : "numbers" ,
606+ expected : []int {1 , 2 , 3 , 4 },
607+ expectError : false ,
608+ },
609+ {
610+ name : "invalid type in array" ,
611+ params : map [string ]any {
612+ "numbers" : []any {float64 (1 ), "not a number" },
613+ },
614+ paramName : "numbers" ,
615+ expected : nil ,
616+ expectError : true ,
617+ },
618+ {
619+ name : "nil value" ,
620+ params : map [string ]any {
621+ "numbers" : nil ,
622+ },
623+ paramName : "numbers" ,
624+ expected : nil ,
625+ expectError : true ,
626+ },
627+ {
628+ name : "empty array" ,
629+ params : map [string ]any {
630+ "numbers" : []any {},
631+ },
632+ paramName : "numbers" ,
633+ expected : nil ,
634+ expectError : true ,
635+ },
636+ {
637+ name : "empty int array" ,
638+ params : map [string ]any {
639+ "numbers" : []int {},
640+ },
641+ paramName : "numbers" ,
642+ expected : nil ,
643+ expectError : true ,
644+ },
645+ {
646+ name : "wrong parameter type" ,
647+ params : map [string ]any {
648+ "numbers" : "not an array" ,
649+ },
650+ paramName : "numbers" ,
651+ expected : nil ,
652+ expectError : true ,
653+ },
654+ }
655+
656+ for _ , tc := range tests {
657+ t .Run (tc .name , func (t * testing.T ) {
658+ request := createMCPRequest (tc .params )
659+ result , err := RequiredIntArrayParam (request , tc .paramName )
660+
661+ if tc .expectError {
662+ assert .Error (t , err )
663+ } else {
664+ assert .NoError (t , err )
665+ assert .Equal (t , tc .expected , result )
666+ }
667+ })
668+ }
669+ }
670+
567671func TestOptionalPaginationParams (t * testing.T ) {
568672 tests := []struct {
569673 name string
0 commit comments