@@ -637,210 +637,6 @@ func TestWorkspaceBuildStatus(t *testing.T) {
637
637
require .EqualValues (t , codersdk .WorkspaceStatusDeleted , workspace .LatestBuild .Status )
638
638
}
639
639
640
- func TestWorkspaceBuildValidateRichParameters (t * testing.T ) {
641
- t .Parallel ()
642
-
643
- const (
644
- stringParameterName = "string_parameter"
645
- stringParameterValue = "abc"
646
-
647
- numberParameterName = "number_parameter"
648
- numberParameterValue = "7"
649
-
650
- boolParameterName = "bool_parameter"
651
- boolParameterValue = "true"
652
-
653
- listOfStringsParameterName = "list_of_strings_parameter"
654
- listOfStringsParameterValue = `["a","b","c"]`
655
- )
656
-
657
- initialBuildParameters := []codersdk.WorkspaceBuildParameter {
658
- {Name : stringParameterName , Value : stringParameterValue },
659
- {Name : numberParameterName , Value : numberParameterValue },
660
- {Name : boolParameterName , Value : boolParameterValue },
661
- {Name : listOfStringsParameterName , Value : listOfStringsParameterValue },
662
- }
663
-
664
- prepareEchoResponses := func (richParameters []* proto.RichParameter ) * echo.Responses {
665
- return & echo.Responses {
666
- Parse : echo .ParseComplete ,
667
- ProvisionPlan : []* proto.Provision_Response {
668
- {
669
- Type : & proto.Provision_Response_Complete {
670
- Complete : & proto.Provision_Complete {
671
- Parameters : richParameters ,
672
- },
673
- },
674
- },
675
- },
676
- ProvisionApply : []* proto.Provision_Response {
677
- {
678
- Type : & proto.Provision_Response_Complete {
679
- Complete : & proto.Provision_Complete {},
680
- },
681
- },
682
- },
683
- }
684
- }
685
-
686
- t .Run ("NoValidation" , func (t * testing.T ) {
687
- t .Parallel ()
688
-
689
- richParameters := []* proto.RichParameter {
690
- {Name : stringParameterName , Type : "string" , Mutable : true },
691
- {Name : numberParameterName , Type : "number" , Mutable : true },
692
- {Name : boolParameterName , Type : "bool" , Mutable : true },
693
- }
694
-
695
- client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerDaemon : true })
696
- user := coderdtest .CreateFirstUser (t , client )
697
- version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , prepareEchoResponses (richParameters ))
698
- coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
699
-
700
- template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
701
- workspace := coderdtest .CreateWorkspace (t , client , user .OrganizationID , template .ID , func (cwr * codersdk.CreateWorkspaceRequest ) {
702
- cwr .RichParameterValues = initialBuildParameters
703
- })
704
-
705
- workspaceBuild := coderdtest .AwaitWorkspaceBuildJob (t , client , workspace .LatestBuild .ID )
706
- require .Equal (t , codersdk .WorkspaceStatusRunning , workspaceBuild .Status )
707
-
708
- // Update build parameters
709
- ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
710
- defer cancel ()
711
-
712
- nextBuildParameters := []codersdk.WorkspaceBuildParameter {
713
- {Name : numberParameterName , Value : "42" },
714
- }
715
- nextWorkspaceBuild , err := client .CreateWorkspaceBuild (ctx , workspace .ID , codersdk.CreateWorkspaceBuildRequest {
716
- Transition : codersdk .WorkspaceTransitionStart ,
717
- RichParameterValues : nextBuildParameters ,
718
- })
719
- require .NoError (t , err )
720
- coderdtest .AwaitWorkspaceBuildJob (t , client , nextWorkspaceBuild .ID )
721
-
722
- _ , err = client .WorkspaceBuildParameters (ctx , nextWorkspaceBuild .ID )
723
- require .NoError (t , err )
724
- })
725
-
726
- t .Run ("Validation" , func (t * testing.T ) {
727
- t .Parallel ()
728
-
729
- numberRichParameters := []* proto.RichParameter {
730
- {Name : stringParameterName , Type : "string" , Mutable : true },
731
- {Name : numberParameterName , Type : "number" , Mutable : true , ValidationMin : 3 , ValidationMax : 10 },
732
- {Name : boolParameterName , Type : "bool" , Mutable : true },
733
- }
734
-
735
- monotonicIncreasingNumberRichParameters := []* proto.RichParameter {
736
- {Name : stringParameterName , Type : "string" , Mutable : true },
737
- {Name : numberParameterName , Type : "number" , Mutable : true , ValidationMin : 3 , ValidationMax : 10 , ValidationMonotonic : "increasing" },
738
- {Name : boolParameterName , Type : "bool" , Mutable : true },
739
- }
740
-
741
- monotonicDecreasingNumberRichParameters := []* proto.RichParameter {
742
- {Name : stringParameterName , Type : "string" , Mutable : true },
743
- {Name : numberParameterName , Type : "number" , Mutable : true , ValidationMin : 3 , ValidationMax : 10 , ValidationMonotonic : "decreasing" },
744
- {Name : boolParameterName , Type : "bool" , Mutable : true },
745
- }
746
-
747
- stringRichParameters := []* proto.RichParameter {
748
- {Name : stringParameterName , Type : "string" , Mutable : true },
749
- {Name : numberParameterName , Type : "number" , Mutable : true },
750
- {Name : boolParameterName , Type : "bool" , Mutable : true },
751
- }
752
-
753
- boolRichParameters := []* proto.RichParameter {
754
- {Name : stringParameterName , Type : "string" , Mutable : true },
755
- {Name : numberParameterName , Type : "number" , Mutable : true },
756
- {Name : boolParameterName , Type : "bool" , Mutable : true },
757
- }
758
-
759
- regexRichParameters := []* proto.RichParameter {
760
- {Name : stringParameterName , Type : "string" , Mutable : true , ValidationRegex : "^[a-z]+$" , ValidationError : "this is error" },
761
- {Name : numberParameterName , Type : "number" , Mutable : true },
762
- {Name : boolParameterName , Type : "bool" , Mutable : true },
763
- }
764
-
765
- listOfStringsRichParameters := []* proto.RichParameter {
766
- {Name : listOfStringsParameterName , Type : "list(string)" , Mutable : true },
767
- }
768
-
769
- tests := []struct {
770
- parameterName string
771
- value string
772
- valid bool
773
- richParameters []* proto.RichParameter
774
- }{
775
- {numberParameterName , "2" , false , numberRichParameters },
776
- {numberParameterName , "3" , true , numberRichParameters },
777
- {numberParameterName , "10" , true , numberRichParameters },
778
- {numberParameterName , "11" , false , numberRichParameters },
779
-
780
- {numberParameterName , "6" , false , monotonicIncreasingNumberRichParameters },
781
- {numberParameterName , "7" , true , monotonicIncreasingNumberRichParameters },
782
- {numberParameterName , "8" , true , monotonicIncreasingNumberRichParameters },
783
-
784
- {numberParameterName , "6" , true , monotonicDecreasingNumberRichParameters },
785
- {numberParameterName , "7" , true , monotonicDecreasingNumberRichParameters },
786
- {numberParameterName , "8" , false , monotonicDecreasingNumberRichParameters },
787
-
788
- {stringParameterName , "" , true , stringRichParameters },
789
- {stringParameterName , "foobar" , true , stringRichParameters },
790
-
791
- {stringParameterName , "abcd" , true , regexRichParameters },
792
- {stringParameterName , "abcd1" , false , regexRichParameters },
793
-
794
- {boolParameterName , "true" , true , boolRichParameters },
795
- {boolParameterName , "false" , true , boolRichParameters },
796
- {boolParameterName , "cat" , false , boolRichParameters },
797
-
798
- {listOfStringsParameterName , `[]` , true , listOfStringsRichParameters },
799
- {listOfStringsParameterName , `["aa"]` , true , listOfStringsRichParameters },
800
- {listOfStringsParameterName , `["aa]` , false , listOfStringsRichParameters },
801
- {listOfStringsParameterName , `` , false , listOfStringsRichParameters },
802
- }
803
-
804
- for _ , tc := range tests {
805
- tc := tc
806
- t .Run (tc .parameterName + "-" + tc .value , func (t * testing.T ) {
807
- t .Parallel ()
808
-
809
- client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerDaemon : true })
810
- user := coderdtest .CreateFirstUser (t , client )
811
- version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , prepareEchoResponses (tc .richParameters ))
812
- coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
813
-
814
- template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
815
- workspace := coderdtest .CreateWorkspace (t , client , user .OrganizationID , template .ID , func (cwr * codersdk.CreateWorkspaceRequest ) {
816
- cwr .RichParameterValues = initialBuildParameters
817
- })
818
-
819
- workspaceBuild := coderdtest .AwaitWorkspaceBuildJob (t , client , workspace .LatestBuild .ID )
820
- require .Equal (t , codersdk .WorkspaceStatusRunning , workspaceBuild .Status )
821
-
822
- ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
823
- defer cancel ()
824
-
825
- nextBuildParameters := []codersdk.WorkspaceBuildParameter {
826
- {Name : tc .parameterName , Value : tc .value },
827
- }
828
- nextWorkspaceBuild , err := client .CreateWorkspaceBuild (ctx , workspace .ID , codersdk.CreateWorkspaceBuildRequest {
829
- Transition : codersdk .WorkspaceTransitionStart ,
830
- RichParameterValues : nextBuildParameters ,
831
- })
832
-
833
- if tc .valid {
834
- require .NoError (t , err )
835
- coderdtest .AwaitWorkspaceBuildJob (t , client , nextWorkspaceBuild .ID )
836
- } else {
837
- require .Error (t , err )
838
- }
839
- })
840
- }
841
- })
842
- }
843
-
844
640
func TestMigrateLegacyToRichParameters (t * testing.T ) {
845
641
t .Parallel ()
846
642
0 commit comments