8000 fix: use numeric comparison to check monotonicity (#8436) · coder/coder@bc835db · GitHub
[go: up one dir, main page]

Skip to content

Commit bc835db

Browse files
authored
fix: use numeric comparison to check monotonicity (#8436)
1 parent d8d8eb2 commit bc835db

File tree

2 files changed

+22
-6
lines changed

2 files changed

+22
-6
lines changed

codersdk/richparameters.go

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package codersdk
22

33
import (
4+
"strconv"
5+
46
"golang.org/x/xerrors"
57

68
"github.com/coder/terraform-provider-coder/provider"
@@ -47,14 +49,24 @@ func ValidateWorkspaceBuildParameter(richParameter TemplateVersionParameter, bui
4749
}
4850

4951
if lastBuildParameter != nil && richParameter.Type == "number" && len(richParameter.ValidationMonotonic) > 0 {
52+
prev, err := strconv.Atoi(lastBuildParameter.Value)
53+
if err != nil {
54+
return xerrors.Errorf("Previous parameter value is not a number: %s", lastBuildParameter.Value)
55+
}
56+
57+
current, err := strconv.Atoi(buildParameter.Value)
58+
if err != nil {
59+
return xerrors.Errorf("Current parameter value is not a number: %s", buildParameter.Value)
60+
}
61+
5062
switch richParameter.ValidationMonotonic {
5163
case MonotonicOrderIncreasing:
52-
if lastBuildParameter.Value > buildParameter.Value {
53-
return xerrors.Errorf("Parameter value must be equal or greater than previous value: %s", lastBuildParameter.Value)
64+
if prev > current {
65+
return xerrors.Errorf("Parameter value must be equal or greater than previous value: %d", prev)
5466
}
5567
case MonotonicOrderDecreasing:
56-
if lastBuildParameter.Value < buildParameter.Value {
57-
return xerrors.Errorf("Parameter value must be equal or lower than previous value: %s", lastBuildParameter.Value)
68+
if prev < current {
69+
return xerrors.Errorf("Parameter value must be equal or lower than previous value: %d", prev)
5870
}
5971
}
6072
}

codersdk/richparameters_test.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -201,13 +201,13 @@ func TestRichParameterValidation(t *testing.T) {
201201

202202
monotonicIncreasingNumberRichParameters := []codersdk.TemplateVersionParameter{
203203
{Name: stringParameterName, Type: "string", Mutable: true},
204-
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMin: ptr.Ref(int32(3)), ValidationMax: ptr.Ref(int32(10)), ValidationMonotonic: "increasing"},
204+
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMin: ptr.Ref(int32(3)), ValidationMax: ptr.Ref(int32(100)), ValidationMonotonic: "increasing"},
205205
{Name: boolParameterName, Type: "bool", Mutable: true},
206206
}
207207

208208
monotonicDecreasingNumberRichParameters := []codersdk.TemplateVersionParameter{
209209
{Name: stringParameterName, Type: "string", Mutable: true},
210-
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMin: ptr.Ref(int32(3)), ValidationMax: ptr.Ref(int32(10)), ValidationMonotonic: "decreasing"},
210+
{Name: numberParameterName, Type: "number", Mutable: true, ValidationMin: ptr.Ref(int32(3)), ValidationMax: ptr.Ref(int32(100)), ValidationMonotonic: "decreasing"},
211211
{Name: boolParameterName, Type: "bool", Mutable: true},
212212
}
213213

@@ -255,10 +255,14 @@ func TestRichParameterValidation(t *testing.T) {
255255
{numberParameterName, "6", false, monotonicIncreasingNumberRichParameters},
256256
{numberParameterName, "7", true, monotonicIncreasingNumberRichParameters},
257257
{numberParameterName, "8", true, monotonicIncreasingNumberRichParameters},
258+
{numberParameterName, "11", true, monotonicIncreasingNumberRichParameters},
259+
{numberParameterName, "53", true, monotonicIncreasingNumberRichParameters},
258260

259261
{numberParameterName, "6", true, monotonicDecreasingNumberRichParameters},
260262
{numberParameterName, "7", true, monotonicDecreasingNumberRichParameters},
261263
{numberParameterName, "8", false, monotonicDecreasingNumberRichParameters},
264+
{numberParameterName, "11", false, monotonicDecreasingNumberRichParameters},
265+
{numberParameterName, "53", false, monotonicDecreasingNumberRichParameters},
262266

263267
{stringParameterName, "", true, stringRichParameters},
264268
{stringParameterName, "foobar", true, stringRichParameters},

0 commit comments

Comments
 (0)
0