@@ -293,10 +293,51 @@ func TestDelete(t *testing.T) {
293
293
t .Run (tc .name , func (t * testing.T ) {
294
294
t .Parallel ()
295
295
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)
297
297
// Each workspace is persisted in the DB along with associated workspace jobs and builds.
298
298
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
+ }
300
341
301
342
// Ensure at least one prebuilt workspace is reported as running in the database
302
343
testutil .Eventually (ctx , t , func (ctx context.Context ) (done bool ) {
@@ -312,48 +353,18 @@ func TestDelete(t *testing.T) {
312
353
require .GreaterOrEqual (t , len (runningWorkspaces ), 1 )
313
354
314
355
// 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 )
316
357
require .NoError (t , err )
317
358
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 )
335
361
336
362
// Get the full user workspace object from the DB
337
363
userWorkspace , err := db .GetWorkspaceByID (ctx , dbUserWorkspace .ID )
338
364
require .NoError (t , err )
339
365
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 )
357
368
})
358
369
}
359
370
})
0 commit comments