@@ -454,10 +454,10 @@ func TestUpdateValidateRichParameters(t *testing.T) {
454
454
var modifiedParameters []* proto.RichParameter
455
455
modifiedParameters = append (modifiedParameters , stringRichParameters ... )
456
456
modifiedParameters = append (modifiedParameters , & proto.RichParameter {
457
- // Required parameter
458
- Name : addedParameterName ,
459
- Type : "string" ,
460
- Mutable : true ,
457
+ Name : addedParameterName ,
458
+ Type : "string" ,
459
+ Mutable : true ,
460
+ Required : true ,
461
461
})
462
462
version = coderdtest .UpdateTemplateVersion (t , client , user .OrganizationID , prepareEchoResponses (modifiedParameters ), template .ID )
463
463
coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
@@ -481,7 +481,78 @@ func TestUpdateValidateRichParameters(t *testing.T) {
481
481
482
482
matches := []string {
483
483
"added_parameter" , "" ,
484
- `Enter a value (default: "")` , "abc" ,
484
+ "Enter a value:" , "abc" ,
485
+ }
486
+ for i := 0 ; i < len (matches ); i += 2 {
487
+ match := matches [i ]
488
+ value := matches [i + 1 ]
489
+ pty .ExpectMatch (match )
490
+
491
+ if value != "" {
492
+ pty .WriteLine (value )
493
+ }
494
+ }
495
+ <- doneChan
496
+ })
497
+
498
+ t .Run ("OptionalParameterAdded" , func (t * testing.T ) {
499
+ t .Parallel ()
500
+
501
+ client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerDaemon : true })
502
+ user := coderdtest .CreateFirstUser (t , client )
503
+
504
+ // Upload the initial template
505
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , prepareEchoResponses (stringRichParameters ))
506
+ coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
507
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
508
+
509
+ tempDir := t .TempDir ()
510
+ removeTmpDirUntilSuccessAfterTest (t , tempDir )
511
+ parameterFile , _ := os .CreateTemp (tempDir , "testParameterFile*.yaml" )
512
+ _ , _ = parameterFile .WriteString (
513
+ stringParameterName + ": " + stringParameterValue )
514
+
515
+ // Create workspace
516
+ cmd , root := clitest .New (t , "create" , "my-workspace" , "--template" , template .Name , "--rich-parameter-file" , parameterFile .Name (), "-y" )
517
+ clitest .SetupConfig (t , client , root )
518
+ err := cmd .Execute ()
519
+ require .NoError (t , err )
520
+
521
+ // Modify template
522
+ const addedParameterName = "added_parameter"
523
+
524
+ var modifiedParameters []* proto.RichParameter
525
+ modifiedParameters = append (modifiedParameters , stringRichParameters ... )
526
+ modifiedParameters = append (modifiedParameters , & proto.RichParameter {
527
+ Name : addedParameterName ,
528
+ Type : "string" ,
529
+ Mutable : true ,
530
+ DefaultValue : "foobar" ,
531
+ Required : false ,
532
+ })
533
+ version = coderdtest .UpdateTemplateVersion (t , client , user .OrganizationID , prepareEchoResponses (modifiedParameters ), template .ID )
534
+ coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
535
+ err = client .UpdateActiveTemplateVersion (context .Background (), template .ID , codersdk.UpdateActiveTemplateVersion {
536
+ ID : version .ID ,
537
+ })
538
+ require .NoError (t , err )
539
+
540
+ // Update the workspace
541
+ cmd , root = clitest .New (t , "update" , "my-workspace" )
542
+ clitest .SetupConfig (t , client , root )
543
+ doneChan := make (chan struct {})
544
+ pty := ptytest .New (t )
545
+ cmd .SetIn (pty .Input ())
546
+ cmd .SetOut (pty .Output ())
547
+ go func () {
548
+ defer close (doneChan )
549
+ err := cmd .Execute ()
550
+ assert .NoError (t , err )
551
+ }()
552
+
553
+ matches := []string {
554
+ "added_parameter" , "" ,
555
+ `Enter a value (default: "foobar")` , "abc" ,
485
556
}
486
557
for i := 0 ; i < len (matches ); i += 2 {
487
558
match := matches [i ]
0 commit comments