diff --git a/pom.xml b/pom.xml index 5fbcca6..1e98aaa 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ 4.0.0 com.mservicetech openapi-schema-validation - 1.0.0 + 1.0.1 jar openapi schema for openpai 3.* https://github.com/mservicetech/openapi-schema-validation diff --git a/src/main/java/com/mservicetech/openapi/validation/OpenApiValidator.java b/src/main/java/com/mservicetech/openapi/validation/OpenApiValidator.java index 9e514e7..d727d5c 100644 --- a/src/main/java/com/mservicetech/openapi/validation/OpenApiValidator.java +++ b/src/main/java/com/mservicetech/openapi/validation/OpenApiValidator.java @@ -194,8 +194,10 @@ private ValidationResult validateDeserializedValues(final RequestEntity requestE .filter(p -> ParameterType.is(p.getIn(), type)) .forEach(p->{ Object deserializedValue = getDeserializedValue(requestEntity, p.getName(), type); - if (null==deserializedValue) { - validationResult.addSkipped(p); + if (null==deserializedValue ) { + if (p.getRequired()) { + validationResult.addSkipped(p); + } }else { Status s = schemaValidator.validate(deserializedValue, Overlay.toJson((SchemaImpl)(p.getSchema())), p.getName()); validationResult.addStatus(s); diff --git a/src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java b/src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java index 17ec4f1..98cd294 100644 --- a/src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java +++ b/src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java @@ -117,4 +117,51 @@ public void testRequestPath3() { Assert.assertEquals( status.getCode(), "ERR11001"); //{"statusCode":400,"code":"ERR11001","message":"VALIDATOR_REQUEST_PARAMETER_MISSING","description":"Parameter get is required but is missing.","severity":"ERROR"} } + + @Test + public void testRequestPath4() { + + RequestEntity requestEntity = new RequestEntity(); + Map pathMap = new HashMap<>(); + pathMap.put("petId", "112245"); + requestEntity.setPathParameters(pathMap); + Status status = openApiValidator.validateRequestPath("/pets/{petId}", "get", requestEntity); + Assert.assertNotNull(status); + Assert.assertEquals( status.getCode(), "ERR11004"); + //{"statusCode":400,"code":"ERR11004","message":"VALIDATOR_SCHEMA","description":"Schema Validation Error - petId: must have a maximum value of 5","severity":"ERROR"} + } + + @Test + public void testRequestQueryMissNotRequired() { + + RequestEntity requestEntity = new RequestEntity(); + Map queryMap = new HashMap<>(); + requestEntity.setQueryParameters(queryMap); + Status status = openApiValidator.validateRequestPath("/pets", "get", requestEntity); + Assert.assertNull(status); + } + + @Test + public void testRequestQueryWithQuery() { + + RequestEntity requestEntity = new RequestEntity(); + Map queryMap = new HashMap<>(); + queryMap.put("limit", 12); + requestEntity.setQueryParameters(queryMap); + Status status = openApiValidator.validateRequestPath("/pets", "get", requestEntity); + Assert.assertNull(status); + } + + @Test + public void testRequestQuery2() { + + RequestEntity requestEntity = new RequestEntity(); + Map queryMap = new HashMap<>(); + queryMap.put("limit", "abbb"); + requestEntity.setQueryParameters(queryMap); + Status status = openApiValidator.validateRequestPath("/pets", "get", requestEntity); + Assert.assertNotNull(status); + Assert.assertEquals( status.getCode(), "ERR11004"); + //{"statusCode":400,"code":"ERR11004","message":"VALIDATOR_SCHEMA","description":"Schema Validation Error - limit: string found, integer expected","severity":"ERROR"} + } } diff --git a/src/test/resources/openapi.yaml b/src/test/resources/openapi.yaml index a455347..e7e50ad 100644 --- a/src/test/resources/openapi.yaml +++ b/src/test/resources/openapi.yaml @@ -89,6 +89,7 @@ paths: description: The id of the pet to retrieve schema: type: string + maxLength: 5 security: - petstore_auth: - 'read:pets'