Skip to content

Commit f9b4349

Browse files
committed
More tests
1 parent ae6f072 commit f9b4349

File tree

2 files changed

+171
-0
lines changed

2 files changed

+171
-0
lines changed

coderd/database/dbgen/generator.go

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -386,6 +386,21 @@ func TemplateVersion(t testing.TB, db database.Store, orig database.TemplateVers
386386
return version
387387
}
388388

389+
func TemplateVersionVariable(t testing.TB, db database.Store, orig database.TemplateVersionVariable) database.TemplateVersionVariable {
390+
version, err := db.InsertTemplateVersionVariable(context.Background(), database.InsertTemplateVersionVariableParams{
391+
TemplateVersionID: takeFirst(orig.TemplateVersionID, uuid.New()),
392+
Name: takeFirst(orig.Name, namesgenerator.GetRandomName(1)),
393+
Description: takeFirst(orig.Description, namesgenerator.GetRandomName(1)),
394+
Type: takeFirst(orig.Type, "string"),
395+
Value: takeFirst(orig.Value, ""),
396+
DefaultValue: takeFirst(orig.DefaultValue, namesgenerator.GetRandomName(1)),
397+
Required: takeFirst(orig.Required, false),
398+
Sensitive: takeFirst(orig.Sensitive, false),
399+
})
400+
require.NoError(t, err, "insert template version variable")
401+
return version
402+
}
403+
389404
func ParameterSchema(t testing.TB, db database.Store, seed database.ParameterSchema) database.ParameterSchema {
390405
scheme, err := db.InsertParameterSchema(context.Background(), database.InsertParameterSchemaParams{
391406
ID: takeFirst(seed.ID, uuid.New()),

coderd/provisionerdserver/provisionerdserver_test.go

Lines changed: 156 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -113,8 +113,26 @@ func TestAcquireJob(t *testing.T) {
113113
Type: database.ProvisionerJobTypeTemplateVersionImport,
114114
Input: must(json.Marshal(provisionerdserver.TemplateVersionImportJob{
115115
TemplateVersionID: version.ID,
116+
UserVariableValues: []codersdk.VariableValue{
117+
{Name: "second", Value: "bah"},
118+
},
116119
})),
117120
})
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+
})
118136
workspace := dbgen.Workspace(t, srv.Database, database.Workspace{
119137
TemplateID: template.ID,
120138
OwnerID: user.ID,
@@ -168,6 +186,17 @@ func TestAcquireJob(t *testing.T) {
168186
WorkspaceBuildId: build.ID.String(),
169187
WorkspaceName: workspace.Name,
170188
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+
},
171200
Metadata: &sdkproto.Provision_Metadata{
172201
CoderUrl: srv.AccessURL.String(),
173202
WorkspaceTransition: sdkproto.WorkspaceTransition_START,
@@ -253,6 +282,47 @@ func TestAcquireJob(t *testing.T) {
253282
require.NoError(t, err)
254283
require.JSONEq(t, string(want), string(got))
255284
})
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+
})
256326
}
257327

258328
func TestUpdateJob(t *testing.T) {
@@ -384,6 +454,92 @@ func TestUpdateJob(t *testing.T) {
384454
require.NoError(t, err)
385455
require.Equal(t, "# hello world", version.Readme)
386456
})
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+
})
387543
}
388544

389545
func TestFailJob(t *testing.T) {

0 commit comments

Comments
 (0)