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 6dff959b3a..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; @@ -990,7 +991,20 @@ public Parameter convert(io.swagger.models.parameters.Parameter v2Parameter) { if (sp.getEnum() != null) { for (String e : sp.getEnum()) { - schema.addEnumItemObject(e); + switch (sp.getType()) { + case SchemaTypeUtil.INTEGER_TYPE: + schema.addEnumItemObject(Integer.parseInt(e)); + break; + case SchemaTypeUtil.NUMBER_TYPE: + schema.addEnumItemObject(new BigDecimal(e)); + break; + case SchemaTypeUtil.BOOLEAN_TYPE: + 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 155763dd88..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 @@ -71,6 +71,7 @@ public class V2ConverterTest { private static final String ISSUE_540_JSON = "issue-540.json"; private static final String ISSUE_647_JSON = "issue-647.yaml"; private static final String ISSUE_662_JSON = "issue-662.yaml"; + 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"; @@ -552,6 +553,28 @@ public void testIssue662() throws Exception { assertTrue(oas.getPaths().isEmpty()); } + @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); + + anEnum = parameters.get(1).getSchema().getEnum(); + 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 { 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..5b160e92de --- /dev/null +++ b/modules/swagger-parser-v2-converter/src/test/resources/issue-676.json @@ -0,0 +1,49 @@ +{ + "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] + }, + { + "name": "enum_number", + "in": "query", + "description": "", + "required": true, + "type": "number", + "enum": [1, -2] + }, + { + "name": "enum_boolean", + "in": "query", + "description": "", + "required": true, + "type": "boolean", + "enum": [true, false] + } + ], + "responses": { + "200": { + "description": "OK" + } + } + } + } + } +}