Skip to content

Commit 817c28e

Browse files
committed
Tests for ParameterResolver
Signed-off-by: Spike Curtis <spike@coder.com>
1 parent 6d69277 commit 817c28e

File tree

1 file changed

+174
-0
lines changed

1 file changed

+174
-0
lines changed

codersdk/richparameters_test.go

Lines changed: 174 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,174 @@
1+
package codersdk_test
2+
3+
import (
4+
"github.com/coder/coder/codersdk"
5+
"github.com/stretchr/testify/require"
6+
"testing"
7+
)
8+
9+
func TestParameterResolver_ValidateResolve_New(t *testing.T) {
10+
t.Parallel()
11+
uut := codersdk.ParameterResolver{}
12+
p := codersdk.TemplateVersionParameter{
13+
Name: "n",
14+
Type: "number",
15+
}
16+
v, err := uut.ValidateResolve(p, &codersdk.WorkspaceBuildParameter{
17+
Name: "n",
18+
Value: "1",
19+
})
20+
require.NoError(t, err)
21+
require.Equal(t, "1", v)
22+
}
23+
24+
func TestParameterResolver_ValidateResolve_Default(t *testing.T) {
25+
t.Parallel()
26+
uut := codersdk.ParameterResolver{}
27+
p := codersdk.TemplateVersionParameter{
28+
Name: "n",
29+
Type: "number",
30+
DefaultValue: "5",
31+
}
32+
v, err := uut.ValidateResolve(p, nil)
33+
require.NoError(t, err)
34+
require.Equal(t, "5", v)
35+
}
36+
37+
func TestParameterResolver_ValidateResolve_MissingRequired(t *testing.T) {
38+
t.Parallel()
39+
uut := codersdk.ParameterResolver{}
40+
p := codersdk.TemplateVersionParameter{
41+
Name: "n",
42+
Type: "number",
43+
Required: true,
44+
}
45+
v, err := uut.ValidateResolve(p, nil)
46+
require.Error(t, err)
47+
require.Equal(t, "", v)
48+
}
49+
50+
func TestParameterResolver_ValidateResolve_PrevRequired(t *testing.T) {
51+
t.Parallel()
52+
uut := codersdk.ParameterResolver{
53+
Rich: []codersdk.WorkspaceBuildParameter{{Name: "n", Value: "5"}},
54+
}
55+
p := codersdk.TemplateVersionParameter{
56+
Name: "n",
57+
Type: "number",
58+
Required: true,
59+
}
60+
v, err := uut.ValidateResolve(p, nil)
61+
require.NoError(t, err)
62+
require.Equal(t, "5", v)
63+
}
64+
65+
func TestParameterResolver_ValidateResolve_PrevInvalid(t *testing.T) {
66+
t.Parallel()
67+
uut := codersdk.ParameterResolver{
68+
Rich: []codersdk.WorkspaceBuildParameter{{Name: "n", Value: "11"}},
69+
}
70+
p := codersdk.TemplateVersionParameter{
71+
Name: "n",
72+
Type: "number",
73+
ValidationMax: 10,
74+
ValidationMin: 1,
75+
}
76+
v, err := uut.ValidateResolve(p, nil)
77+
require.Error(t, err)
78+
require.Equal(t, "", v)
79+
}
80+
81+
func TestParameterResolver_ValidateResolve_DefaultInvalid(t *testing.T) {
82+
// this one arises from an error on the template itself, where the default
83+
// value doesn't pass validation. But, it's good to catch early and error out
84+
// rather than send invalid data to the provisioner
85+
t.Parallel()
86+
uut := codersdk.ParameterResolver{}
87+
p := codersdk.TemplateVersionParameter{
88+
Name: "n",
89+
Type: "number",
90+
ValidationMax: 10,
91+
ValidationMin: 1,
92+
DefaultValue: "11",
93+
}
94+
v, err := uut.ValidateResolve(p, nil)
95+
require.Error(t, err)
96+
require.Equal(t, "", v)
97+
}
98+
99+
func TestParameterResolver_ValidateResolve_NewOverridesOld(t *testing.T) {
100+
t.Parallel()
101+
uut := codersdk.ParameterResolver{
102+
Rich: []codersdk.WorkspaceBuildParameter{{Name: "n", Value: "5"}},
103+
}
104+
p := codersdk.TemplateVersionParameter{
105+
Name: "n",
106+
Type: "number",
107+
Required: true,
108+
Mutable: true,
109+
}
110+
v, err := uut.ValidateResolve(p, &codersdk.WorkspaceBuildParameter{
111+
Name: "n",
112+
Value: "6",
113+
})
114+
require.NoError(t, err)
115+
require.Equal(t, "6", v)
116+
}
117+
118+
func TestParameterResolver_ValidateResolve_Immutable(t *testing.T) {
119+
t.Parallel()
120+
uut := codersdk.ParameterResolver{
121+
Rich: []codersdk.WorkspaceBuildParameter{{Name: "n", Value: "5"}},
122+
}
123+
p := codersdk.TemplateVersionParameter{
124+
Name: "n",
125+
Type: "number",
126+
Required: true,
127+
Mutable: false,
128+
}
129+
v, err := uut.ValidateResolve(p, &codersdk.WorkspaceBuildParameter{
130+
Name: "n",
131+
Value: "6",
132+
})
133+
require.Error(t, err)
134+
require.Equal(t, "", v)
135+
}
136+
137+
func TestParameterResolver_ValidateResolve_Legacy(t *testing.T) {
138+
t.Parallel()
139+
uut := codersdk.ParameterResolver{
140+
Legacy: []codersdk.Parameter{
141+
{Name: "l", SourceValue: "5"},
142+
{Name: "n", SourceValue: "6"},
143+
},
144+
}
145+
p := codersdk.TemplateVersionParameter{
146+
Name: "n",
147+
Type: "number",
148+
Required: true,
149+
LegacyVariableName: "l",
150+
}
151+
v, err := uut.ValidateResolve(p, nil)
152+
require.NoError(t, err)
153+
require.Equal(t, "5", v)
154+
}
155+
156+
func TestParameterResolver_ValidateResolve_PreferRichOverLegacy(t *testing.T) {
157+
t.Parallel()
158+
uut := codersdk.ParameterResolver{
159+
Rich: []codersdk.WorkspaceBuildParameter{{Name: "n", Value: "7"}},
160+
Legacy: []codersdk.Parameter{
161+
{Name: "l", SourceValue: "5"},
162+
{Name: "n", SourceValue: "6"},
163+
},
164+
}
165+
p := codersdk.TemplateVersionParameter{
166+
Name: "n",
167+
Type: "number",
168+
Required: true,
169+
LegacyVariableName: "l",
170+
}
171+
v, err := uut.ValidateResolve(p, nil)
172+
require.NoError(t, err)
173+
require.Equal(t, "7", v)
174+
}

0 commit comments

Comments
 (0)