(t *testing.T)
| 332 | } |
| 333 | |
| 334 | func TestStartUseParameterDefaults(t *testing.T) { |
| 335 | t.Parallel() |
| 336 | |
| 337 | client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) |
| 338 | owner := coderdtest.CreateFirstUser(t, client) |
| 339 | member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID) |
| 340 | |
| 341 | // Create a template with no parameters and a workspace that |
| 342 | // auto-updates so `start` picks up the new active version. |
| 343 | version1 := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, nil) |
| 344 | coderdtest.AwaitTemplateVersionJobCompleted(t, client, version1.ID) |
| 345 | template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version1.ID) |
| 346 | workspace := coderdtest.CreateWorkspace(t, member, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) { |
| 347 | cwr.AutomaticUpdates = codersdk.AutomaticUpdatesAlways |
| 348 | }) |
| 349 | coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID) |
| 350 | |
| 351 | // Stop the workspace. |
| 352 | coderdtest.MustTransitionWorkspace(t, member, workspace.ID, |
| 353 | codersdk.WorkspaceTransitionStart, codersdk.WorkspaceTransitionStop) |
| 354 | |
| 355 | // Push a new template version that adds a parameter with a default. |
| 356 | version2 := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, |
| 357 | prepareEchoResponses([]*proto.RichParameter{ |
| 358 | {Name: "new_param", Type: "string", Mutable: true, DefaultValue: "foobar"}, |
| 359 | }), func(ctvr *codersdk.CreateTemplateVersionRequest) { |
| 360 | ctvr.TemplateID = template.ID |
| 361 | }) |
| 362 | coderdtest.AwaitTemplateVersionJobCompleted(t, client, version2.ID) |
| 363 | ctx := testutil.Context(t, testutil.WaitLong) |
| 364 | err := client.UpdateActiveTemplateVersion(ctx, template.ID, codersdk.UpdateActiveTemplateVersion{ID: version2.ID}) |
| 365 | require.NoError(t, err) |
| 366 | |
| 367 | // Start the workspace with --use-parameter-defaults. |
| 368 | // The new parameter should be auto-accepted. |
| 369 | inv, root := clitest.New(t, "start", workspace.Name, "--use-parameter-defaults") |
| 370 | clitest.SetupConfig(t, member, root) |
| 371 | pty := ptytest.New(t).Attach(inv) |
| 372 | doneChan := make(chan struct{}) |
| 373 | go func() { |
| 374 | defer close(doneChan) |
| 375 | err := inv.Run() |
| 376 | assert.NoError(t, err) |
| 377 | }() |
| 378 | |
| 379 | pty.ExpectMatchContext(ctx, "workspace has been started") |
| 380 | _ = testutil.TryReceive(ctx, t, doneChan) |
| 381 | |
| 382 | // Verify the new parameter was resolved to its default. |
| 383 | ws, err := member.WorkspaceByOwnerAndName(ctx, codersdk.Me, workspace.Name, codersdk.WorkspaceOptions{}) |
| 384 | require.NoError(t, err) |
| 385 | buildParams, err := member.WorkspaceBuildParameters(ctx, ws.LatestBuild.ID) |
| 386 | require.NoError(t, err) |
| 387 | assert.Contains(t, buildParams, codersdk.WorkspaceBuildParameter{Name: "new_param", Value: "foobar"}) |
| 388 | } |
| 389 | |
| 390 | // TestStartAutoUpdate also tests restart since the flows are virtually identical. |
| 391 | func TestStartAutoUpdate(t *testing.T) { |
nothing calls this directly
no test coverage detected