mirror of
https://github.com/coder/coder.git
synced 2026-09-24 15:04:27 +08:00
fix: do not skip parameter validation if min or max = 0 (#7707)
This commit is contained in:
@@ -79,8 +79,8 @@ func ValidateWorkspaceBuildParameter(richParameter TemplateVersionParameter, bui
|
||||
}
|
||||
|
||||
validation := &provider.Validation{
|
||||
Min: int(richParameter.ValidationMin),
|
||||
Max: int(richParameter.ValidationMax),
|
||||
Min: ptrInt(richParameter.ValidationMin),
|
||||
Max: ptrInt(richParameter.ValidationMax),
|
||||
Regex: richParameter.ValidationRegex,
|
||||
Error: richParameter.ValidationError,
|
||||
Monotonic: string(richParameter.ValidationMonotonic),
|
||||
@@ -88,6 +88,14 @@ func ValidateWorkspaceBuildParameter(richParameter TemplateVersionParameter, bui
|
||||
return validation.Valid(richParameter.Type, value)
|
||||
}
|
||||
|
||||
func ptrInt(number *int32) *int {
|
||||
if number == nil {
|
||||
return nil
|
||||
}
|
||||
n := int(*number)
|
||||
return &n
|
||||
}
|
||||
|
||||
func findBuildParameter(params []WorkspaceBuildParameter, parameterName string) (*WorkspaceBuildParameter, bool) {
|
||||
if params == nil {
|
||||
return nil, false
|
||||
@@ -111,7 +119,8 @@ func parameterValuesAsArray(options []TemplateVersionParameterOption) []string {
|
||||
|
||||
func validationEnabled(param TemplateVersionParameter) bool {
|
||||
return len(param.ValidationRegex) > 0 ||
|
||||
(param.ValidationMin != 0 && param.ValidationMax != 0) ||
|
||||
param.ValidationMin != nil ||
|
||||
param.ValidationMax != nil ||
|
||||
len(param.ValidationMonotonic) > 0 ||
|
||||
param.Type == "bool" || // boolean type doesn't have any custom validation rules, but the value must be checked (true/false).
|
||||
param.Type == "list(string)" // list(string) type doesn't have special validation, but we need to check if this is a correct list.
|
||||
|
||||
@@ -5,6 +5,7 @@ import (
|
||||
|
||||
"github.com/stretchr/testify/require"
|
||||
|
||||
"github.com/coder/coder/coderd/util/ptr"
|
||||
"github.com/coder/coder/codersdk"
|
||||
)
|
||||
|
||||
@@ -72,8 +73,8 @@ func TestParameterResolver_ValidateResolve_PrevInvalid(t *testing.T) {
|
||||
p := codersdk.TemplateVersionParameter{
|
||||
Name: "n",
|
||||
Type: "number",
|
||||
ValidationMax: 10,
|
||||
ValidationMin: 1,
|
||||
ValidationMax: ptr.Ref(int32(10)),
|
||||
ValidationMin: ptr.Ref(int32(1)),
|
||||
}
|
||||
v, err := uut.ValidateResolve(p, nil)
|
||||
require.Error(t, err)
|
||||
@@ -89,8 +90,8 @@ func TestParameterResolver_ValidateResolve_DefaultInvalid(t *testing.T) {
|
||||
p := codersdk.TemplateVersionParameter{
|
||||
Name: "n",
|
||||
Type: "number",
|
||||
ValidationMax: 10,
|
||||
ValidationMin: 1,
|
||||
ValidationMax: ptr.Ref(int32(10)),
|
||||
ValidationMin: ptr.Ref(int32(1)),
|
||||
DefaultValue: "11",
|
||||
}
|
||||
v, err := uut.ValidateResolve(p, nil)
|
||||
@@ -221,19 +222,19 @@ func TestRichParameterValidation(t *testing.T) {
|
||||
|
||||
numberRichParameters := []codersdk.TemplateVersionParameter{
|
||||
{Name: stringParameterName, Type: "string", Mutable: true},
|
||||
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMin: 3, ValidationMax: 10},
|
||||
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMin: ptr.Ref(int32(3)), ValidationMax: ptr.Ref(int32(10))},
|
||||
{Name: boolParameterName, Type: "bool", Mutable: true},
|
||||
}
|
||||
|
||||
monotonicIncreasingNumberRichParameters := []codersdk.TemplateVersionParameter{
|
||||
{Name: stringParameterName, Type: "string", Mutable: true},
|
||||
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMin: 3, ValidationMax: 10, ValidationMonotonic: "increasing"},
|
||||
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMin: ptr.Ref(int32(3)), ValidationMax: ptr.Ref(int32(10)), ValidationMonotonic: "increasing"},
|
||||
{Name: boolParameterName, Type: "bool", Mutable: true},
|
||||
}
|
||||
|
||||
monotonicDecreasingNumberRichParameters := []codersdk.TemplateVersionParameter{
|
||||
{Name: stringParameterName, Type: "string", Mutable: true},
|
||||
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMin: 3, ValidationMax: 10, ValidationMonotonic: "decreasing"},
|
||||
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMin: ptr.Ref(int32(3)), ValidationMax: ptr.Ref(int32(10)), ValidationMonotonic: "decreasing"},
|
||||
{Name: boolParameterName, Type: "bool", Mutable: true},
|
||||
}
|
||||
|
||||
|
||||
@@ -59,8 +59,8 @@ type TemplateVersionParameter struct {
|
||||
Options []TemplateVersionParameterOption `json:"options"`
|
||||
ValidationError string `json:"validation_error,omitempty"`
|
||||
ValidationRegex string `json:"validation_regex,omitempty"`
|
||||
ValidationMin int32 `json:"validation_min,omitempty"`
|
||||
ValidationMax int32 `json:"validation_max,omitempty"`
|
||||
ValidationMin *int32 `json:"validation_min,omitempty"`
|
||||
ValidationMax *int32 `json:"validation_max,omitempty"`
|
||||
ValidationMonotonic ValidationMonotonicOrder `json:"validation_monotonic,omitempty" enums:"increasing,decreasing"`
|
||||
Required bool `json:"required"`
|
||||
LegacyVariableName string `json:"legacy_variable_name,omitempty"`
|
||||
|
||||
Reference in New Issue
Block a user