Skip to content

Commit ae6f072

Browse files
committed
Tests
1 parent bc18624 commit ae6f072

File tree

6 files changed

+125
-62
lines changed

6 files changed

+125
-62
lines changed

cli/templatecreate.go

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -146,19 +146,21 @@ type createValidTemplateVersionArgs struct {
146146
func createValidTemplateVersion(cmd *cobra.Command, args createValidTemplateVersionArgs, parameters ...codersdk.CreateParameterRequest) (*codersdk.TemplateVersion, []codersdk.CreateParameterRequest, error) {
147147
client := args.Client
148148

149+
// FIXME(mtojek): I will iterate on CLI experience in the follow-up.
150+
// see: https://github.com/coder/coder/issues/5980
149151
variableValues, err := loadVariableValues(args.ValuesFile)
150152
if err != nil {
151153
return nil, nil, err
152154
}
153155

154156
req := codersdk.CreateTemplateVersionRequest{
155-
Name: args.Name,
156-
StorageMethod: codersdk.ProvisionerStorageMethodFile,
157-
FileID: args.FileID,
158-
Provisioner: codersdk.ProvisionerType(args.Provisioner),
159-
ParameterValues: parameters,
160-
ProvisionerTags: args.ProvisionerTags,
161-
VariableValues: variableValues,
157+
Name: args.Name,
158+
StorageMethod: codersdk.ProvisionerStorageMethodFile,
159+
FileID: args.FileID,
160+
Provisioner: codersdk.ProvisionerType(args.Provisioner),
161+
ParameterValues: parameters,
162+
ProvisionerTags: args.ProvisionerTags,
163+
UserVariableValues: variableValues,
162164
}
163165
if args.Template != nil {
164166
req.TemplateID = args.Template.ID

coderd/coderdtest/coderdtest.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -516,17 +516,23 @@ func createAnotherUserRetry(t *testing.T, client *codersdk.Client, organizationI
516516
// CreateTemplateVersion creates a template import provisioner job
517517
// with the responses provided. It uses the "echo" provisioner for compatibility
518518
// with testing.
519-
func CreateTemplateVersion(t *testing.T, client *codersdk.Client, organizationID uuid.UUID, res *echo.Responses) codersdk.TemplateVersion {
519+
func CreateTemplateVersion(t *testing.T, client *codersdk.Client, organizationID uuid.UUID, res *echo.Responses, mutators ...func(*codersdk.CreateTemplateVersionRequest)) codersdk.TemplateVersion {
520520
t.Helper()
521521
data, err := echo.Tar(res)
522522
require.NoError(t, err)
523523
file, err := client.Upload(context.Background(), codersdk.ContentTypeTar, bytes.NewReader(data))
524524
require.NoError(t, err)
525-
templateVersion, err := client.CreateTemplateVersion(context.Background(), organizationID, codersdk.CreateTemplateVersionRequest{
525+
526+
req := codersdk.CreateTemplateVersionRequest{
526527
FileID: file.ID,
527528
StorageMethod: codersdk.ProvisionerStorageMethodFile,
528529
Provisioner: codersdk.ProvisionerTypeEcho,
529-
})
530+
}
531+
for _, mut := range mutators {
532+
mut(&req)
533+
}
534+
535+
templateVersion, err := client.CreateTemplateVersion(context.Background(), organizationID, req)
530536
require.NoError(t, err)
531537
return templateVersion
532538
}

coderd/templateversions.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1303,7 +1303,7 @@ func (api *API) postTemplateVersionsByOrganization(rw http.ResponseWriter, r *ht
13031303
templateVersionID := uuid.New()
13041304
jobInput, err := json.Marshal(provisionerdserver.TemplateVersionImportJob{
13051305
TemplateVersionID: templateVersionID,
1306-
UserVariableValues: req.VariableValues,
1306+
UserVariableValues: req.UserVariableValues,
13071307
})
13081308
if err != nil {
13091309
return xerrors.Errorf("marshal job input: %w", err)

coderd/templateversions_test.go

Lines changed: 104 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1103,65 +1103,120 @@ func TestTemplateExamples(t *testing.T) {
11031103
func TestTemplateVersionVariables(t *testing.T) {
11041104
t.Parallel()
11051105

1106-
templateVariables := []*proto.TemplateVariable{
1107-
{
1108-
Name: "first_variable",
1109-
Description: "This is the first variable",
1110-
Type: "string",
1111-
Required: true,
1112-
Sensitive: true,
1113-
},
1114-
{
1115-
Name: "second_variable",
1116-
Description: "This is the second variable",
1117-
DefaultValue: "123",
1118-
Type: "number",
1119-
},
1106+
createEchoResponses := func(templateVariables []*proto.TemplateVariable) *echo.Responses {
1107+
return &echo.Responses{
1108+
Parse: []*proto.Parse_Response{
1109+
{
1110+
Type: &proto.Parse_Response_Complete{
1111+
Complete: &proto.Parse_Complete{
1112+
TemplateVariables: templateVariables,
1113+
},
1114+
},
1115+
},
1116+
},
1117+
ProvisionPlan: echo.ProvisionComplete,
1118+
ProvisionApply: []*proto.Provision_Response{{
1119+
Type: &proto.Provision_Response_Complete{
1120+
Complete: &proto.Provision_Complete{},
1121+
},
1122+
}},
1123+
}
11201124
}
11211125

1122-
echoResponses := &echo.Responses{
1123-
Parse: []*proto.Parse_Response{
1126+
t.Run("Pass value for required variable", func(t *testing.T) {
1127+
t.Parallel()
1128+
1129+
templateVariables := []*proto.TemplateVariable{
11241130
{
1125-
Type: &proto.Parse_Response_Complete{
1126-
Complete: &proto.Parse_Complete{
1127-
TemplateVariables: templateVariables,
1131+
Name: "first_variable",
1132+
Description: "This is the first variable",
1133+
Type: "string",
1134+
Required: true,
1135+
Sensitive: true,
1136+
},
1137+
}
1138+
const firstVariableValue = "foobar"
1139+
1140+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
1141+
user := coderdtest.CreateFirstUser(t, client)
1142+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID,
1143+
createEchoResponses(templateVariables),
1144+
func(ctvr *codersdk.CreateTemplateVersionRequest) {
1145+
ctvr.UserVariableValues = []codersdk.VariableValue{
1146+
{
1147+
Name: templateVariables[0].Name,
1148+
Value: firstVariableValue,
11281149
},
1129-
},
1150+
}
11301151
},
1131-
},
1132-
ProvisionPlan: echo.ProvisionComplete,
1133-
ProvisionApply: []*proto.Provision_Response{{
1134-
Type: &proto.Provision_Response_Complete{
1135-
Complete: &proto.Provision_Complete{},
1152+
)
1153+
templateVersion := coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
1154+
1155+
// As user passed the value for the first parameter, the job will succeed.
1156+
require.Empty(t, templateVersion.Job.Error)
1157+
1158+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
1159+
defer cancel()
1160+
1161+
actualVariables, err := client.TemplateVersionVariables(ctx, templateVersion.ID)
1162+
require.NoError(t, err)
1163+
1164+
require.Len(t, actualVariables, 1)
1165+
require.Equal(t, templateVariables[0].Name, actualVariables[0].Name)
1166+
require.Equal(t, templateVariables[0].Description, actualVariables[0].Description)
1167+
require.Equal(t, templateVariables[0].Type, actualVariables[0].Type)
1168+
require.Equal(t, templateVariables[0].DefaultValue, actualVariables[0].DefaultValue)
1169+
require.Equal(t, templateVariables[0].Required, actualVariables[0].Required)
1170+
require.Equal(t, templateVariables[0].Sensitive, actualVariables[0].Sensitive)
1171+
require.Equal(t, firstVariableValue, actualVariables[0].Value)
1172+
})
1173+
1174+
t.Run("Missing value for required variable", func(t *testing.T) {
1175+
t.Parallel()
1176+
1177+
templateVariables := []*proto.TemplateVariable{
1178+
{
1179+
Name: "first_variable",
1180+
Description: "This is the first variable",
1181+
Type: "string",
1182+
Required: true,
1183+
Sensitive: true,
11361184
},
1137-
}},
1138-
}
1185+
{
1186+
Name: "second_variable",
1187+
Description: "This is the second variable",
1188+
DefaultValue: "123",
1189+
Type: "number",
1190+
},
1191+
}
11391192

1140-
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
1141-
user := coderdtest.CreateFirstUser(t, client)
1142-
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, echoResponses)
1143-
templateVersion := coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
1193+
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
1194+
user := coderdtest.CreateFirstUser(t, client)
1195+
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, createEchoResponses(templateVariables))
1196+
templateVersion := coderdtest.AwaitTemplateVersionJob(t, client, version.ID)
11441197

1145-
// As the first variable is marked as required and misses the default value,
1146-
// the job will fail, but will populate the template_version_variables table with existing variables.
1147-
require.Contains(t, templateVersion.Job.Error, "required template variables need values")
1198+
// As the first variable is marked as required and misses the default value,
1199+
// the job will fail, but will populate the template_version_variables table with existing variables.
1200+
require.Contains(t, templateVersion.Job.Error, "required template variables need values")
11481201

1149-
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
1150-
defer cancel()
1202+
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitShort)
1203+
defer cancel()
11511204

1152-
actualVariables, err := client.TemplateVersionVariables(ctx, templateVersion.ID)
1153-
require.NoError(t, err)
1205+
actualVariables, err := client.TemplateVersionVariables(ctx, templateVersion.ID)
1206+
require.NoError(t, err)
11541207

1155-
require.Len(t, actualVariables, 2)
1156-
for i := range templateVariables {
1157-
require.Equal(t, templateVariables[i].Name, actualVariables[i].Name)
1158-
require.Equal(t, templateVariables[i].Description, actualVariables[i].Description)
1159-
require.Equal(t, templateVariables[i].Type, actualVariables[i].Type)
1160-
require.Equal(t, templateVariables[i].DefaultValue, actualVariables[i].DefaultValue)
1161-
require.Equal(t, templateVariables[i].Required, actualVariables[i].Required)
1162-
require.Equal(t, templateVariables[i].Sensitive, actualVariables[i].Sensitive)
1163-
}
1208+
require.Len(t, actualVariables, 2)
1209+
for i := range templateVariables {
1210+
require.Equal(t, templateVariables[i].Name, actualVariables[i].Name)
1211+
require.Equal(t, templateVariables[i].Description, actualVariables[i].Description)
1212+
require.Equal(t, templateVariables[i].Type, actualVariables[i].Type)
1213+
require.Equal(t, templateVariables[i].DefaultValue, actualVariables[i].DefaultValue)
1214+
require.Equal(t, templateVariables[i].Required, actualVariables[i].Required)
1215+
require.Equal(t, templateVariables[i].Sensitive, actualVariables[i].Sensitive)
1216+
}
1217+
1218+
require.Equal(t, "", actualVariables[0].Value)
1219+
require.Equal(t, templateVariables[1].DefaultValue, actualVariables[1].Value)
11641220

1165-
require.Equal(t, "", actualVariables[0].Value)
1166-
require.Equal(t, templateVariables[1].DefaultValue, actualVariables[1].Value)
1221+
})
11671222
}

codersdk/organizations.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ type CreateTemplateVersionRequest struct {
5555
// during the dry-run provision stage.
5656
ParameterValues []CreateParameterRequest `json:"parameter_values,omitempty"`
5757

58-
VariableValues []VariableValue `json:"variable_values,omitempty"`
58+
UserVariableValues []VariableValue `json:"user_variable_values,omitempty"`
5959
}
6060

6161
type VariableValue struct {

site/src/api/typesGenerated.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ export interface CreateTemplateVersionRequest {
200200
readonly provisioner: ProvisionerType
201201
readonly tags: Record<string, string>
202202
readonly parameter_values?: CreateParameterRequest[]
203-
readonly variable_values?: VariableValue[]
203+
readonly user_variable_values?: VariableValue[]
204204
}
205205

206206
// From codersdk/audit.go

0 commit comments

Comments
 (0)