@@ -781,6 +781,190 @@ func TestWorkspaceBuildWithRichParameters(t *testing.T) {
781781 })
782782 require .Error (t , err )
783783 })
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+ })
784968}
785969
786970func TestWorkspaceBuildValidateRichParameters (t * testing.T ) {
0 commit comments