mirror of
https://github.com/coder/coder.git
synced 2025-07-03 16:13:58 +00:00
feat: allow removing deadline for running workspace (#16085)
Fixes https://github.com/coder/coder/issues/9775 When a workspace's TTL is removed, and the workspace is running, the deadline is removed from the workspace. This also modifies the frontend to not show a confirmation dialog when the change is to remove autostop.
This commit is contained in:
@ -2394,6 +2394,93 @@ func TestWorkspaceUpdateTTL(t *testing.T) {
|
||||
})
|
||||
}
|
||||
|
||||
t.Run("ModifyAutostopWithRunningWorkspace", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
testCases := []struct {
|
||||
name string
|
||||
fromTTL *int64
|
||||
toTTL *int64
|
||||
afterUpdate func(t *testing.T, before, after codersdk.NullTime)
|
||||
}{
|
||||
{
|
||||
name: "RemoveAutostopRemovesDeadline",
|
||||
fromTTL: ptr.Ref((8 * time.Hour).Milliseconds()),
|
||||
toTTL: nil,
|
||||
afterUpdate: func(t *testing.T, before, after codersdk.NullTime) {
|
||||
require.NotZero(t, before)
|
||||
require.Zero(t, after)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "AddAutostopDoesNotAddDeadline",
|
||||
fromTTL: nil,
|
||||
toTTL: ptr.Ref((8 * time.Hour).Milliseconds()),
|
||||
afterUpdate: func(t *testing.T, before, after codersdk.NullTime) {
|
||||
require.Zero(t, before)
|
||||
require.Zero(t, after)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "IncreaseAutostopDoesNotModifyDeadline",
|
||||
fromTTL: ptr.Ref((4 * time.Hour).Milliseconds()),
|
||||
toTTL: ptr.Ref((8 * time.Hour).Milliseconds()),
|
||||
afterUpdate: func(t *testing.T, before, after codersdk.NullTime) {
|
||||
require.NotZero(t, before)
|
||||
require.NotZero(t, after)
|
||||
require.Equal(t, before, after)
|
||||
},
|
||||
},
|
||||
{
|
||||
name: "DecreaseAutostopDoesNotModifyDeadline",
|
||||
fromTTL: ptr.Ref((8 * time.Hour).Milliseconds()),
|
||||
toTTL: ptr.Ref((4 * time.Hour).Milliseconds()),
|
||||
afterUpdate: func(t *testing.T, before, after codersdk.NullTime) {
|
||||
require.NotZero(t, before)
|
||||
require.NotZero(t, after)
|
||||
require.Equal(t, before, after)
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
for _, testCase := range testCases {
|
||||
testCase := testCase
|
||||
|
||||
t.Run(testCase.name, func(t *testing.T) {
|
||||
t.Parallel()
|
||||
|
||||
var (
|
||||
client = coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
|
||||
user = coderdtest.CreateFirstUser(t, client)
|
||||
version = coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
|
||||
_ = coderdtest.AwaitTemplateVersionJobCompleted(t, client, version.ID)
|
||||
template = coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
|
||||
workspace = coderdtest.CreateWorkspace(t, client, template.ID, func(cwr *codersdk.CreateWorkspaceRequest) {
|
||||
cwr.TTLMillis = testCase.fromTTL
|
||||
})
|
||||
build = coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, workspace.LatestBuild.ID)
|
||||
)
|
||||
|
||||
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
|
||||
defer cancel()
|
||||
|
||||
err := client.UpdateWorkspaceTTL(ctx, workspace.ID, codersdk.UpdateWorkspaceTTLRequest{
|
||||
TTLMillis: testCase.toTTL,
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
deadlineBefore := build.Deadline
|
||||
|
||||
build, err = client.WorkspaceBuild(ctx, build.ID)
|
||||
require.NoError(t, err)
|
||||
|
||||
deadlineAfter := build.Deadline
|
||||
|
||||
testCase.afterUpdate(t, deadlineBefore, deadlineAfter)
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
t.Run("CustomAutostopDisabledByTemplate", func(t *testing.T) {
|
||||
t.Parallel()
|
||||
var (
|
||||
|
Reference in New Issue
Block a user