@@ -340,6 +340,99 @@ func TestWorkspace(t *testing.T) {
340
340
})
341
341
}
342
342
343
+ func TestResolveAutostart (t * testing.T ) {
344
+ t .Parallel ()
345
+
346
+ t .Run ("OK" , func (t * testing.T ) {
347
+ t .Parallel ()
348
+ ownerClient := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerDaemon : true })
349
+ owner := coderdtest .CreateFirstUser (t , ownerClient )
350
+ version1 := coderdtest .CreateTemplateVersion (t , ownerClient , owner .OrganizationID , nil )
351
+ coderdtest .AwaitTemplateVersionJobCompleted (t , ownerClient , version1 .ID )
352
+ template := coderdtest .CreateTemplate (t , ownerClient , owner .OrganizationID , version1 .ID )
353
+
354
+ params := & echo.Responses {
355
+ Parse : echo .ParseComplete ,
356
+ ProvisionPlan : []* proto.Response {
357
+ {
358
+ Type : & proto.Response_Plan {
359
+ Plan : & proto.PlanComplete {
360
+ Parameters : []* proto.RichParameter {
361
+ {
362
+ Name : "param" ,
363
+ Description : "param" ,
364
+ Required : true ,
365
+ Mutable : true ,
366
+ },
367
+ },
368
+ },
369
+ },
370
+ },
371
+ },
372
+ ProvisionApply : echo .ApplyComplete ,
373
+ }
374
+ version2 := coderdtest .CreateTemplateVersion (t , ownerClient , owner .OrganizationID , params , func (ctvr * codersdk.CreateTemplateVersionRequest ) {
375
+ ctvr .TemplateID = template .ID
376
+ })
377
+ coderdtest .AwaitTemplateVersionJobCompleted (t , ownerClient , version2 .ID )
378
+
379
+ ctx , cancel := context .WithTimeout (context .Background (), testutil .WaitLong )
380
+ defer cancel ()
381
+
382
+ client , _ := coderdtest .CreateAnotherUser (t , ownerClient , owner .OrganizationID )
383
+ workspace := coderdtest .CreateWorkspace (t , client , owner .OrganizationID , template .ID , func (cwr * codersdk.CreateWorkspaceRequest ) {
384
+ cwr .AutomaticUpdates = codersdk .AutomaticUpdatesAlways
385
+ })
386
+ coderdtest .AwaitWorkspaceBuildJobCompleted (t , client , workspace .LatestBuild .ID )
387
+
388
+ err := ownerClient .UpdateActiveTemplateVersion (ctx , template .ID , codersdk.UpdateActiveTemplateVersion {
389
+ ID : version2 .ID ,
390
+ })
391
+ require .NoError (t , err )
392
+
393
+ // Autostart shouldn't be possible if parameters do not match.
394
+ resp , err := client .ResolveAutostart (ctx , workspace .ID .String ())
395
+ require .NoError (t , err )
396
+ require .True (t , resp .ParameterMismatch )
397
+
398
+ update , err := client .CreateWorkspaceBuild (ctx , workspace .ID , codersdk.CreateWorkspaceBuildRequest {
399
+ TemplateVersionID : version2 .ID ,
400
+ Transition : codersdk .WorkspaceTransitionStart ,
401
+ RichParameterValues : []codersdk.WorkspaceBuildParameter {
402
+ {
403
+ Name : "param" ,
404
+ Value : "Hello" ,
405
+ },
406
+ },
407
+ })
408
+ require .NoError (t , err )
409
+ coderdtest .AwaitWorkspaceBuildJobCompleted (t , client , update .ID )
410
+
411
+ // We should be able to autostart since parameters are updated.
412
+ resp , err = client .ResolveAutostart (ctx , workspace .ID .String ())
413
+ require .NoError (t , err )
414
+ require .False (t , resp .ParameterMismatch )
415
+
416
+ // Create one last version where the parameters are the same as the previous
417
+ // version.
418
+ version3 := coderdtest .CreateTemplateVersion (t , ownerClient , owner .OrganizationID , params , func (ctvr * codersdk.CreateTemplateVersionRequest ) {
419
+ ctvr .TemplateID = template .ID
420
+ })
421
+ coderdtest .AwaitTemplateVersionJobCompleted (t , ownerClient , version3 .ID )
422
+
423
+ err = ownerClient .UpdateActiveTemplateVersion (ctx , template .ID , codersdk.UpdateActiveTemplateVersion {
424
+ ID : version3 .ID ,
425
+ })
426
+ require .NoError (t , err )
427
+
428
+ // Even though we're out of date we should still be able to autostart
429
+ // since parameters resolve.
430
+ resp , err = client .ResolveAutostart (ctx , workspace .ID .String ())
431
+ require .NoError (t , err )
432
+ require .False (t , resp .ParameterMismatch )
433
+ })
434
+ }
435
+
343
436
func TestAdminViewAllWorkspaces (t * testing.T ) {
344
437
t .Parallel ()
345
438
client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerDaemon : true })
0 commit comments