From 047e3cf6481cf65738134013ddb90eba3dc0c157 Mon Sep 17 00:00:00 2001 From: "akihito.nakano" Date: Mon, 9 Apr 2018 00:59:39 +0900 Subject: [PATCH 1/5] Add a test reproduces the issue #676 --- .../swagger/parser/test/V2ConverterTest.java | 13 ++++++++ .../src/test/resources/issue-676.json | 33 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 modules/swagger-parser-v2-converter/src/test/resources/issue-676.json diff --git a/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java b/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java index 214faa43f5..5f52125174 100644 --- a/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java +++ b/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java @@ -68,6 +68,7 @@ public class V2ConverterTest { private static final String ISSUE_600_JSON = "issue-600.json"; private static final String ISSUE_455_JSON = "issue-455.json"; private static final String ISSUE_540_JSON = "issue-540.json"; + private static final String ISSUE_676_JSON = "issue-676.json"; private static final String API_BATCH_PATH = "/api/batch/"; private static final String PETS_PATH = "/pets"; @@ -534,6 +535,18 @@ public void testIssue600() throws Exception { assertEquals(required.size(), REQUIRED_SIZE); } + @Test(description = "OpenAPI v2 converter - integer elements of enum are converted to String") + public void testIssue676() throws Exception { + OpenAPI oas = getConvertedOpenAPIFromJsonFile(ISSUE_676_JSON); + List parameters = oas.getPaths().get(FOO_PATH).getGet().getParameters(); + assertNotNull(parameters); + + List anEnum = parameters.get(0).getSchema().getEnum(); + assertNotNull(anEnum); + assertEquals(anEnum.get(0), 1); + assertEquals(anEnum.get(1), -2); + } + private OpenAPI getConvertedOpenAPIFromJsonFile(String file) throws IOException, URISyntaxException { SwaggerConverter converter = new SwaggerConverter(); String swaggerAsString = new String(Files.readAllBytes(Paths.get(getClass().getClassLoader().getResource(file).toURI()))); diff --git a/modules/swagger-parser-v2-converter/src/test/resources/issue-676.json b/modules/swagger-parser-v2-converter/src/test/resources/issue-676.json new file mode 100644 index 0000000000..0ff284b054 --- /dev/null +++ b/modules/swagger-parser-v2-converter/src/test/resources/issue-676.json @@ -0,0 +1,33 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0", + "title": "x-example" + }, + "host": "httpbin.org", + "basePath": "/anything", + "schemes": [ + "http" + ], + "paths": { + "/{foo}": { + "get": { + "parameters": [ + { + "name": "enum_integer", + "in": "query", + "description": "", + "required": true, + "type": "integer", + "enum": [1, -2] + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + } + } +} From 11c52efa8e808da932a8b16b131293ad3735c4c8 Mon Sep 17 00:00:00 2001 From: "akihito.nakano" Date: Mon, 9 Apr 2018 01:05:28 +0900 Subject: [PATCH 2/5] Fix for issue #676: convert integer elements of enum into the correct type --- .../io/swagger/v3/parser/converter/SwaggerConverter.java | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java b/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java index 8e5dc66b62..3a8f445208 100644 --- a/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java +++ b/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java @@ -986,7 +986,11 @@ public Parameter convert(io.swagger.models.parameters.Parameter v2Parameter) { if (sp.getEnum() != null) { for (String e : sp.getEnum()) { - schema.addEnumItemObject(e); + if ("integer".equals(sp.getType())) { + schema.addEnumItemObject(Integer.parseInt(e)); + } else { + schema.addEnumItemObject(e); + } } } From dea19c32b21a2f2a2ce0507d31973c578208aca8 Mon Sep 17 00:00:00 2001 From: "akihito.nakano" Date: Thu, 12 Apr 2018 01:47:42 +0900 Subject: [PATCH 3/5] Add number support --- .../v3/parser/converter/SwaggerConverter.java | 14 ++++++++++---- .../io/swagger/parser/test/V2ConverterTest.java | 5 +++++ .../src/test/resources/issue-676.json | 8 ++++++++ 3 files changed, 23 insertions(+), 4 deletions(-) diff --git a/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java b/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java index 71cadf33ec..5b93008ff9 100644 --- a/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java +++ b/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java @@ -990,10 +990,16 @@ public Parameter convert(io.swagger.models.parameters.Parameter v2Parameter) { if (sp.getEnum() != null) { for (String e : sp.getEnum()) { - if ("integer".equals(sp.getType())) { - schema.addEnumItemObject(Integer.parseInt(e)); - } else { - schema.addEnumItemObject(e); + switch (sp.getType()) { + case "integer": + schema.addEnumItemObject(Integer.parseInt(e)); + break; + case "number": + schema.addEnumItemObject(new BigDecimal(e)); + break; + default: + schema.addEnumItemObject(e); + break; } } } diff --git a/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java b/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java index 81d73623e3..d7b4caffc1 100644 --- a/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java +++ b/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java @@ -563,6 +563,11 @@ public void testIssue676() throws Exception { assertNotNull(anEnum); assertEquals(anEnum.get(0), 1); assertEquals(anEnum.get(1), -2); + + anEnum = parameters.get(1).getSchema().getEnum(); + assertNotNull(anEnum); + assertEquals(anEnum.get(0), new BigDecimal(1)); + assertEquals(anEnum.get(1), new BigDecimal(-2)); } private OpenAPI getConvertedOpenAPIFromJsonFile(String file) throws IOException, URISyntaxException { diff --git a/modules/swagger-parser-v2-converter/src/test/resources/issue-676.json b/modules/swagger-parser-v2-converter/src/test/resources/issue-676.json index 0ff284b054..64643d010d 100644 --- a/modules/swagger-parser-v2-converter/src/test/resources/issue-676.json +++ b/modules/swagger-parser-v2-converter/src/test/resources/issue-676.json @@ -20,6 +20,14 @@ "required": true, "type": "integer", "enum": [1, -2] + }, + { + "name": "enum_number", + "in": "query", + "description": "", + "required": true, + "type": "number", + "enum": [1, -2] } ], "responses": { From f200ed5f2dad561324206df9fe05883c2a45aab1 Mon Sep 17 00:00:00 2001 From: "akihito.nakano" Date: Thu, 12 Apr 2018 01:54:47 +0900 Subject: [PATCH 4/5] Add boolean support --- .../swagger/v3/parser/converter/SwaggerConverter.java | 3 +++ .../java/io/swagger/parser/test/V2ConverterTest.java | 5 +++++ .../src/test/resources/issue-676.json | 10 +++++++++- 3 files changed, 17 insertions(+), 1 deletion(-) diff --git a/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java b/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java index 5b93008ff9..3c97a8f6fd 100644 --- a/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java +++ b/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java @@ -997,6 +997,9 @@ public Parameter convert(io.swagger.models.parameters.Parameter v2Parameter) { case "number": schema.addEnumItemObject(new BigDecimal(e)); break; + case "boolean": + schema.addEnumItemObject(Boolean.valueOf(e)); + break; default: schema.addEnumItemObject(e); break; diff --git a/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java b/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java index d7b4caffc1..eb8ed27942 100644 --- a/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java +++ b/modules/swagger-parser-v2-converter/src/test/java/io/swagger/parser/test/V2ConverterTest.java @@ -568,6 +568,11 @@ public void testIssue676() throws Exception { assertNotNull(anEnum); assertEquals(anEnum.get(0), new BigDecimal(1)); assertEquals(anEnum.get(1), new BigDecimal(-2)); + + anEnum = parameters.get(2).getSchema().getEnum(); + assertNotNull(anEnum); + assertEquals(anEnum.get(0), true); + assertEquals(anEnum.get(1), false); } private OpenAPI getConvertedOpenAPIFromJsonFile(String file) throws IOException, URISyntaxException { diff --git a/modules/swagger-parser-v2-converter/src/test/resources/issue-676.json b/modules/swagger-parser-v2-converter/src/test/resources/issue-676.json index 64643d010d..5b160e92de 100644 --- a/modules/swagger-parser-v2-converter/src/test/resources/issue-676.json +++ b/modules/swagger-parser-v2-converter/src/test/resources/issue-676.json @@ -28,7 +28,15 @@ "required": true, "type": "number", "enum": [1, -2] - } + }, + { + "name": "enum_boolean", + "in": "query", + "description": "", + "required": true, + "type": "boolean", + "enum": [true, false] + } ], "responses": { "200": { From c959d1df580b8af37f4ffd3a1ee04f6c172499cc Mon Sep 17 00:00:00 2001 From: "akihito.nakano" Date: Thu, 12 Apr 2018 01:57:18 +0900 Subject: [PATCH 5/5] Replace literal string with constant --- .../io/swagger/v3/parser/converter/SwaggerConverter.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java b/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java index 3c97a8f6fd..8f51864e95 100644 --- a/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java +++ b/modules/swagger-parser-v2-converter/src/main/java/io/swagger/v3/parser/converter/SwaggerConverter.java @@ -62,6 +62,7 @@ import io.swagger.v3.parser.core.models.AuthorizationValue; import io.swagger.v3.parser.core.models.ParseOptions; import io.swagger.v3.parser.core.models.SwaggerParseResult; +import io.swagger.v3.parser.util.SchemaTypeUtil; import org.apache.commons.lang3.StringUtils; @@ -991,13 +992,13 @@ public Parameter convert(io.swagger.models.parameters.Parameter v2Parameter) { if (sp.getEnum() != null) { for (String e : sp.getEnum()) { switch (sp.getType()) { - case "integer": + case SchemaTypeUtil.INTEGER_TYPE: schema.addEnumItemObject(Integer.parseInt(e)); break; - case "number": + case SchemaTypeUtil.NUMBER_TYPE: schema.addEnumItemObject(new BigDecimal(e)); break; - case "boolean": + case SchemaTypeUtil.BOOLEAN_TYPE: schema.addEnumItemObject(Boolean.valueOf(e)); break; default: