@@ -113,8 +113,26 @@ func TestAcquireJob(t *testing.T) {
113
113
Type : database .ProvisionerJobTypeTemplateVersionImport ,
114
114
Input : must (json .Marshal (provisionerdserver.TemplateVersionImportJob {
115
115
TemplateVersionID : version .ID ,
116
+ UserVariableValues : []codersdk.VariableValue {
117
+ {Name : "second" , Value : "bah" },
118
+ },
116
119
})),
117
120
})
121
+ _ = dbgen .TemplateVersionVariable (t , srv .Database , database.TemplateVersionVariable {
122
+ TemplateVersionID : version .ID ,
123
+ Name : "first" ,
124
+ Value : "first_value" ,
125
+ DefaultValue : "default_value" ,
126
+ Sensitive : true ,
127
+ })
128
+ _ = dbgen .TemplateVersionVariable (t , srv .Database , database.TemplateVersionVariable {
129
+ TemplateVersionID : version .ID ,
130
+ Name : "second" ,
131
+ Value : "second_value" ,
132
+ DefaultValue : "default_value" ,
133
+ Required : true ,
134
+ Sensitive : false ,
135
+ })
118
136
workspace := dbgen .Workspace (t , srv .Database , database.Workspace {
119
137
TemplateID : template .ID ,
120
138
OwnerID : user .ID ,
@@ -168,6 +186,17 @@ func TestAcquireJob(t *testing.T) {
168
186
WorkspaceBuildId : build .ID .String (),
169
187
WorkspaceName : workspace .Name ,
170
188
ParameterValues : []* sdkproto.ParameterValue {},
189
+ VariableValues : []* sdkproto.VariableValue {
190
+ {
191
+ Name : "first" ,
192
+ Value : "first_value" ,
193
+ Sensitive : true ,
194
+ },
195
+ {
196
+ Name : "second" ,
197
+ Value : "second_value" ,
198
+ },
199
+ },
171
200
Metadata : & sdkproto.Provision_Metadata {
172
201
CoderUrl : srv .AccessURL .String (),
173
202
WorkspaceTransition : sdkproto .WorkspaceTransition_START ,
@@ -253,6 +282,47 @@ func TestAcquireJob(t *testing.T) {
253
282
require .NoError (t , err )
254
283
require .JSONEq (t , string (want ), string (got ))
255
284
})
285
+ t .Run ("TemplateVersionImportWithUserVariable" , func (t * testing.T ) {
286
+ t .Parallel ()
287
+ srv := setup (t , false )
288
+ ctx := context .Background ()
289
+
290
+ user := dbgen .User (t , srv .Database , database.User {})
291
+ version := dbgen .TemplateVersion (t , srv .Database , database.TemplateVersion {})
292
+ file := dbgen .File (t , srv .Database , database.File {CreatedBy : user .ID })
293
+ _ = dbgen .ProvisionerJob (t , srv .Database , database.ProvisionerJob {
294
+ FileID : file .ID ,
295
+ InitiatorID : user .ID ,
296
+ Provisioner : database .ProvisionerTypeEcho ,
297
+ StorageMethod : database .ProvisionerStorageMethodFile ,
298
+ Type : database .ProvisionerJobTypeTemplateVersionImport ,
299
+ Input : must (json .Marshal (provisionerdserver.TemplateVersionImportJob {
300
+ TemplateVersionID : version .ID ,
301
+ UserVariableValues : []codersdk.VariableValue {
302
+ {Name : "first" , Value : "first_value" },
303
+ },
304
+ })),
305
+ })
306
+
307
+ job , err := srv .AcquireJob (ctx , nil )
308
+ require .NoError (t , err )
309
+
310
+ got , err := json .Marshal (job .Type )
311
+ require .NoError (t , err )
312
+
313
+ want , err := json .Marshal (& proto.AcquiredJob_TemplateImport_ {
314
+ TemplateImport : & proto.AcquiredJob_TemplateImport {
315
+ UserVariableValues : []* sdkproto.VariableValue {
316
+ {Name : "first" , Value : "first_value" },
317
+ },
318
+ Metadata : & sdkproto.Provision_Metadata {
319
+ CoderUrl : srv .AccessURL .String (),
320
+ },
321
+ },
322
+ })
323
+ require .NoError (t , err )
324
+ require .JSONEq (t , string (want ), string (got ))
325
+ })
256
326
}
257
327
258
328
func TestUpdateJob (t * testing.T ) {
@@ -384,6 +454,92 @@ func TestUpdateJob(t *testing.T) {
384
454
require .NoError (t , err )
385
455
require .Equal (t , "# hello world" , version .Readme )
386
456
})
457
+
458
+ t .Run ("TemplateVariables" , func (t * testing.T ) {
459
+ t .Parallel ()
460
+
461
+ t .Run ("Valid" , func (t * testing.T ) {
462
+ srv := setup (t , false )
463
+ job := setupJob (t , srv )
464
+ version , err := srv .Database .InsertTemplateVersion (ctx , database.InsertTemplateVersionParams {
465
+ ID : uuid .New (),
466
+ JobID : job ,
467
+ })
468
+ require .NoError (t , err )
469
+ firstTemplateVariable := & sdkproto.TemplateVariable {
470
+ Name : "first" ,
471
+ Type : "string" ,
472
+ DefaultValue : "default_value" ,
473
+ Sensitive : true ,
474
+ }
475
+ secondTemplateVariable := & sdkproto.TemplateVariable {
476
+ Name : "second" ,
477
+ Type : "string" ,
478
+ Required : true ,
479
+ Sensitive : true ,
480
+ }
481
+ response , err := srv .UpdateJob (ctx , & proto.UpdateJobRequest {
482
+ JobId : job .String (),
483
+ TemplateVariables : []* sdkproto.TemplateVariable {
484
+ firstTemplateVariable ,
485
+ secondTemplateVariable ,
486
+ },
487
+ UserVariableValues : []* sdkproto.VariableValue {
488
+ {
489
+ Name : "second" ,
490
+ Value : "foobar" ,
491
+ },
492
+ },
493
+ })
494
+ require .NoError (t , err )
495
+ require .Len (t , response .VariableValues , 2 )
496
+
497
+ templateVariables , err := srv .Database .GetTemplateVersionVariables (ctx , version .ID )
498
+ require .NoError (t , err )
499
+ require .Len (t , templateVariables , 2 )
500
+ require .Equal (t , templateVariables [0 ].Value , firstTemplateVariable .DefaultValue )
501
+ require .Equal (t , templateVariables [1 ].Value , "foobar" )
502
+ })
503
+
504
+ t .Run ("Missing required value" , func (t * testing.T ) {
505
+ srv := setup (t , false )
506
+ job := setupJob (t , srv )
507
+ version , err := srv .Database .InsertTemplateVersion (ctx , database.InsertTemplateVersionParams {
508
+ ID : uuid .New (),
509
+ JobID : job ,
510
+ })
511
+ require .NoError (t , err )
512
+ firstTemplateVariable := & sdkproto.TemplateVariable {
513
+ Name : "first" ,
514
+ Type : "string" ,
515
+ DefaultValue : "default_value" ,
516
+ Sensitive : true ,
517
+ }
518
+ secondTemplateVariable := & sdkproto.TemplateVariable {
519
+ Name : "second" ,
520
+ Type : "string" ,
521
+ Required : true ,
522
+ Sensitive : true ,
523
+ }
524
+ response , err := srv .UpdateJob (ctx , & proto.UpdateJobRequest {
525
+ JobId : job .String (),
526
+ TemplateVariables : []* sdkproto.TemplateVariable {
527
+ firstTemplateVariable ,
528
+ secondTemplateVariable ,
529
+ },
530
+ })
531
+ require .Error (t , err ) // required template variables need values
532
+ require .Nil (t , response )
533
+
534
+ // Even though there is an error returned, variables are stored in the database
535
+ // to show the schema in the site UI.
536
+ templateVariables , err := srv .Database .GetTemplateVersionVariables (ctx , version .ID )
537
+ require .NoError (t , err )
538
+ require .Len (t , templateVariables , 2 )
539
+ require .Equal (t , templateVariables [0 ].Value , firstTemplateVariable .DefaultValue )
540
+ require .Equal (t , templateVariables [1 ].Value , "" )
541
+ })
542
+ })
387
543
}
388
544
389
545
func TestFailJob (t * testing.T ) {
0 commit comments