From b3f00de195f94abe8880b03349294b0c069327d8 Mon Sep 17 00:00:00 2001 From: Dave Shanley Date: Mon, 30 Sep 2024 11:29:37 -0400 Subject: [PATCH] bumped coverage --- parameters/query_parameters_test.go | 49 +++++++++++++++++++++++++++++ parameters/validate_parameter.go | 2 +- 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/parameters/query_parameters_test.go b/parameters/query_parameters_test.go index c6d6c5c..1ea69bc 100644 --- a/parameters/query_parameters_test.go +++ b/parameters/query_parameters_test.go @@ -2748,3 +2748,52 @@ paths: assert.Equal(t, "lemons 'pizza' is defined as an object, "+ "however it failed to be decoded as an object", errs[0].Reason) } + +// https://github.com/pb33f/wiretap/issues/83 +func TestNewValidator_QueryParamValidateStyle_EmptyDeepObject(t *testing.T) { + spec := `openapi: 3.1.0 +info: + title: Test + version: 0.1.0 +security: + - apiKeyAuth: [] +paths: + /anything/queryParams/deepObject/obj: + get: + operationId: deepObjectQueryParamsObject + parameters: + - name: objParam + in: query + style: deepObject + schema: + type: object + properties: + cake: + type: string + required: true + responses: + "200": + description: OK +components: + securitySchemes: + apiKeyAuth: + type: apiKey + in: header + name: Authorization + description: Authenticate using an API Key generated via our platform.` + + doc, _ := libopenapi.NewDocument([]byte(spec)) + + m, err := doc.BuildV3Model() + assert.Len(t, err, 0) // no patch build here + + v := NewParameterValidator(&m.Model) + + request, _ := http.NewRequest(http.MethodGet, + "http://localhost:9090/anything/queryParams/deepObject/obj?objParam", nil) + + valid, errors := v.ValidateQueryParams(request) + assert.True(t, valid) + assert.Len(t, errors, 0) + +} diff --git a/parameters/validate_parameter.go b/parameters/validate_parameter.go index c5a6aef..cc48bd3 100644 --- a/parameters/validate_parameter.go +++ b/parameters/validate_parameter.go @@ -118,7 +118,7 @@ func ValidateParameterSchema( p := decodedObj if rawIsMap { if g, ko := rawObject.(map[string]interface{}); ko { - if len(g) == 0 { + if len(g) == 0 || g[""] != nil { p = nil } }