@@ -11,6 +11,7 @@ import (
11
11
"github.com/coder/coder/v2/cli/clitest"
12
12
"github.com/coder/coder/v2/coderd/coderdtest"
13
13
"github.com/coder/coder/v2/coderd/database"
14
+ "github.com/coder/coder/v2/coderd/database/dbfake"
14
15
"github.com/coder/coder/v2/codersdk"
15
16
"github.com/coder/coder/v2/provisioner/echo"
16
17
"github.com/coder/coder/v2/provisionersdk/proto"
@@ -109,6 +110,9 @@ func TestStart(t *testing.T) {
109
110
template := coderdtest .CreateTemplate (t , client , owner .OrganizationID , version .ID )
110
111
workspace := coderdtest .CreateWorkspace (t , member , owner .OrganizationID , template .ID )
111
112
coderdtest .AwaitWorkspaceBuildJobCompleted (t , client , workspace .LatestBuild .ID )
113
+ // Stop the workspace
114
+ workspaceBuild := coderdtest .CreateWorkspaceBuild (t , client , workspace , database .WorkspaceTransitionStop )
115
+ coderdtest .AwaitWorkspaceBuildJobCompleted (t , client , workspaceBuild .ID )
112
116
113
117
inv , root := clitest .New (t , "start" , workspace .Name , "--build-options" )
114
118
clitest .SetupConfig (t , member , root )
@@ -160,6 +164,9 @@ func TestStart(t *testing.T) {
160
164
template := coderdtest .CreateTemplate (t , client , owner .OrganizationID , version .ID )
161
165
workspace := coderdtest .CreateWorkspace (t , member , owner .OrganizationID , template .ID )
162
166
coderdtest .AwaitWorkspaceBuildJobCompleted (t , client , workspace .LatestBuild .ID )
167
+ // Stop the workspace
168
+ workspaceBuild := coderdtest .CreateWorkspaceBuild (t , client , workspace , database .WorkspaceTransitionStop )
169
+ coderdtest .AwaitWorkspaceBuildJobCompleted (t , client , workspaceBuild .ID )
163
170
164
171
inv , root := clitest .New (t , "start" , workspace .Name ,
165
172
"--build-option" , fmt .Sprintf ("%s=%s" , ephemeralParameterName , ephemeralParameterValue ))
@@ -374,3 +381,61 @@ func TestStartAutoUpdate(t *testing.T) {
374
381
})
375
382
}
376
383
}
384
+
385
+ func TestStart_AlreadyRunning (t * testing.T ) {
386
+ t .Parallel ()
387
+ ctx := testutil .Context (t , testutil .WaitShort )
388
+
389
+ client , db := coderdtest .NewWithDatabase (t , nil )
390
+ owner := coderdtest .CreateFirstUser (t , client )
391
+ memberClient , member := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID )
392
+ r := dbfake .WorkspaceBuild (t , db , database.Workspace {
393
+ OwnerID : member .ID ,
394
+ OrganizationID : owner .OrganizationID ,
395
+ }).Do ()
396
+
397
+ inv , root := clitest .New (t , "start" , r .Workspace .Name )
398
+ clitest .SetupConfig (t , memberClient , root )
399
+ doneChan := make (chan struct {})
400
+ pty := ptytest .New (t ).Attach (inv )
401
+ go func () {
402
+ defer close (doneChan )
403
+ err := inv .Run ()
404
+ assert .NoError (t , err )
405
+ }()
406
+
407
+ pty .ExpectMatch ("workspace is already running" )
408
+ _ = testutil .RequireRecvCtx (ctx , t , doneChan )
409
+ }
410
+
411
+ func TestStart_Starting (t * testing.T ) {
412
+ t .Parallel ()
413
+ ctx := testutil .Context (t , testutil .WaitShort )
414
+
415
+ client , db := coderdtest .NewWithDatabase (t , nil )
416
+ owner := coderdtest .CreateFirstUser (t , client )
417
+ memberClient , member := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID )
418
+ r := dbfake .WorkspaceBuild (t , db , database.Workspace {
419
+ OwnerID : member .ID ,
420
+ OrganizationID : owner .OrganizationID ,
421
+ }).
422
+ Starting ().
423
+ Do ()
424
+
425
+ inv , root := clitest .New (t , "start" , r .Workspace .Name )
426
+ clitest .SetupConfig (t , memberClient , root )
427
+ doneChan := make (chan struct {})
428
+ pty := ptytest .New (t ).Attach (inv )
429
+ go func () {
430
+ defer close (doneChan )
431
+ err := inv .Run ()
432
+ assert .NoError (t , err )
433
+ }()
434
+
435
+ pty .ExpectMatch ("workspace is already starting" )
436
+
437
+ _ = dbfake .JobComplete (t , db , r .Build .JobID ).Do ()
438
+ pty .ExpectMatch ("workspace has been started" )
439
+
440
+ _ = testutil .RequireRecvCtx (ctx , t , doneChan )
441
+ }
0 commit comments