Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit f4ae6bc

Browse files
committed
test: fix end-to-end cli tests Workspace delete permissions
1 parent 5f896f0 commit f4ae6bc

File tree

2 files changed

+49
-38
lines changed

2 files changed

+49
-38
lines changed

cli/delete_test.go

Lines changed: 48 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -293,10 +293,51 @@ func TestDelete(t *testing.T) {
293293
t.Run(tc.name, func(t *testing.T) {
294294
t.Parallel()
295295

296-
// Create one prebuilt workspace (owned by system user) and one normal workspace (owned by the owner user)
296+
// Create one prebuilt workspace (owned by system user) and one normal workspace (owned by a user)
297297
// Each workspace is persisted in the DB along with associated workspace jobs and builds.
298298
dbPrebuiltWorkspace := setupTestDBWorkspace(t, clock, db, pb, orgID, database.PrebuildsSystemUserID, template.ID, version.ID, preset.ID)
299-
dbUserWorkspace := setupTestDBWorkspace(t, clock, db, pb, orgID, owner.UserID, template.ID, version.ID, preset.ID)
299+
userWorkspaceOwner, err := client.User(context.Background(), "testUser")
300+
require.NoError(t, err)
301+
dbUserWorkspace := setupTestDBWorkspace(t, clock, db, pb, orgID, userWorkspaceOwner.ID, template.ID, version.ID, preset.ID)
302+
303+
assertWorkspaceDelete := func(
304+
runClient *codersdk.Client,
305+
workspace database.Workspace,
306+
workspaceOwner string,
307+
expectedErr string,
308+
) {
309+
t.Helper()
310+
311+
// Attempt to delete the workspace as the test client
312+
inv, root := clitest.New(t, "delete", workspaceOwner+"/"+workspace.Name, "-y")
313+
clitest.SetupConfig(t, runClient, root)
314+
doneChan := make(chan struct{})
315+
pty := ptytest.New(t).Attach(inv)
316+
var runErr error
317+
go func() {
318+
defer close(doneChan)
319+
runErr = inv.Run()
320+
}()
321+
322+
// Validate the result based on the expected error message
323+
if expectedErr != "" {
324+
<-doneChan
325+
require.Error(t, runErr)
326+
require.Contains(t, runErr.Error(), expectedErr)
327+
} else {
328+
pty.ExpectMatch("has been deleted")
329+
<-doneChan
330+
331+
// When running with the race detector on, we sometimes get an EOF.
332+
if runErr != nil {
333+
assert.ErrorIs(t, runErr, io.EOF)
334+
}
335+
336+
// Verify that the workspace is now marked as deleted
337+
_, err := client.Workspace(context.Background(), workspace.ID)
338+
require.ErrorContains(t, err, "was deleted")
339+
}
340+
}
300341

301342
// Ensure at least one prebuilt workspace is reported as running in the database
302343
testutil.Eventually(ctx, t, func(ctx context.Context) (done bool) {
@@ -312,48 +353,18 @@ func TestDelete(t *testing.T) {
312353
require.GreaterOrEqual(t, len(runningWorkspaces), 1)
313354

314355
// Get the full prebuilt workspace object from the DB
315-
prebuiltWorkspace, err := db.GetWorkspaceByID(ctx, runningWorkspaces[0].ID)
356+
prebuiltWorkspace, err := db.GetWorkspaceByID(ctx, dbPrebuiltWorkspace.ID)
316357
require.NoError(t, err)
317358

318-
// Attempt to delete the prebuilt workspace as the test client
319-
build, err := tc.client.CreateWorkspaceBuild(ctx, dbPrebuiltWorkspace.ID, codersdk.CreateWorkspaceBuildRequest{
320-
Transition: codersdk.WorkspaceTransitionDelete,
321-
})
322-
// Validate the result based on the expected error message
323-
if tc.expectedPrebuiltDeleteErrMsg != "" {
324-
require.Error(t, err)
325-
require.Contains(t, err.Error(), tc.expectedPrebuiltDeleteErrMsg)
326-
} else {
327-
require.NoError(t, err, "delete the prebuilt workspace")
328-
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, build.ID)
329-
330-
// Verify that the prebuilt workspace is now marked as deleted
331-
deletedWorkspace, err := client.DeletedWorkspace(ctx, prebuiltWorkspace.ID)
332-
require.NoError(t, err)
333-
require.Equal(t, prebuiltWorkspace.ID, deletedWorkspace.ID)
334-
}
359+
// Assert the prebuilt workspace deletion
360+
assertWorkspaceDelete(tc.client, prebuiltWorkspace, "prebuilds", tc.expectedPrebuiltDeleteErrMsg)
335361

336362
// Get the full user workspace object from the DB
337363
userWorkspace, err := db.GetWorkspaceByID(ctx, dbUserWorkspace.ID)
338364
require.NoError(t, err)
339365

340-
// Attempt to delete the prebuilt workspace as the test client
341-
build, err = tc.client.CreateWorkspaceBuild(ctx, dbUserWorkspace.ID, codersdk.CreateWorkspaceBuildRequest{
342-
Transition: codersdk.WorkspaceTransitionDelete,
343-
})
344-
// Validate the result based on the expected error message
345-
if tc.expectedWorkspaceDeleteErrMsg != "" {
346-
require.Error(t, err)
347-
require.Contains(t, err.Error(), tc.expectedWorkspaceDeleteErrMsg)
348-
} else {
349-
require.NoError(t, err, "delete the user Workspace")
350-
coderdtest.AwaitWorkspaceBuildJobCompleted(t, client, build.ID)
351-
352-
// Verify that the user workspace is now marked as deleted
353-
deletedWorkspace, err := client.DeletedWorkspace(ctx, userWorkspace.ID)
354-
require.NoError(t, err)
355-
require.Equal(t, userWorkspace.ID, deletedWorkspace.ID)
356-
}
366+
// Assert the user workspace deletion
367+
assertWorkspaceDelete(tc.client, userWorkspace, userWorkspaceOwner.Username, tc.expectedWorkspaceDeleteErrMsg)
357368
})
358369
}
359370
})

coderd/httpmw/organizationparam.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -180,7 +180,7 @@ func ExtractOrganizationMember(ctx context.Context, auth func(r *http.Request, a
180180
organizationMembers, err := db.OrganizationMembers(ctx, database.OrganizationMembersParams{
181181
OrganizationID: orgID,
182182
UserID: user.ID,
183-
IncludeSystem: false,
183+
IncludeSystem: true,
184184
})
185185
if httpapi.Is404Error(err) {
186186
httpapi.ResourceNotFound(rw)

0 commit comments

Comments
 (0)