Skip to content

Commit d68435d

Browse files
committed
expand unit tests for list cases
1 parent c83c784 commit d68435d

File tree

2 files changed

+42
-5
lines changed

2 files changed

+42
-5
lines changed

coderd/httpapi/queryparams.go

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ func (p *QueryParamParser) UInt(vals url.Values, def uint64, queryParam string)
6161
if err != nil {
6262
p.Errors = append(p.Errors, codersdk.ValidationError{
6363
Field: queryParam,
64-
Detail: fmt.Sprintf("Query param %q must be a valid positive integer (%s)", queryParam, err.Error()),
64+
Detail: fmt.Sprintf("Query param %q must be a valid positive integer: %s", queryParam, err.Error()),
6565
})
6666
return 0
6767
}
@@ -73,7 +73,7 @@ func (p *QueryParamParser) Int(vals url.Values, def int, queryParam string) int
7373
if err != nil {
7474
p.Errors = append(p.Errors, codersdk.ValidationError{
7575
Field: queryParam,
76-
Detail: fmt.Sprintf("Query param %q must be a valid integer (%s)", queryParam, err.Error()),
76+
Detail: fmt.Sprintf("Query param %q must be a valid integer: %s", queryParam, err.Error()),
7777
})
7878
}
7979
return v
@@ -97,7 +97,7 @@ func (p *QueryParamParser) PositiveInt32(vals url.Values, def int32, queryParam
9797
if err != nil {
9898
p.Errors = append(p.Errors, codersdk.ValidationError{
9999
Field: queryParam,
100-
Detail: fmt.Sprintf("Query param %q must be a valid 32-bit positive integer (%s)", queryParam, err.Error()),
100+
Detail: fmt.Sprintf("Query param %q must be a valid 32-bit positive integer: %s", queryParam, err.Error()),
101101
})
102102
}
103103
return v
@@ -108,7 +108,7 @@ func (p *QueryParamParser) Boolean(vals url.Values, def bool, queryParam string)
108108
if err != nil {
109109
p.Errors = append(p.Errors, codersdk.ValidationError{
110110
Field: queryParam,
111-
Detail: fmt.Sprintf("Query param %q must be a valid boolean (%s)", queryParam, err.Error()),
111+
Detail: fmt.Sprintf("Query param %q must be a valid boolean: %s", queryParam, err.Error()),
112112
})
113113
}
114114
return v
@@ -203,9 +203,15 @@ func (p *QueryParamParser) timeWithMutate(vals url.Values, def time.Time, queryP
203203
}
204204

205205
func (p *QueryParamParser) String(vals url.Values, def string, queryParam string) string {
206-
v, _ := parseQueryParam(p, vals, func(v string) (string, error) {
206+
v, err := parseQueryParam(p, vals, func(v string) (string, error) {
207207
return v, nil
208208
}, def, queryParam)
209+
if err != nil {
210+
p.Errors = append(p.Errors, codersdk.ValidationError{
211+
Field: queryParam,
212+
Detail: fmt.Sprintf("Query param %q must be a valid string: %s", queryParam, err.Error()),
213+
})
214+
}
209215
return v
210216
}
211217

coderd/httpapi/queryparams_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ type queryParamTestCase[T any] struct {
3232

3333
func TestParseQueryParams(t *testing.T) {
3434
t.Parallel()
35+
const multipleValuesError = "multiple values provided"
3536

3637
t.Run("Enum", func(t *testing.T) {
3738
t.Parallel()
@@ -64,6 +65,11 @@ func TestParseQueryParams(t *testing.T) {
6465
Value: fmt.Sprintf("%s,%s", database.ResourceTypeWorkspace, database.ResourceTypeApiKey),
6566
Expected: []database.ResourceType{database.ResourceTypeWorkspace, database.ResourceTypeApiKey},
6667
},
68+
{
69+
QueryParam: "resource_type_as_list",
70+
Values: []string{string(database.ResourceTypeWorkspace), string(database.ResourceTypeApiKey)},
71+
Expected: []database.ResourceType{database.ResourceTypeWorkspace, database.ResourceTypeApiKey},
72+
},
6773
}
6874

6975
parser := httpapi.NewQueryParamParser()
@@ -156,6 +162,11 @@ func TestParseQueryParams(t *testing.T) {
156162
Default: "default",
157163
Expected: "default",
158164
},
165+
{
166+
QueryParam: "unexpected_list",
167+
Values: []string{"one", "two"},
168+
ExpectedErrorContains: multipleValuesError,
169+
},
159170
}
160171

161172
parser := httpapi.NewQueryParamParser()
@@ -198,6 +209,11 @@ func TestParseQueryParams(t *testing.T) {
198209
Expected: false,
199210
ExpectedErrorContains: "must be a valid boolean",
200211
},
212+
{
213+
QueryParam: "unexpected_list",
214+
Values: []string{"true", "false"},
215+
ExpectedErrorContains: multipleValuesError,
216+
},
201217
}
202218

203219
parser := httpapi.NewQueryParamParser()
@@ -235,6 +251,11 @@ func TestParseQueryParams(t *testing.T) {
235251
Expected: 0,
236252
ExpectedErrorContains: "must be a valid integer",
237253
},
254+
{
255+
QueryParam: "unexpected_list",
256+
Values: []string{"5", "10"},
257+
ExpectedErrorContains: multipleValuesError,
258+
},
238259
}
239260

240261
parser := httpapi.NewQueryParamParser()
@@ -279,6 +300,11 @@ func TestParseQueryParams(t *testing.T) {
279300
Expected: 0,
280301
ExpectedErrorContains: "must be a valid 32-bit positive integer",
281302
},
303+
{
304+
QueryParam: "unexpected_list",
305+
Values: []string{"5", "10"},
306+
ExpectedErrorContains: multipleValuesError,
307+
},
282308
}
283309

284310
parser := httpapi.NewQueryParamParser()
@@ -316,6 +342,11 @@ func TestParseQueryParams(t *testing.T) {
316342
Expected: 0,
317343
ExpectedErrorContains: "must be a valid positive integer",
318344
},
345+
{
346+
QueryParam: "unexpected_list",
347+
Values: []string{"5", "10"},
348+
ExpectedErrorContains: multipleValuesError,
349+
},
319350
}
320351

321352
parser := httpapi.NewQueryParamParser()

0 commit comments

Comments
 (0)