fix: required properties (#7206)

* fix: required properties

schema required properties should not be treated like required: true.
this lead to objects that requires properties being treated as required itself

* test: try-it-out-schema-required-override-allowed

Co-authored-by: Tim Lai <timothy.lai@gmail.com>
This commit is contained in:
Mahtis Michel
2021-04-29 21:31:22 +02:00
committed by GitHub
parent 0e770b35da
commit 53829f18a6
3 changed files with 50 additions and 1 deletions

View File

@@ -429,7 +429,7 @@ function validateValueBySchema(value, schema, requiredByParam, bypassRequiredChe
let minItems = schema.get("minItems")
let pattern = schema.get("pattern")
const schemaRequiresValue = requiredByParam || requiredBySchema
const schemaRequiresValue = requiredByParam || requiredBySchema === true
const hasValue = value !== undefined && value !== null
const isValidEmpty = !schemaRequiresValue && !hasValue

View File

@@ -0,0 +1,34 @@
swagger: '2.0'
info:
version: '1.0'
title: "schema required properties should not be treated like required: true"
paths:
'/v1/any-path':
put:
summary: lorem
operationId: setDeliveryLocation
produces:
- application/json
parameters:
- in: body
name: body
description: ipsum
required: false
schema:
$ref: '#/definitions/TopModel'
responses:
'200':
description: successful operation
definitions:
TopModel:
type: object
properties:
testProperty:
$ref: '#/definitions/NestedModel'
NestedModel:
type: object
required:
- validated
properties:
validated:
type: boolean

View File

@@ -0,0 +1,15 @@
describe("Try It Out: schema required properties can be overriden", () => {
it("should execute", () => {
cy
.visit("?tryItOutEnabled=true&url=/documents/features/try-it-out-schema-required-override-allowed.yaml")
.get("#operations-default-setDeliveryLocation")
.click()
.get(".body-param__text")
.should("include.value", "testProperty")
.clear() // swagger-ui will auto insert "{}" into textarea
.get(".execute-wrapper > .btn")
.click()
.get(".curl-command")
.should("exist")
})
})