chore(coderd): add test for deleting task with no workspace (#20466)

This commit is contained in:
Cian Johnston
2025-10-24 18:19:05 +01:00
committed by GitHub
parent 7bad7e35ae
commit b8a0f97cab
+33 -10
View File
@@ -1,6 +1,7 @@
package coderd_test
import (
"context"
"database/sql"
"encoding/json"
"io"
@@ -376,18 +377,14 @@ func TestTasks(t *testing.T) {
require.NoError(t, err, "delete task request should be accepted")
// Poll until the workspace is deleted.
for {
testutil.Eventually(ctx, t, func(ctx context.Context) (done bool) {
dws, derr := client.DeletedWorkspace(ctx, task.WorkspaceID.UUID)
if derr == nil && dws.LatestBuild.Status == codersdk.WorkspaceStatusDeleted {
break
if !assert.NoError(t, derr, "expected to fetch deleted workspace before deadline") {
return false
}
if ctx.Err() != nil {
require.NoError(t, derr, "expected to fetch deleted workspace before deadline")
require.Equal(t, codersdk.WorkspaceStatusDeleted, dws.LatestBuild.Status, "workspace should be deleted before deadline")
break
}
time.Sleep(testutil.IntervalMedium)
}
t.Logf("workspace latest_build status: %q", dws.LatestBuild.Status)
return dws.LatestBuild.Status == codersdk.WorkspaceStatusDeleted
}, testutil.IntervalMedium, "workspace should be deleted before deadline")
})
t.Run("NotFound", func(t *testing.T) {
@@ -468,6 +465,32 @@ func TestTasks(t *testing.T) {
t.Fatalf("unexpected status code: %d (expected 403 or 404)", authErr.StatusCode())
}
})
t.Run("NoWorkspace", func(t *testing.T) {
t.Parallel()
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
user := coderdtest.CreateFirstUser(t, client)
template := createAITemplate(t, client, user)
ctx := testutil.Context(t, testutil.WaitLong)
exp := codersdk.NewExperimentalClient(client)
task, err := exp.CreateTask(ctx, "me", codersdk.CreateTaskRequest{
TemplateVersionID: template.ActiveVersionID,
Input: "delete me",
})
require.NoError(t, err)
require.True(t, task.WorkspaceID.Valid, "task should have a workspace ID")
ws, err := client.Workspace(ctx, task.WorkspaceID.UUID)
require.NoError(t, err)
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, ws.LatestBuild.ID)
// Delete the task workspace
coderdtest.MustTransitionWorkspace(t, client, ws.ID, codersdk.WorkspaceTransitionStart, codersdk.WorkspaceTransitionDelete)
// We should still be able to fetch the task after deleting its workspace
task, err = exp.TaskByID(ctx, task.ID)
require.NoError(t, err, "fetching a task should still work after deleting its related workspace")
err = exp.DeleteTask(ctx, task.OwnerID.String(), task.ID)
require.NoError(t, err, "should be possible to delete a task with no workspace")
})
})
t.Run("Send", func(t *testing.T) {