From a501f2e88f3aa9f127fcbc0e9705e9327cbf9455 Mon Sep 17 00:00:00 2001 From: Sebastiaan Brouwer Date: Wed, 14 Sep 2022 19:51:42 +0200 Subject: [PATCH] Keep required field when converting composed model to OpenAPI --- .../v3/parser/converter/SwaggerConverter.java | 1 + .../swagger/parser/test/V2ConverterTest.java | 11 +++++++ .../src/test/resources/issue-1796.yaml | 30 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 modules/swagger-parser-v2-converter/src/test/resources/issue-1796.yaml 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 6ed3f26957..ae1b0e9a8c 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 @@ -1194,6 +1194,7 @@ public Schema convert(io.swagger.models.Model v2Model) { composed.setTitle(composedModel.getTitle()); composed.setExtensions(convert(composedModel.getVendorExtensions())); composed.setAllOf(composedModel.getAllOf().stream().map(this::convert).collect(Collectors.toList())); + composed.setRequired(composedModel.getRequired()); addProperties(v2Model, composed); 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 4ff09afe4f..3b29ec9c21 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 @@ -96,6 +96,7 @@ public class V2ConverterTest { private static final String ISSUE_1715_YAML = "issue-1715.yaml"; private static final String ISSUE_1767_YAML = "issue-1767.yaml"; + private static final String ISSUE_1796_YAML = "issue-1796.yaml"; private static final String API_BATCH_PATH = "/api/batch/"; private static final String PETS_PATH = "/pets"; @@ -877,6 +878,16 @@ public void testIssue1767() throws Exception { assertNull(secondOperationSecurityRequirements); } + @Test(description = "OpenAPI v2 converter - composed model should keep required properties") + public void testissue1796() throws Exception { + OpenAPI oas = getConvertedOpenAPIFromJsonFile(ISSUE_1796_YAML); + assertNotNull(oas); + ComposedSchema schema = (ComposedSchema) oas.getComponents().getSchemas().get("ComposedModel"); + assertNotNull(schema.getRequired()); + assertEquals(schema.getRequired().size(), 1); + assertEquals(schema.getRequired().get(0), "name"); + } + @Test() public void testInlineDefinitionProperty() throws Exception { SwaggerConverter converter = new SwaggerConverter(); diff --git a/modules/swagger-parser-v2-converter/src/test/resources/issue-1796.yaml b/modules/swagger-parser-v2-converter/src/test/resources/issue-1796.yaml new file mode 100644 index 0000000000..9191c40b46 --- /dev/null +++ b/modules/swagger-parser-v2-converter/src/test/resources/issue-1796.yaml @@ -0,0 +1,30 @@ +swagger: "2.0" +info: + title: composed model conversion test + version: 1.0.0 +paths: + /composed: + get: + operationId: composed + responses: + "200": + description: OK + schema: + $ref: "#/definitions/ComposedModel" +definitions: + BaseModel: + type: object + required: + - uuid + properties: + uuid: + type: string + ComposedModel: + type: object + required: + - name + allOf: + - $ref: "#/definitions/BaseModel" + properties: + name: + type: string