mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
chore(coderd): add test for deleting task with no workspace (#20466)
This commit is contained in:
+33
-10
@@ -1,6 +1,7 @@
|
|||||||
package coderd_test
|
package coderd_test
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"context"
|
||||||
"database/sql"
|
"database/sql"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
@@ -376,18 +377,14 @@ func TestTasks(t *testing.T) {
|
|||||||
require.NoError(t, err, "delete task request should be accepted")
|
require.NoError(t, err, "delete task request should be accepted")
|
||||||
|
|
||||||
// Poll until the workspace is deleted.
|
// 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)
|
dws, derr := client.DeletedWorkspace(ctx, task.WorkspaceID.UUID)
|
||||||
if derr == nil && dws.LatestBuild.Status == codersdk.WorkspaceStatusDeleted {
|
if !assert.NoError(t, derr, "expected to fetch deleted workspace before deadline") {
|
||||||
break
|
return false
|
||||||
}
|
}
|
||||||
if ctx.Err() != nil {
|
t.Logf("workspace latest_build status: %q", dws.LatestBuild.Status)
|
||||||
require.NoError(t, derr, "expected to fetch deleted workspace before deadline")
|
return dws.LatestBuild.Status == codersdk.WorkspaceStatusDeleted
|
||||||
require.Equal(t, codersdk.WorkspaceStatusDeleted, dws.LatestBuild.Status, "workspace should be deleted before deadline")
|
}, testutil.IntervalMedium, "workspace should be deleted before deadline")
|
||||||
break
|
|
||||||
}
|
|
||||||
time.Sleep(testutil.IntervalMedium)
|
|
||||||
}
|
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("NotFound", func(t *testing.T) {
|
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.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) {
|
t.Run("Send", func(t *testing.T) {
|
||||||
|
|||||||
Reference in New Issue
Block a user