(t *testing.T)
| 20 | ) |
| 21 | |
| 22 | func TestUpdate(t *testing.T) { |
| 23 | t.Parallel() |
| 24 | |
| 25 | // Test that the function does not panic on missing arg. |
| 26 | t.Run("NoArgs", func(t *testing.T) { |
| 27 | t.Parallel() |
| 28 | |
| 29 | inv, _ := clitest.New(t, "update") |
| 30 | err := inv.Run() |
| 31 | require.Error(t, err) |
| 32 | }) |
| 33 | |
| 34 | t.Run("OK", func(t *testing.T) { |
| 35 | t.Parallel() |
| 36 | |
| 37 | // Given: a workspace exists on the latest template version. |
| 38 | client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true}) |
| 39 | owner := coderdtest.CreateFirstUser(t, client) |
| 40 | member, _ := coderdtest.CreateAnotherUser(t, client, owner.OrganizationID) |
| 41 | version1 := coderdtest.CreateTemplateVersion(t, client, owner.OrganizationID, nil) |
| 42 | |
| 43 | coderdtest.AwaitTemplateVersionJobCompleted(t, client, version1.ID) |
| 44 | template := coderdtest.CreateTemplate(t, client, owner.OrganizationID, version1.ID) |
| 45 | |
| 46 | ws := coderdtest.CreateWorkspace(t, member, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) { |
| 47 | cwr.Name = "my-workspace" |
| 48 | }) |
| 49 | require.False(t, ws.Outdated, "newly created workspace with active template version must not be outdated") |
| 50 | |
| 51 | // Given: the template version is updated |
| 52 | version2 := coderdtest.UpdateTemplateVersion(t, client, owner.OrganizationID, &echo.Responses{ |
| 53 | Parse: echo.ParseComplete, |
| 54 | ProvisionApply: echo.ApplyComplete, |
| 55 | ProvisionPlan: echo.PlanComplete, |
| 56 | }, template.ID) |
| 57 | _ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version2.ID) |
| 58 | |
| 59 | ctx := testutil.Context(t, testutil.WaitShort) |
| 60 | err := client.UpdateActiveTemplateVersion(ctx, template.ID, codersdk.UpdateActiveTemplateVersion{ |
| 61 | ID: version2.ID, |
| 62 | }) |
| 63 | require.NoError(t, err, "failed to update active template version") |
| 64 | |
| 65 | // Then: the workspace is marked as 'outdated' |
| 66 | ws, err = member.WorkspaceByOwnerAndName(ctx, codersdk.Me, "my-workspace", codersdk.WorkspaceOptions{}) |
| 67 | require.NoError(t, err, "member failed to get workspace they themselves own") |
| 68 | require.True(t, ws.Outdated, "workspace must be outdated after template version update") |
| 69 | |
| 70 | // When: the workspace is updated |
| 71 | inv, root := clitest.New(t, "update", ws.Name) |
| 72 | clitest.SetupConfig(t, member, root) |
| 73 | |
| 74 | err = inv.Run() |
| 75 | require.NoError(t, err, "update command failed") |
| 76 | |
| 77 | // Then: the workspace is no longer 'outdated' |
| 78 | ws, err = member.WorkspaceByOwnerAndName(ctx, codersdk.Me, "my-workspace", codersdk.WorkspaceOptions{}) |
| 79 | require.NoError(t, err, "member failed to get workspace they themselves own after update") |
nothing calls this directly
no test coverage detected