@@ -197,11 +197,12 @@ func TestAddCmd_ServerWithArguments(t *testing.T) {
197
197
t .Parallel ()
198
198
199
199
tests := []struct {
200
- name string
201
- pkg packages.Server
202
- expectedRequiredEnvs []string
203
- expectedRequiredValues []string
204
- expectedRequiredBools []string
200
+ name string
201
+ pkg packages.Server
202
+ expectedRequiredEnvs []string
203
+ expectedRequiredPositionals []string
204
+ expectedRequiredValues []string
205
+ expectedRequiredBools []string
205
206
}{
206
207
{
207
208
name : "server with all argument types" ,
@@ -307,7 +308,66 @@ func TestAddCmd_ServerWithArguments(t *testing.T) {
307
308
"--optional-value" : {VariableType : packages .VariableTypeArg , Required : false },
308
309
},
309
310
},
310
- // All empty since none are required
311
+ },
312
+ {
313
+ name : "server all kinds of required args and envs" ,
314
+ pkg : packages.Server {
315
+ ID : "simple-server" ,
316
+ Name : "Simple Server" ,
317
+ Tools : []packages.Tool {
318
+ {
319
+ Name : "hello" ,
320
+ },
321
+ },
322
+ Installations : map [runtime.Runtime ]packages.Installation {
323
+ runtime .UVX : {
324
+ Runtime : "uvx" ,
325
+ Package : "mcp-server-simple" ,
326
+ Version : "1.0.0" ,
327
+ Recommended : true ,
328
+ },
329
+ },
330
+ Arguments : packages.Arguments {
331
+ "REQUIRED_ENV" : {
332
+ VariableType : packages .VariableTypeEnv ,
333
+ Required : true ,
334
+ },
335
+ "OPTIONAL_ENV" : {
336
+ VariableType : packages .VariableTypeEnv ,
337
+ Required : false ,
338
+ },
339
+ "RequiredPositional1" : {
340
+ VariableType : packages .VariableTypeArgPositional ,
341
+ Position : testIntPtr (t , 1 ),
342
+ Required : true ,
343
+ },
344
+ "OptionalPositional2" : {
345
+ VariableType : packages .VariableTypeArgPositional ,
346
+ Position : testIntPtr (t , 2 ),
347
+ Required : false ,
348
+ },
349
+ "--required-value" : {
350
+ VariableType : packages .VariableTypeArg ,
351
+ Required : true ,
352
+ },
353
+ "--optional-value" : {
354
+ VariableType : packages .VariableTypeArg ,
355
+ Required : false ,
356
+ },
357
+ "--required-flag" : {
358
+ VariableType : packages .VariableTypeArgBool ,
359
+ Required : true ,
360
+ },
361
+ "--optional-flag" : {
362
+ VariableType : packages .VariableTypeArgBool ,
363
+ Required : false ,
364
+ },
365
+ },
366
+ },
367
+ expectedRequiredEnvs : []string {"REQUIRED_ENV" },
368
+ expectedRequiredPositionals : []string {"RequiredPositional1" },
369
+ expectedRequiredValues : []string {"--required-value" },
370
+ expectedRequiredBools : []string {"--required-flag" },
311
371
},
312
372
}
313
373
@@ -334,6 +394,7 @@ func TestAddCmd_ServerWithArguments(t *testing.T) {
334
394
require .True (t , cfg .addCalled )
335
395
assert .Equal (t , tc .pkg .ID , cfg .entry .Name )
336
396
assert .ElementsMatch (t , tc .expectedRequiredEnvs , cfg .entry .RequiredEnvVars )
397
+ assert .ElementsMatch (t , tc .expectedRequiredPositionals , cfg .entry .RequiredPositionalArgs )
337
398
assert .ElementsMatch (t , tc .expectedRequiredValues , cfg .entry .RequiredValueArgs )
338
399
assert .ElementsMatch (t , tc .expectedRequiredBools , cfg .entry .RequiredBoolArgs )
339
400
})
@@ -421,21 +482,22 @@ func TestParseServerEntry(t *testing.T) {
421
482
t .Parallel ()
422
483
423
484
tests := []struct {
424
- name string
425
- installations map [runtime.Runtime ]packages.Installation
426
- supportedRuntimes []runtime.Runtime
427
- pkgName string
428
- pkgID string
429
- availableTools []string
430
- requestedTools []string
431
- requestedRuntime runtime.Runtime
432
- arguments packages.Arguments
433
- isErrorExpected bool
434
- expectedErrorMessage string
435
- expectedPackageValue string
436
- expectedRequiredEnvs []string
437
- expectedRequiredValues []string
438
- expectedRequiredBools []string
485
+ name string
486
+ installations map [runtime.Runtime ]packages.Installation
487
+ supportedRuntimes []runtime.Runtime
488
+ pkgName string
489
+ pkgID string
490
+ availableTools []string
491
+ requestedTools []string
492
+ requestedRuntime runtime.Runtime
493
+ arguments packages.Arguments
494
+ isErrorExpected bool
495
+ expectedErrorMessage string
496
+ expectedPackageValue string
497
+ expectedRequiredEnvs []string
498
+ expectedRequiredPositionals []string
499
+ expectedRequiredValues []string
500
+ expectedRequiredBools []string
439
501
}{
440
502
{
441
503
name : "basic server with no arguments" ,
@@ -548,8 +610,9 @@ func TestParseServerEntry(t *testing.T) {
548
610
"--format" : {VariableType : packages .VariableTypeArg , Required : true },
549
611
"--encoding" : {VariableType : packages .VariableTypeArg , Required : false },
550
612
},
551
- expectedPackageValue : "uvx::mcp-server-files@latest" ,
552
- expectedRequiredValues : []string {"path" , "mode" , "--format" },
613
+ expectedPackageValue : "uvx::mcp-server-files@latest" ,
614
+ expectedRequiredPositionals : []string {"path" , "mode" },
615
+ expectedRequiredValues : []string {"--format" },
553
616
},
554
617
{
555
618
name : "server with only required bool args" ,
@@ -676,12 +739,13 @@ func TestParseServerEntry(t *testing.T) {
676
739
} else {
677
740
require .NoError (t , err )
678
741
expected := config.ServerEntry {
679
- Name : tc .pkgID ,
680
- Package : tc .expectedPackageValue ,
681
- Tools : tc .requestedTools ,
682
- RequiredEnvVars : tc .expectedRequiredEnvs ,
683
- RequiredValueArgs : tc .expectedRequiredValues ,
684
- RequiredBoolArgs : tc .expectedRequiredBools ,
742
+ Name : tc .pkgID ,
743
+ Package : tc .expectedPackageValue ,
744
+ Tools : tc .requestedTools ,
745
+ RequiredEnvVars : tc .expectedRequiredEnvs ,
746
+ RequiredPositionalArgs : tc .expectedRequiredPositionals ,
747
+ RequiredValueArgs : tc .expectedRequiredValues ,
748
+ RequiredBoolArgs : tc .expectedRequiredBools ,
685
749
}
686
750
require .Equal (t , expected .Name , entry .Name )
687
751
require .Equal (t , expected .Package , entry .Package )
0 commit comments