@@ -265,6 +265,167 @@ func TestWorkspacePreset(t *testing.T) {
265
265
}` ,
266
266
ExpectError : regexp .MustCompile ("An argument named \" invalid_argument\" is not expected here." ),
267
267
},
268
+ {
269
+ Name : "Prebuilds is set with an empty autoscaling field" ,
270
+ Config : `
271
+ data "coder_workspace_preset" "preset_1" {
272
+ name = "preset_1"
273
+ prebuilds {
274
+ instances = 1
275
+ autoscaling {}
276
+ }
277
+ }` ,
278
+ ExpectError : regexp .MustCompile (`The argument "[^"]+" is required, but no definition was found.` ),
279
+ },
280
+ {
281
+ Name : "Prebuilds is set with an autoscaling field, but without timezone" ,
282
+ Config : `
283
+ data "coder_workspace_preset" "preset_1" {
284
+ name = "preset_1"
285
+ prebuilds {
286
+ instances = 1
287
+ autoscaling {
288
+ schedule {
289
+ cron = "* 8-18 * * 1-5"
290
+ instances = 3
291
+ }
292
+ }
293
+ }
294
+ }` ,
295
+ ExpectError : regexp .MustCompile (`The argument "timezone" is required, but no definition was found.` ),
296
+ },
297
+ {
298
+ Name : "Prebuilds is set with an autoscaling field, but without schedule" ,
299
+ Config : `
300
+ data "coder_workspace_preset" "preset_1" {
301
+ name = "preset_1"
302
+ prebuilds {
303
+ instances = 1
304
+ autoscaling {
305
+ timezone = "UTC"
306
+ }
307
+ }
308
+ }` ,
309
+ ExpectError : regexp .MustCompile (`At least 1 "schedule" blocks are required.` ),
310
+ },
311
+ {
312
+ Name : "Prebuilds is set with an autoscaling.schedule field, but without cron" ,
313
+ Config : `
314
+ data "coder_workspace_preset" "preset_1" {
315
+ name = "preset_1"
316
+ prebuilds {
317
+ instances = 1
318
+ autoscaling {
319
+ timezone = "UTC"
320
+ schedule {
321
+ instances = 3
322
+ }
323
+ }
324
+ }
325
+ }` ,
326
+ ExpectError : regexp .MustCompile (`The argument "cron" is required, but no definition was found.` ),
327
+ },
328
+ {
329
+ Name : "Prebuilds is set with an autoscaling.schedule field, but without cron" ,
330
+ Config : `
331
+ data "coder_workspace_preset" "preset_1" {
332
+ name = "preset_1"
333
+ prebuilds {
334
+ instances = 1
335
+ autoscaling {
336
+ timezone = "UTC"
337
+ schedule {
338
+ cron = "* 8-18 * * 1-5"
339
+ }
340
+ }
341
+ }
342
+ }` ,
343
+ ExpectError : regexp .MustCompile (`The argument "instances" is required, but no definition was found.` ),
344
+ },
345
+ {
346
+ Name : "Prebuilds is set with an autoscaling.schedule field, but with invalid type for instances" ,
347
+ Config : `
348
+ data "coder_workspace_preset" "preset_1" {
349
+ name = "preset_1"
350
+ prebuilds {
351
+ instances = 1
352
+ autoscaling {
353
+ timezone = "UTC"
354
+ schedule {
355
+ cron = "* 8-18 * * 1-5"
356
+ instances = "not_a_number"
357
+ }
358
+ }
359
+ }
360
+ }` ,
361
+ ExpectError : regexp .MustCompile (`Inappropriate value for attribute "instances": a number is required` ),
362
+ },
363
+ {
364
+ Name : "Prebuilds is set with an autoscaling field with 1 schedule" ,
365
+ Config : `
366
+ data "coder_workspace_preset" "preset_1" {
367
+ name = "preset_1"
368
+ prebuilds {
369
+ instances = 1
370
+ autoscaling {
371
+ timezone = "UTC"
372
+ schedule {
373
+ cron = "* 8-18 * * 1-5"
374
+ instances = 3
375
+ }
376
+ }
377
+ }
378
+ }` ,
379
+ ExpectError : nil ,
380
+ Check : func (state * terraform.State ) error {
381
+ require .Len (t , state .Modules , 1 )
382
+ require .Len (t , state .Modules [0 ].Resources , 1 )
383
+ resource := state .Modules [0 ].Resources ["data.coder_workspace_preset.preset_1" ]
384
+ require .NotNil (t , resource )
385
+ attrs := resource .Primary .Attributes
386
+ require .Equal (t , attrs ["name" ], "preset_1" )
387
+ require .Equal (t , attrs ["prebuilds.0.autoscaling.0.timezone" ], "UTC" )
388
+ require .Equal (t , attrs ["prebuilds.0.autoscaling.0.schedule.0.cron" ], "* 8-18 * * 1-5" )
389
+ require .Equal (t , attrs ["prebuilds.0.autoscaling.0.schedule.0.instances" ], "3" )
390
+ return nil
391
+ },
392
+ },
393
+ {
394
+ Name : "Prebuilds is set with an autoscaling field with 2 schedules" ,
395
+ Config : `
396
+ data "coder_workspace_preset" "preset_1" {
397
+ name = "preset_1"
398
+ prebuilds {
399
+ instances = 1
400
+ autoscaling {
401
+ timezone = "UTC"
402
+ schedule {
403
+ cron = "* 8-18 * * 1-5"
404
+ instances = 3
405
+ }
406
+ schedule {
407
+ cron = "* 8-14 * * 6"
408
+ instances = 1
409
+ }
410
+ }
411
+ }
412
+ }` ,
413
+ ExpectError : nil ,
414
+ Check : func (state * terraform.State ) error {
415
+ require .Len (t , state .Modules , 1 )
416
+ require .Len (t , state .Modules [0 ].Resources , 1 )
417
+ resource := state .Modules [0 ].Resources ["data.coder_workspace_preset.preset_1" ]
418
+ require .NotNil (t , resource )
419
+ attrs := resource .Primary .Attributes
420
+ require .Equal (t , attrs ["name" ], "preset_1" )
421
+ require .Equal (t , attrs ["prebuilds.0.autoscaling.0.timezone" ], "UTC" )
422
+ require .Equal (t , attrs ["prebuilds.0.autoscaling.0.schedule.0.cron" ], "* 8-18 * * 1-5" )
423
+ require .Equal (t , attrs ["prebuilds.0.autoscaling.0.schedule.0.instances" ], "3" )
424
+ require .Equal (t , attrs ["prebuilds.0.autoscaling.0.schedule.1.cron" ], "* 8-14 * * 6" )
425
+ require .Equal (t , attrs ["prebuilds.0.autoscaling.0.schedule.1.instances" ], "1" )
426
+ return nil
427
+ },
428
+ },
268
429
}
269
430
270
431
for _ , testcase := range testcases {
0 commit comments