@@ -219,3 +219,77 @@ func TestStartWithParameters(t *testing.T) {
219
219
})
220
220
})
221
221
}
222
+
223
+ // TestStartAutoUpdate also tests restart since the flows are virtually identical.
224
+ func TestStartAutoUpdate (t * testing.T ) {
225
+ t .Parallel ()
226
+
227
+ const (
228
+ stringParameterName = "myparam"
229
+ stringParameterValue = "abc"
230
+ )
231
+
232
+ stringRichParameters := []* proto.RichParameter {
233
+ {Name : stringParameterName , Type : "string" , Mutable : true , Required : true },
234
+ }
235
+
236
+ type testcase struct {
237
+ Name string
238
+ Cmd string
239
+ }
240
+
241
+ cases := []testcase {
242
+ {
243
+ Name : "StartOK" ,
244
+ Cmd : "start" ,
245
+ },
246
+ {
247
+ Name : "RestartOK" ,
248
+ Cmd : "restart" ,
249
+ },
250
+ }
251
+
252
+ for _ , c := range cases {
253
+ c := c
254
+ t .Run (c .Name , func (t * testing.T ) {
255
+ t .Parallel ()
256
+
257
+ client := coderdtest .New (t , & coderdtest.Options {IncludeProvisionerDaemon : true })
258
+ owner := coderdtest .CreateFirstUser (t , client )
259
+ member , _ := coderdtest .CreateAnotherUser (t , client , owner .OrganizationID )
260
+ version1 := coderdtest .CreateTemplateVersion (t , client , owner .OrganizationID , nil )
261
+ coderdtest .AwaitTemplateVersionJobCompleted (t , client , version1 .ID )
262
+ template := coderdtest .CreateTemplate (t , client , owner .OrganizationID , version1 .ID )
263
+ workspace := coderdtest .CreateWorkspace (t , member , owner .OrganizationID , template .ID , func (cwr * codersdk.CreateWorkspaceRequest ) {
264
+ cwr .AutomaticUpdates = codersdk .AutomaticUpdatesAlways
265
+ })
266
+ coderdtest .AwaitWorkspaceBuildJobCompleted (t , client , workspace .LatestBuild .ID )
267
+
268
+ if c .Cmd == "start" {
269
+ coderdtest .MustTransitionWorkspace (t , member , workspace .ID , database .WorkspaceTransitionStart , database .WorkspaceTransitionStop )
270
+ }
271
+ version2 := coderdtest .CreateTemplateVersion (t , client , owner .OrganizationID , prepareEchoResponses (stringRichParameters ), func (ctvr * codersdk.CreateTemplateVersionRequest ) {
272
+ ctvr .TemplateID = template .ID
273
+ })
274
+ coderdtest .AwaitTemplateVersionJobCompleted (t , client , version2 .ID )
275
+ coderdtest .UpdateActiveTemplateVersion (t , client , template .ID , version2 .ID )
276
+
277
+ inv , root := clitest .New (t , c .Cmd , "-y" , workspace .Name )
278
+ clitest .SetupConfig (t , member , root )
279
+ doneChan := make (chan struct {})
280
+ pty := ptytest .New (t ).Attach (inv )
281
+ go func () {
282
+ defer close (doneChan )
283
+ err := inv .Run ()
284
+ assert .NoError (t , err )
285
+ }()
286
+
287
+ pty .ExpectMatch (stringParameterName )
288
+ pty .WriteLine (stringParameterValue )
289
+ <- doneChan
290
+
291
+ workspace = coderdtest .MustWorkspace (t , member , workspace .ID )
292
+ require .Equal (t , version2 .ID , workspace .LatestBuild .TemplateVersionID )
293
+ })
294
+ }
295
+ }
0 commit comments