@@ -781,6 +781,190 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
781
781
})
782
782
require .Error (t , err )
783
783
})
784
+
785
+ t .Run ("NewImmutableRequiredParameterAdded" , func (t * testing.T ) {
786
+ t .Parallel ()
787
+
788
+ client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerDaemon : true })
789
+ user := coderdtest .CreateFirstUser (t , client )
790
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , echoResponses )
791
+ coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
792
+
793
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
794
+ workspace := coderdtest .CreateWorkspace (t , client , user .OrganizationID , template .ID , func (cwr * codersdk.CreateWorkspaceRequest ) {
795
+ cwr .RichParameterValues = initialBuildParameters
796
+ })
797
+
798
+ workspaceBuild := coderdtest .AwaitWorkspaceBuildJob (t , client , workspace .LatestBuild .ID )
799
+ require .Equal (t , codersdk .WorkspaceStatusRunning , workspaceBuild .Status )
800
+
801
+ // Push new template revision
802
+ const newImmutableParameterName = "new_immutable_parameter"
803
+ const newImmutableParameterDescription = "This is also an immutable parameter"
804
+ version2 := coderdtest .UpdateTemplateVersion (t , client , user .OrganizationID , & echo.Responses {
805
+ Parse : echo .ParseComplete ,
806
+ ProvisionPlan : []* proto.Provision_Response {
807
+ {
808
+ Type : & proto.Provision_Response_Complete {
809
+ Complete : & proto.Provision_Complete {
810
+ Parameters : []* proto.RichParameter {
811
+ {Name : firstParameterName , Description : firstParameterDescription , Mutable : true },
812
+ {Name : secondParameterName , Description : secondParameterDescription , Mutable : true },
813
+ {Name : immutableParameterName , Description : immutableParameterDescription , Mutable : false },
814
+ {Name : newImmutableParameterName , Description : newImmutableParameterDescription , Mutable : false , Required : true },
815
+ },
816
+ },
817
+ },
818
+ },
819
+ },
820
+ ProvisionApply : []* proto.Provision_Response {{
821
+ Type : & proto.Provision_Response_Complete {
822
+ Complete : & proto.Provision_Complete {},
823
+ },
824
+ }},
825
+ }, template .ID )
826
+ coderdtest .AwaitTemplateVersionJob (t , client , version2 .ID )
827
+ err := client .UpdateActiveTemplateVersion (context .Background (), template .ID , codersdk.UpdateActiveTemplateVersion {
828
+ ID : version2 .ID ,
829
+ })
830
+ require .NoError (t , err )
831
+
832
+ // Update build parameters
833
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
834
+ defer cancel ()
835
+
836
+ nextBuildParameters := []codersdk.WorkspaceBuildParameter {
837
+ {Name : newImmutableParameterName , Value : "good" },
838
+ }
839
+ _ , err = client .CreateWorkspaceBuild (ctx , workspace .ID , codersdk.CreateWorkspaceBuildRequest {
840
+ TemplateVersionID : version2 .ID ,
841
+ Transition : codersdk .WorkspaceTransitionStart ,
842
+ RichParameterValues : nextBuildParameters ,
843
+ })
844
+ require .NoError (t , err )
845
+ })
846
+
847
+ t .Run ("NewImmutableOptionalParameterAdded" , func (t * testing.T ) {
848
+ t .Parallel ()
849
+
850
+ client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerDaemon : true })
851
+ user := coderdtest .CreateFirstUser (t , client )
852
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , echoResponses )
853
+ coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
854
+
855
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
856
+ workspace := coderdtest .CreateWorkspace (t , client , user .OrganizationID , template .ID , func (cwr * codersdk.CreateWorkspaceRequest ) {
857
+ cwr .RichParameterValues = initialBuildParameters
858
+ })
859
+
860
+ workspaceBuild := coderdtest .AwaitWorkspaceBuildJob (t , client , workspace .LatestBuild .ID )
861
+ require .Equal (t , codersdk .WorkspaceStatusRunning , workspaceBuild .Status )
862
+
863
+ // Push new template revision
864
+ const newImmutableParameterName = "new_immutable_parameter"
865
+ const newImmutableParameterDescription = "This is also an immutable parameter"
866
+ version2 := coderdtest .UpdateTemplateVersion (t , client , user .OrganizationID , & echo.Responses {
867
+ Parse : echo .ParseComplete ,
868
+ ProvisionPlan : []* proto.Provision_Response {
869
+ {
870
+ Type : & proto.Provision_Response_Complete {
871
+ Complete : & proto.Provision_Complete {
872
+ Parameters : []* proto.RichParameter {
873
+ {Name : firstParameterName , Description : firstParameterDescription , Mutable : true },
874
+ {Name : secondParameterName , Description : secondParameterDescription , Mutable : true },
875
+ {Name : immutableParameterName , Description : immutableParameterDescription , Mutable : false },
876
+ {Name : newImmutableParameterName , Description : newImmutableParameterDescription , Mutable : false , DefaultValue : "12345" },
877
+ },
878
+ },
879
+ },
880
+ },
881
+ },
882
+ ProvisionApply : []* proto.Provision_Response {{
883
+ Type : & proto.Provision_Response_Complete {
884
+ Complete : & proto.Provision_Complete {},
885
+ },
886
+ }},
887
+ }, template .ID )
888
+ coderdtest .AwaitTemplateVersionJob (t , client , version2 .ID )
889
+ err := client .UpdateActiveTemplateVersion (context .Background (), template .ID , codersdk.UpdateActiveTemplateVersion {
890
+ ID : version2 .ID ,
891
+ })
892
+ require .NoError (t , err )
893
+
894
+ // Update build parameters
895
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
896
+ defer cancel ()
897
+
898
+ nextBuildParameters := []codersdk.WorkspaceBuildParameter {
899
+ {Name : newImmutableParameterName , Value : "good" },
900
+ }
901
+ _ , err = client .CreateWorkspaceBuild (ctx , workspace .ID , codersdk.CreateWorkspaceBuildRequest {
902
+ TemplateVersionID : version2 .ID ,
903
+ Transition : codersdk .WorkspaceTransitionStart ,
904
+ RichParameterValues : nextBuildParameters ,
905
+ })
906
+ require .NoError (t , err )
907
+ })
908
+
909
+ t .Run ("NewImmutableOptionalParameterUsesDefault" , func (t * testing.T ) {
910
+ t .Parallel ()
911
+
912
+ client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerDaemon : true })
913
+ user := coderdtest .CreateFirstUser (t , client )
914
+ version := coderdtest .CreateTemplateVersion (t , client , user .OrganizationID , echoResponses )
915
+ coderdtest .AwaitTemplateVersionJob (t , client , version .ID )
916
+
917
+ template := coderdtest .CreateTemplate (t , client , user .OrganizationID , version .ID )
918
+ workspace := coderdtest .CreateWorkspace (t , client , user .OrganizationID , template .ID , func (cwr * codersdk.CreateWorkspaceRequest ) {
919
+ cwr .RichParameterValues = initialBuildParameters
920
+ })
921
+
922
+ workspaceBuild := coderdtest .AwaitWorkspaceBuildJob (t , client , workspace .LatestBuild .ID )
923
+ require .Equal (t , codersdk .WorkspaceStatusRunning , workspaceBuild .Status )
924
+
925
+ // Push new template revision
926
+ const newImmutableParameterName = "new_immutable_parameter"
927
+ const newImmutableParameterDescription = "This is also an immutable parameter"
928
+ version2 := coderdtest .UpdateTemplateVersion (t , client , user .OrganizationID , & echo.Responses {
929
+ Parse : echo .ParseComplete ,
930
+ ProvisionPlan : []* proto.Provision_Response {
931
+ {
932
+ Type : & proto.Provision_Response_Complete {
933
+ Complete : & proto.Provision_Complete {
934
+ Parameters : []* proto.RichParameter {
935
+ {Name : firstParameterName , Description : firstParameterDescription , Mutable : true },
936
+ {Name : secondParameterName , Description : secondParameterDescription , Mutable : true },
937
+ {Name : immutableParameterName , Description : immutableParameterDescription , Mutable : false },
938
+ {Name : newImmutableParameterName , Description : newImmutableParameterDescription , Mutable : false , DefaultValue : "12345" },
939
+ },
940
+ },
941
+ },
942
+ },
943
+ },
944
+ ProvisionApply : []* proto.Provision_Response {{
945
+ Type : & proto.Provision_Response_Complete {
946
+ Complete : & proto.Provision_Complete {},
947
+ },
948
+ }},
949
+ }, template .ID )
950
+ coderdtest .AwaitTemplateVersionJob (t , client , version2 .ID )
951
+ err := client .UpdateActiveTemplateVersion (context .Background (), template .ID , codersdk.UpdateActiveTemplateVersion {
952
+ ID : version2 .ID ,
953
+ })
954
+ require .NoError (t , err )
955
+
956
+ // Update build parameters
957
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
958
+ defer cancel ()
959
+
960
+ var nextBuildParameters []codersdk.WorkspaceBuildParameter
961
+ _ , err = client .CreateWorkspaceBuild (ctx , workspace .ID , codersdk.CreateWorkspaceBuildRequest {
962
+ TemplateVersionID : version2 .ID ,
963
+ Transition : codersdk .WorkspaceTransitionStart ,
964
+ RichParameterValues : nextBuildParameters ,
965
+ })
966
+ require .NoError (t , err )
967
+ })
784
968
}
785
969
786
970
func TestWorkspaceBuildValidateRichParameters (t * testing.T ) {
0 commit comments