@@ -302,6 +302,57 @@ func TestDynamicParameterBuild(t *testing.T) {
302
302
require .ErrorContains (t , err , "Number must be between 0 and 10" )
303
303
})
304
304
})
305
+
306
+ t .Run ("ImmutableValidation" , func (t * testing.T ) {
307
+ t .Parallel ()
308
+
309
+ // NewImmutable tests the case where a new immutable parameter is added to a template
310
+ // after a workspace has been created with an older version of the template.
311
+ // The test tries to delete the workspace, which should succeed.
312
+ t .Run ("NewImmutable" , func (t * testing.T ) {
313
+ t .Parallel ()
314
+
315
+ ctx := testutil .Context (t , testutil .WaitShort )
316
+ // Start with a new template that has 0 parameters
317
+ empty , _ := coderdtest .DynamicParameterTemplate (t , templateAdmin , orgID , coderdtest.DynamicParameterTemplateParams {
318
+ MainTF : string (must (os .ReadFile ("testdata/parameters/none/main.tf" ))),
319
+ })
320
+
321
+ // Create the workspace with 0 parameters
322
+ wrk , err := templateAdmin .CreateUserWorkspace (ctx , codersdk .Me , codersdk.CreateWorkspaceRequest {
323
+ TemplateID : empty .ID ,
324
+ Name : coderdtest .RandomUsername (t ),
325
+ RichParameterValues : []codersdk.WorkspaceBuildParameter {},
326
+ })
327
+ require .NoError (t , err )
328
+ coderdtest .AwaitWorkspaceBuildJobCompleted (t , templateAdmin , wrk .LatestBuild .ID )
329
+
330
+ // Update the template with a new immutable parameter
331
+ _ , immutable := coderdtest .DynamicParameterTemplate (t , templateAdmin , orgID , coderdtest.DynamicParameterTemplateParams {
332
+ MainTF : string (must (os .ReadFile ("testdata/parameters/immutable/main.tf" ))),
333
+ TemplateID : empty .ID ,
334
+ })
335
+
336
+ bld , err := templateAdmin .CreateWorkspaceBuild (ctx , wrk .ID , codersdk.CreateWorkspaceBuildRequest {
337
+ TemplateVersionID : immutable .ID , // Use the new template version with the immutable parameter
338
+ Transition : codersdk .WorkspaceTransitionDelete ,
339
+ DryRun : false ,
340
+ })
341
+ require .NoError (t , err )
342
+ coderdtest .AwaitWorkspaceBuildJobCompleted (t , templateAdmin , bld .ID )
343
+
344
+ // Verify the immutable parameter is set on the workspace build
345
+ params , err := templateAdmin .WorkspaceBuildParameters (ctx , bld .ID )
346
+ require .NoError (t , err )
347
+ require .Len (t , params , 1 )
348
+ require .Equal (t , "Hello World" , params [0 ].Value )
349
+
350
+ // Verify the workspace is deleted
351
+ deleted , err := templateAdmin .DeletedWorkspace (ctx , wrk .ID )
352
+ require .NoError (t , err )
353
+ require .Equal (t , wrk .ID , deleted .ID , "workspace should be deleted" )
354
+ })
355
+ })
305
356
}
306
357
307
358
// TestDynamicParameterTemplate uses a template with some dynamic elements, and
0 commit comments