From de0686cec87855a53ba86a9a4b080d5b13f2a7b0 Mon Sep 17 00:00:00 2001
From: gracekarina <gracekarina.gonzalez@gmail.com>
Date: Fri, 19 Jun 2020 17:13:55 -0500
Subject: [PATCH] fix and test for issue #1367

---
 .../swagger/v3/parser/util/ResolverFully.java | 10 ++---
 .../v3/parser/test/OpenAPIV3ParserTest.java   | 14 +++++-
 .../src/test/resources/issue-1367.yaml        | 45 +++++++++++++++++++
 3 files changed, 62 insertions(+), 7 deletions(-)
 create mode 100644 modules/swagger-parser-v3/src/test/resources/issue-1367.yaml

diff --git a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java
index e01c1d0a3e..4e35d5229f 100644
--- a/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java
+++ b/modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/ResolverFully.java
@@ -9,12 +9,7 @@
 import io.swagger.v3.oas.models.examples.Example;
 import io.swagger.v3.oas.models.headers.Header;
 import io.swagger.v3.oas.models.links.Link;
-import io.swagger.v3.oas.models.media.ArraySchema;
-import io.swagger.v3.oas.models.media.ComposedSchema;
-import io.swagger.v3.oas.models.media.MapSchema;
-import io.swagger.v3.oas.models.media.MediaType;
-import io.swagger.v3.oas.models.media.ObjectSchema;
-import io.swagger.v3.oas.models.media.Schema;
+import io.swagger.v3.oas.models.media.*;
 import io.swagger.v3.oas.models.parameters.Parameter;
 import io.swagger.v3.oas.models.parameters.RequestBody;
 import io.swagger.v3.oas.models.responses.ApiResponse;
@@ -463,6 +458,9 @@ private void aggregateSchemaCombinators(ComposedSchema sourceSchema, Schema targ
                     }
                 }
             }
+            if (resolved.getEnum() != null ){
+                targetSchema.setEnum(resolved.getEnum());
+            }
             if (resolved.getExample() != null) {
                 examples.add(resolved.getExample());
             }
diff --git a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java
index 2b780b7c63..79c073da22 100644
--- a/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java
+++ b/modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/test/OpenAPIV3ParserTest.java
@@ -83,6 +83,19 @@ public class OpenAPIV3ParserTest {
     protected WireMockServer wireMockServer;
 
 
+    @Test
+    public void testIssue1367() {
+        OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
+        ParseOptions options = new ParseOptions();
+        options.setResolve(true);
+        options.setResolveCombinators(true);
+        options.setResolveFully(true);
+        options.setFlatten(true);
+        SwaggerParseResult parseResult = openApiParser.readLocation("issue-1367.yaml", null, options);
+        OpenAPI openAPI = parseResult.getOpenAPI();
+        assertTrue(((Schema)openAPI.getComponents().getSchemas().get("TestDTO").getProperties().get("choice")).getEnum() != null);
+    }
+
     @Test
     public void testIssueFlattenAdditionalPropertiesSchemaInlineModelTrue() {
         OpenAPIV3Parser openApiParser = new OpenAPIV3Parser();
@@ -99,7 +112,6 @@ public void testIssueFlattenAdditionalPropertiesSchemaInlineModelTrue() {
         assertEquals(((ComposedSchema)openAPI.getComponents().getSchemas().get("Inline_response_map200")).getOneOf().get(0).get$ref(),"#/components/schemas/Macaw1");
         assertNotNull(openAPI.getComponents().getSchemas().get("Inline_response_map_items404"));
         assertEquals(((ComposedSchema)openAPI.getComponents().getSchemas().get("Inline_response_map_items404")).getAnyOf().get(0).get$ref(),"#/components/schemas/Macaw2");
-
     }
 
 
diff --git a/modules/swagger-parser-v3/src/test/resources/issue-1367.yaml b/modules/swagger-parser-v3/src/test/resources/issue-1367.yaml
new file mode 100644
index 0000000000..4194f063e9
--- /dev/null
+++ b/modules/swagger-parser-v3/src/test/resources/issue-1367.yaml
@@ -0,0 +1,45 @@
+openapi: 3.0.0
+servers:
+  - url: /subscribed_products/v1.0.1
+info:
+  description: >-
+    API to get information on services currently subscribed by a specific user
+    or phone number.
+  version: 1.0.1
+  title: Products API definition for the 4th Platform
+  termsOfService: 'https://www.telefonica.es/es/'
+  contact:
+    name: 4th Platform Team
+    email: 4pf@tid.es
+x-fp-apiPrefix: /subscribed_products
+tags:
+  - name: subscribed_products
+    description: Operations available with products subscribed by a user
+paths:
+  '/TestDTO':
+    get:
+      operationId: description
+      responses:
+        '200':
+          description: OK
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/TestDTO'
+components:
+  schemas:
+    TestDTO:
+      required:
+        - choice
+      type: object
+      properties:
+        choice:
+          description: Choice description
+          allOf:
+            - $ref: '#/components/schemas/TestEnum'
+    TestEnum:
+      type: string
+      enum:
+        - One
+        - Two
+        - Three