Skip to content

Commit 4340576

Browse files
FFFFFFatsLandaveshanley
authored andcommitted
fix:the validation error is overwritten when one of the multiple fields contains an invalid parameter.
1 parent c405523 commit 4340576

2 files changed

Lines changed: 70 additions & 2 deletions

File tree

parameters/query_parameters.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -118,15 +118,15 @@ doneLooking:
118118
switch ty {
119119

120120
case helpers.String:
121-
validationErrors = v.validateSimpleParam(sch, ef, ef, params[p])
121+
validationErrors = append(validationErrors, v.validateSimpleParam(sch, ef, ef, params[p])...)
122122
case helpers.Integer, helpers.Number:
123123
efF, err := strconv.ParseFloat(ef, 64)
124124
if err != nil {
125125
validationErrors = append(validationErrors,
126126
errors.InvalidQueryParamNumber(params[p], ef, sch))
127127
break
128128
}
129-
validationErrors = v.validateSimpleParam(sch, ef, efF, params[p])
129+
validationErrors = append(validationErrors, v.validateSimpleParam(sch, ef, efF, params[p])...)
130130
case helpers.Boolean:
131131
if _, err := strconv.ParseBool(ef); err != nil {
132132
validationErrors = append(validationErrors,

parameters/query_parameters_test.go

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -385,6 +385,74 @@ paths:
385385
assert.NotNil(t, errors)
386386
}
387387

388+
func TestMewValidator_QueryParamMultiStringField(t *testing.T) {
389+
spec := `openapi: 3.1.0
390+
paths:
391+
/a/fishy/on/a/dishy:
392+
get:
393+
parameters:
394+
- name: fishy
395+
in: query
396+
required: true
397+
schema:
398+
type: string
399+
enum: [cod, halibut]
400+
- name: dishy
401+
in: query
402+
required: true
403+
schema:
404+
type: string
405+
operationId: locateFishy
406+
`
407+
408+
doc, err := libopenapi.NewDocument([]byte(spec))
409+
assert.Nil(t, err)
410+
411+
m, _ := doc.BuildV3Model()
412+
413+
v := NewParameterValidator(&m.Model)
414+
415+
request, _ := http.NewRequest(http.MethodGet, "https://things.com/a/fishy/on/a/dishy?fishy=doc&dishy=halibut", nil)
416+
417+
valid, errors := v.ValidateQueryParams(request)
418+
assert.False(t, valid)
419+
assert.NotNil(t, errors)
420+
}
421+
422+
func TestMewValidator_QueryParamMultiNumberField(t *testing.T) {
423+
spec := `openapi: 3.1.0
424+
paths:
425+
/a/fishy/on/a/dishy:
426+
get:
427+
parameters:
428+
- name: fishy
429+
in: query
430+
required: true
431+
schema:
432+
type: number
433+
enum: [1, 99]
434+
- name: dishy
435+
in: query
436+
required: true
437+
schema:
438+
type: number
439+
operationId: locateFishy
440+
`
441+
442+
doc, err := libopenapi.NewDocument([]byte(spec))
443+
assert.Nil(t, err)
444+
445+
m, _ := doc.BuildV3Model()
446+
447+
v := NewParameterValidator(&m.Model)
448+
449+
request, _ := http.NewRequest(http.MethodGet, "https://things.com/a/fishy/on/a/dishy?fishy=10&dishy=10", nil)
450+
451+
valid, errors := v.ValidateQueryParams(request)
452+
assert.False(t, valid)
453+
assert.NotNil(t, errors)
454+
}
455+
388456
func TestNewValidator_QueryParamWrongTypeNumber(t *testing.T) {
389457
spec := `openapi: 3.1.0
390458
paths:

0 commit comments

Comments
 (0)