From 5467b5d72a3b9f562d0991b7e520f57f69f8c86a Mon Sep 17 00:00:00 2001 From: Manuel Boillod Date: Tue, 25 Apr 2017 22:50:11 +0200 Subject: [PATCH] fix "minimum" and "maximum" are not imported for definition of type "number" of "integer" (#443) --- .../parser/util/SwaggerDeserializer.java | 6 +++ .../io/swagger/parser/SwaggerParserTest.java | 53 +++++++++++++++++++ .../io/swagger/parser/util/TestUtils.java | 22 ++++++++ .../src/test/resources/number_attributes.yaml | 45 ++++++++++++++++ 4 files changed, 126 insertions(+) create mode 100644 modules/swagger-parser/src/test/java/io/swagger/parser/util/TestUtils.java create mode 100644 modules/swagger-parser/src/test/resources/number_attributes.yaml diff --git a/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java b/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java index 2bd540c129..3f636f3228 100644 --- a/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java +++ b/modules/swagger-parser/src/main/java/io/swagger/parser/util/SwaggerDeserializer.java @@ -756,6 +756,12 @@ public Model definition(ObjectNode node, String location, ParseResult result) { impl.setUniqueItems(bp); } + BigDecimal bd = getBigDecimal("minimum", node, false, location, result); + impl.setMinimum(bd); + + bd = getBigDecimal("maximum", node, false, location, result); + impl.setMaximum(bd); + ap = node.get("enum"); if(ap != null) { ArrayNode arrayNode = getArray("enum", node, false, location, result); diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java index 6f2851ae12..82557b8aef 100644 --- a/modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/SwaggerParserTest.java @@ -23,6 +23,7 @@ import io.swagger.models.properties.Property; import io.swagger.models.properties.RefProperty; import io.swagger.models.properties.StringProperty; +import io.swagger.parser.util.TestUtils; import io.swagger.parser.util.SwaggerDeserializationResult; import io.swagger.util.Json; import io.swagger.util.Yaml; @@ -764,6 +765,7 @@ public void testIssue393() { assertNotNull(swagger.getVendorExtensions().get("x-error-defs")); } + @Test public void testBadFormat() throws Exception { SwaggerParser parser = new SwaggerParser(); final Swagger swagger = parser.read("src/test/resources/bad_format.yaml"); @@ -802,6 +804,57 @@ public void testBadFormat() throws Exception { assertEquals(queryParameter.getCollectionFormat(), "multi"); assertEquals(queryParameter.isUniqueItems(), true); } + @Test + public void testNumberAttributes() throws Exception { + SwaggerParser parser = new SwaggerParser(); + Swagger swagger = parser.read(TestUtils.getResourceAbsolutePath("/number_attributes.yaml")); + + ModelImpl numberType = (ModelImpl)swagger.getDefinitions().get("NumberType"); + assertNotNull(numberType); + assertNotNull(numberType.getEnum()); + assertEquals(numberType.getEnum().size(), 2); + List numberTypeEnumValues = numberType.getEnum(); + assertEquals(numberTypeEnumValues.get(0), "1.0"); + assertEquals(numberTypeEnumValues.get(1), "2.0"); + assertEquals(numberType.getDefaultValue(), new BigDecimal("1.0")); + assertEquals(numberType.getMinimum(), new BigDecimal("1.0")); + assertEquals(numberType.getMaximum(), new BigDecimal("2.0")); + + ModelImpl numberDoubleType = (ModelImpl)swagger.getDefinitions().get("NumberDoubleType"); + assertNotNull(numberDoubleType); + assertNotNull(numberDoubleType.getEnum()); + assertEquals(numberDoubleType.getEnum().size(), 2); + List numberDoubleTypeEnumValues = numberDoubleType.getEnum(); + assertEquals(numberDoubleTypeEnumValues.get(0), "1.0"); + assertEquals(numberDoubleTypeEnumValues.get(1), "2.0"); + assertEquals(numberDoubleType.getDefaultValue(), new BigDecimal("1.0")); + assertEquals(numberDoubleType.getMinimum(), new BigDecimal("1.0")); + assertEquals(numberDoubleType.getMaximum(), new BigDecimal("2.0")); + + ModelImpl integerType = (ModelImpl)swagger.getDefinitions().get("IntegerType"); + assertNotNull(integerType); + assertNotNull(integerType.getEnum()); + assertEquals(integerType.getEnum().size(), 2); + List integerTypeEnumValues = integerType.getEnum(); + assertEquals(integerTypeEnumValues.get(0), "1"); + assertEquals(integerTypeEnumValues.get(1), "2"); + assertEquals(integerType.getDefaultValue(), new Integer("1")); + assertEquals(integerType.getMinimum(), new BigDecimal("1")); + assertEquals(integerType.getMaximum(), new BigDecimal("2")); + + ModelImpl integerInt32Type = (ModelImpl)swagger.getDefinitions().get("IntegerInt32Type"); + assertNotNull(integerInt32Type); + assertNotNull(integerInt32Type.getEnum()); + assertEquals(integerInt32Type.getEnum().size(), 2); + List integerInt32TypeEnumValues = integerInt32Type.getEnum(); + assertEquals(integerInt32TypeEnumValues.get(0), "1"); + assertEquals(integerInt32TypeEnumValues.get(1), "2"); + assertEquals(integerInt32Type.getDefaultValue(), new Integer("1")); + assertEquals(integerInt32Type.getMinimum(), new BigDecimal("1")); + assertEquals(integerInt32Type.getMaximum(), new BigDecimal("2")); + + + } @Test public void testIssue357() { diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/util/TestUtils.java b/modules/swagger-parser/src/test/java/io/swagger/parser/util/TestUtils.java new file mode 100644 index 0000000000..6c572ad228 --- /dev/null +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/util/TestUtils.java @@ -0,0 +1,22 @@ +package io.swagger.parser.util; + +import java.io.File; +import java.net.URISyntaxException; + +public class TestUtils { + + /** + * @param resourceLocation The resource location relative to classpath root (ie: starts with '/') + */ + public static String getResourceAbsolutePath(String resourceLocation) { + if (!resourceLocation.startsWith("/")) { + throw new RuntimeException("resourceLocation should be relative to classpath root (ie: starts with '/')"); + } + try { + // we use toURI + return new File(TestUtils.class.getResource(resourceLocation).toURI()).getAbsolutePath(); + } catch (URISyntaxException e) { + throw new RuntimeException(e); + } + } +} diff --git a/modules/swagger-parser/src/test/resources/number_attributes.yaml b/modules/swagger-parser/src/test/resources/number_attributes.yaml new file mode 100644 index 0000000000..bd9b1a2626 --- /dev/null +++ b/modules/swagger-parser/src/test/resources/number_attributes.yaml @@ -0,0 +1,45 @@ +--- +swagger: '2.0' +info: + version: 1.0.0 + title: Pets Store +paths: {} +definitions: + + NumberType: + type: number + enum: + - 1.0 + - 2.0 + default: 1.0 + minimum: 1.0 + maximum: 2.0 + + NumberDoubleType: + type: number + format: double + enum: + - 1.0 + - 2.0 + default: 1.0 + minimum: 1.0 + maximum: 2.0 + + IntegerType: + type: integer + enum: + - 1 + - 2 + default: 1 + minimum: 1 + maximum: 2 + + IntegerInt32Type: + type: integer + format: int32 + enum: + - 1 + - 2 + default: 1 + minimum: 1 + maximum: 2