diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java index b3edd967eb..4c3bffa254 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/OpenAPIParserTest.java @@ -3,9 +3,12 @@ import io.swagger.parser.models.ParseOptions; import io.swagger.parser.models.SwaggerParseResult; import org.junit.Test; +import java.util.List; +import java.util.stream.Collectors; import static org.testng.Assert.assertEquals; import static org.testng.Assert.assertNotNull; +import static org.testng.Assert.assertTrue; public class OpenAPIParserTest { @Test @@ -56,4 +59,15 @@ public void test30() { assertNotNull(result.getOpenAPI()); assertEquals(result.getOpenAPI().getOpenapi(), "3.0.0-rc1"); } + + @Test + public void allowBooleanAdditionalPropertiesIssue499() { + SwaggerParseResult result = new OpenAPIParser().readLocation("booleanAdditonalProperties.json", null, null); + + assertNotNull(result); + assertNotNull(result.getOpenAPI()); + assertEquals(result.getOpenAPI().getOpenapi(), "3.0.0"); + List messages = result.getMessages(); + assertTrue(messages.isEmpty(), messages.stream().collect(Collectors.joining("\n"))); + } } diff --git a/modules/swagger-parser/src/test/resources/booleanAdditonalProperties.json b/modules/swagger-parser/src/test/resources/booleanAdditonalProperties.json new file mode 100644 index 0000000000..0f36d883d9 --- /dev/null +++ b/modules/swagger-parser/src/test/resources/booleanAdditonalProperties.json @@ -0,0 +1,71 @@ +{ + "openapi": "3.0.0", + "info": { + "version": "1.0.0", + "title": "Boolean `additionProperties` example" + }, + "paths": { + "/someResource": { + "get": { + "responses": { + "200": { + "description": "Fetching of some resource successful", + "content": { + "application/json": { + "schema": { + "$ref": "#/components/schemas/someObject" + } + } + } + } + } + } + } + }, + "components": { + "schemas": { + "someObject": { + "type": "object", + "required": [ + "innerObject" + ], + "additionalProperties": false, + "properties": { + "innerObject": { + "type": "object", + "additionalProperties": false, + "properties": { + "stringProperty": { + "type": "string" + }, + "objectProperty": { + "type": "object", + "additionalProperties": false, + "properties": { + "firstPossibleProperty": { + "type": "integer" + }, + "secondPossibleProperty": { + "type": "string" + } + } + }, + "objectAdditionalProperties": { + "type": "object", + "properties": { + "integerProperty": { + "type": "integer" + } + }, + "additionalProperties": { + "type": "string" + } + } + } + } + } + } + } + } +} +