Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5d6c547

Browse files
committed
Column: validation error
1 parent b6c3cde commit 5d6c547

15 files changed

+278
-245
lines changed

coderd/database/databasefake/databasefake.go

+1
Original file line numberDiff line numberDiff line change
@@ -2442,6 +2442,7 @@ func (q *fakeQuerier) InsertTemplateVersionParameter(_ context.Context, arg data
24422442
DefaultValue: arg.DefaultValue,
24432443
Icon: arg.Icon,
24442444
Options: arg.Options,
2445+
ValidationError: arg.ValidationError,
24452446
ValidationRegex: arg.ValidationRegex,
24462447
ValidationMin: arg.ValidationMin,
24472448
ValidationMax: arg.ValidationMax,

coderd/database/dump.sql

+4-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
ALTER TABLE template_version_parameters DROP COLUMN validation_error;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ALTER TABLE template_version_parameters ADD COLUMN validation_error text NOT NULL;
2+
3+
COMMENT ON COLUMN template_version_parameters.validation_error
4+
IS 'Validation: error displayed when the regex does not match.';

coderd/database/models.go

+2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

+10-4
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/templateversionparameters.sql

+4-2
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@ INSERT INTO
1111
options,
1212
validation_regex,
1313
validation_min,
14-
validation_max
14+
validation_max,
15+
validation_error
1516
)
1617
VALUES
1718
(
@@ -25,7 +26,8 @@ VALUES
2526
$8,
2627
$9,
2728
$10,
28-
$11
29+
$11,
30+
$12
2931
) RETURNING *;
3032

3133
-- name: GetTemplateVersionParameters :many

coderd/provisionerdserver/provisionerdserver.go

+1
Original file line numberDiff line numberDiff line change
@@ -647,6 +647,7 @@ func (server *Server) CompleteJob(ctx context.Context, completed *proto.Complete
647647
Icon: richParameter.Icon,
648648
Options: options,
649649
ValidationRegex: richParameter.ValidationRegex,
650+
ValidationError: richParameter.ValidationError,
650651
ValidationMin: richParameter.ValidationMin,
651652
ValidationMax: richParameter.ValidationMax,
652653
})

coderd/templateversions.go

+1
Original file line numberDiff line numberDiff line change
@@ -1414,6 +1414,7 @@ func convertTemplateVersionParameter(param database.TemplateVersionParameter) (c
14141414
ValidationRegex: param.ValidationRegex,
14151415
ValidationMin: param.ValidationMin,
14161416
ValidationMax: param.ValidationMax,
1417+
ValidationError: param.ValidationError,
14171418
}, nil
14181419
}
14191420

coderd/workspacebuilds_test.go

+6-7
Original file line numberDiff line numberDiff line change
@@ -883,12 +883,11 @@ func TestWorkspaceBuildValidateRichParameters(t *testing.T) {
883883
{Name: boolParameterName, Type: "bool", Mutable: true},
884884
}
885885

886-
/* FIXME
887886
regexRichParameters := []*proto.RichParameter{
888-
{Name: stringParameterName, Type: "string", Mutable: true, ValidationRegex: "[a-z]+"},
887+
{Name: stringParameterName, Type: "string", Mutable: true, ValidationRegex: "^[a-z]+$", ValidationError: "this is error"},
889888
{Name: numberParameterName, Type: "number", Mutable: true},
890889
{Name: boolParameterName, Type: "bool", Mutable: true},
891-
}*/
890+
}
892891

893892
tests := []struct {
894893
parameterName string
@@ -904,17 +903,18 @@ func TestWorkspaceBuildValidateRichParameters(t *testing.T) {
904903
{stringParameterName, "", false, stringRichParameters},
905904
{stringParameterName, "foobar", true, stringRichParameters},
906905

907-
/* FIXME can't validate build parameter "string_parameter": an error must be specified with a regex validation
908906
{stringParameterName, "abcd", true, regexRichParameters},
909-
{stringParameterName, "abcd1", false, regexRichParameters},*/
907+
{stringParameterName, "abcd1", false, regexRichParameters},
910908

911909
{boolParameterName, "true", true, boolRichParameters},
912910
{boolParameterName, "false", true, boolRichParameters},
913-
// FIXME {boolParameterName, "cat", false, boolRichParameters},
911+
{boolParameterName, "cat", false, boolRichParameters},
914912
}
915913

916914
for _, tc := range tests {
917915
t.Run(tc.parameterName+"-"+tc.value, func(t *testing.T) {
916+
t.Parallel()
917+
918918
client := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
919919
user := coderdtest.CreateFirstUser(t, client)
920920
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, prepareEchoResponses(tc.richParameters))
@@ -928,7 +928,6 @@ func TestWorkspaceBuildValidateRichParameters(t *testing.T) {
928928
workspaceBuild := coderdtest.AwaitWorkspaceBuildJob(t, client, workspace.LatestBuild.ID)
929929
require.Equal(t, codersdk.WorkspaceStatusRunning, workspaceBuild.Status)
930930

931-
// Update build parameters
932931
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
933932
defer cancel()
934933

codersdk/richparameters.go

+7-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ func ValidateWorkspaceBuildParameters(richParameters []TemplateVersionParameter,
1010
for _, buildParameter := range buildParameters {
1111
richParameter, found := findTemplateVersionParameter(richParameters, buildParameter.Name)
1212
if !found {
13-
return xerrors.Errorf(`workspace build parameter is not defined in the template ("coder_parameter")`)
13+
return xerrors.Errorf(`workspace build parameter is not defined in the template ("coder_parameter"): %s`, buildParameter.Name)
1414
}
1515

1616
err := ValidateWorkspaceBuildParameter(*richParameter, buildParameter)
@@ -41,6 +41,11 @@ func ValidateWorkspaceBuildParameter(richParameter TemplateVersionParameter, bui
4141
return nil
4242
}
4343

44+
// Method provider.Validation.Valid() does not check the boolean type correctness, so it has to be checked here.
45+
if richParameter.Type == "bool" && (buildParameter.Value != "true" && buildParameter.Value != "false") {
46+
return xerrors.Errorf("%q is not a bool", richParameter.Type)
47+
}
48+
4449
if !validationEnabled(richParameter) {
4550
return nil
4651
}
@@ -49,7 +54,7 @@ func ValidateWorkspaceBuildParameter(richParameter TemplateVersionParameter, bui
4954
Min: int(richParameter.ValidationMin),
5055
Max: int(richParameter.ValidationMax),
5156
Regex: richParameter.ValidationRegex,
52-
// TODO Error: ?,
57+
Error: richParameter.ValidationError,
5358
}
5459
return validation.Valid(richParameter.Type, buildParameter.Value)
5560
}

provisioner/terraform/resources.go

+1
Original file line numberDiff line numberDiff line change
@@ -421,6 +421,7 @@ func ConvertResourcesAndParameters(modules []*tfjson.StateModule, rawGraph strin
421421
}
422422
if len(param.Validation) == 1 {
423423
protoParam.ValidationRegex = param.Validation[0].Regex
424+
protoParam.ValidationError = param.Validation[0].Error
424425
protoParam.ValidationMax = int32(param.Validation[0].Max)
425426
protoParam.ValidationMin = int32(param.Validation[0].Min)
426427
}

0 commit comments

Comments
 (0)