diff --git a/pom.xml b/pom.xml index a9ce992..433de1d 100644 --- a/pom.xml +++ b/pom.xml @@ -19,7 +19,7 @@ 4.0.0 com.mservicetech openapi-schema-validation - 1.0.2 + 1.0.3 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 763bedc..a76b115 100644 --- a/src/main/java/com/mservicetech/openapi/validation/OpenApiValidator.java +++ b/src/main/java/com/mservicetech/openapi/validation/OpenApiValidator.java @@ -182,7 +182,8 @@ private Status validatePathParameters(final RequestEntity requestEntity, final N return result.getStatus(); } if (result.skippedParameters!=null && !result.skippedParameters.isEmpty()) { - return new Status(VALIDATOR_REQUEST_PARAMETER_MISSING, openApiOperation.getMethod(), openApiOperation.getPathString().original()); + return result.skippedParameters.stream().map(p-> new Status (VALIDATOR_REQUEST_PARAMETER_MISSING, p.getName(), openApiOperation.getPathString().original())) + .filter(s->s != null).findFirst().get(); } return null; } @@ -231,7 +232,8 @@ private Status validateQueryParameters(final RequestEntity requestEntity, final return result.getStatus(); } if (result.skippedParameters!=null && !result.skippedParameters.isEmpty()) { - return new Status(VALIDATOR_REQUEST_PARAMETER_MISSING, openApiOperation.getMethod(), openApiOperation.getPathString().original()); + return result.skippedParameters.stream().map(p-> new Status (VALIDATOR_REQUEST_PARAMETER_MISSING, p.getName(), openApiOperation.getPathString().original())) + .filter(s->s != null).findFirst().get(); } return null; } @@ -260,7 +262,8 @@ private Optional validatePathLevelHeaders(final RequestEntity requestEnt return Optional.ofNullable(result.getStatus()); } if (result.skippedParameters!=null && !result.skippedParameters.isEmpty()) { - return Optional.ofNullable(new Status(VALIDATOR_REQUEST_PARAMETER_MISSING, openApiOperation.getMethod(), openApiOperation.getPathString().original())); + return result.skippedParameters.stream().map(p-> new Status (VALIDATOR_REQUEST_PARAMETER_MISSING, p.getName(), openApiOperation.getPathString().original())) + .filter(s->s != null).findFirst(); } return Optional.ofNullable(null); } @@ -274,7 +277,8 @@ private Optional validateOperationLevelHeaders(final RequestEntity reque return Optional.ofNullable(result.getStatus()); } if (result.skippedParameters!=null && !result.skippedParameters.isEmpty()) { - return Optional.ofNullable(new Status(VALIDATOR_REQUEST_PARAMETER_MISSING, openApiOperation.getMethod(), openApiOperation.getPathString().original())); + return result.skippedParameters.stream().map(p-> new Status (VALIDATOR_REQUEST_PARAMETER_MISSING, p.getName(), openApiOperation.getPathString().original())) + .filter(s->s != null).findFirst(); } return Optional.ofNullable(null); } @@ -300,7 +304,8 @@ private Optional validatePathLevelCookies(final RequestEntity requestEnt return Optional.ofNullable(result.getStatus()); } if (result.skippedParameters!=null && !result.skippedParameters.isEmpty()) { - return Optional.ofNullable(new Status(VALIDATOR_REQUEST_PARAMETER_MISSING, openApiOperation.getMethod(), openApiOperation.getPathString().original())); + return result.skippedParameters.stream().map(p-> new Status (VALIDATOR_REQUEST_PARAMETER_MISSING, p.getName(), openApiOperation.getPathString().original())) + .filter(s->s != null).findFirst(); } return Optional.ofNullable(null); } @@ -314,7 +319,8 @@ private Optional validateOperationLevelCookies(final RequestEntity reque return Optional.ofNullable(result.getStatus()); } if (result.skippedParameters!=null && !result.skippedParameters.isEmpty()) { - return Optional.ofNullable(new Status(VALIDATOR_REQUEST_PARAMETER_MISSING, openApiOperation.getMethod(), openApiOperation.getPathString().original())); + return result.skippedParameters.stream().map(p-> new Status (VALIDATOR_REQUEST_PARAMETER_MISSING, p.getName(), openApiOperation.getPathString().original())) + .filter(s->s != null).findFirst(); } return Optional.ofNullable(null); } @@ -367,7 +373,7 @@ public Status getStatus() { return statuses.isEmpty()?null:statuses.get(0); } - public List getAllStatueses(){ + public List getAllStatues(){ return Collections.unmodifiableList(statuses); } } diff --git a/src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java b/src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java index da5d34b..9781881 100644 --- a/src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java +++ b/src/test/java/com/mservicetech/openapi/validation/OpenApiValidatorTest.java @@ -132,13 +132,28 @@ public void testRequestPath4() { } @Test - public void testRequestQueryMissNotRequired() { + public void testRequestQueryMissRequired() { RequestEntity requestEntity = new RequestEntity(); Map queryMap = new HashMap<>(); requestEntity.setQueryParameters(queryMap); Status status = openApiValidator.validateRequestPath("/pets", "get", requestEntity); - Assert.assertNull(status); + Assert.assertNotNull(status); + Assert.assertEquals( status.getCode(), "ERR11001"); + // {"statusCode":400,"code":"ERR11001","message":"VALIDATOR_REQUEST_PARAMETER_MISSING","description":"Parameter limit is required but is missing.","severity":"ERROR"} + } + + @Test + public void testRequestQueryRequiredWithEmpty() { + + RequestEntity requestEntity = new RequestEntity(); + Map queryMap = new HashMap<>(); + requestEntity.setQueryParameters(queryMap); + queryMap.put("limit", null); + Status status = openApiValidator.validateRequestPath("/pets", "get", requestEntity); + Assert.assertEquals( status.getCode(), "ERR11001"); + //{"statusCode":400,"code":"ERR11001","message":"VALIDATOR_REQUEST_PARAMETER_MISSING","description":"Parameter limit is required but is missing.","severity":"ERROR"} + Assert.assertNotNull(status); } @Test @@ -171,6 +186,7 @@ public void testRequestQueryBooleanType() { RequestEntity requestEntity = new RequestEntity(); Map queryMap = new HashMap<>(); queryMap.put("includeCode", "true"); + queryMap.put("limit", 12); requestEntity.setQueryParameters(queryMap); Status status = openApiValidator.validateRequestPath("/pets", "get", requestEntity); Assert.assertNull(status); @@ -182,6 +198,7 @@ public void testRequestQueryBooleanTypeWithError() { RequestEntity requestEntity = new RequestEntity(); Map queryMap = new HashMap<>(); queryMap.put("includeCode", "yes"); + queryMap.put("limit", 12); requestEntity.setQueryParameters(queryMap); Status status = openApiValidator.validateRequestPath("/pets", "get", requestEntity); Assert.assertNotNull(status); diff --git a/src/test/resources/openapi.yaml b/src/test/resources/openapi.yaml index 33176f6..ec1be50 100644 --- a/src/test/resources/openapi.yaml +++ b/src/test/resources/openapi.yaml @@ -17,7 +17,7 @@ paths: - name: limit in: query description: How many items to return at one time (max 100) - required: false + required: true schema: type: integer format: int32