Skip to content

Commit d005bbe

Browse files
OpenAPIDeserializer.getSchema: Handle "enum" correctly when schema type is "array" or "object"
1 parent 5998432 commit d005bbe

File tree

2 files changed

+49
-1
lines changed

2 files changed

+49
-1
lines changed

modules/swagger-parser-v3/src/main/java/io/swagger/v3/parser/util/OpenAPIDeserializer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2285,6 +2285,8 @@ public Schema getSchema(ObjectNode node, String location, ParseResult result){
22852285
catch( ParseException e) {
22862286
result.invalidType( location, String.format( "enum=`%s`", e.getMessage()), schema.getFormat(), n);
22872287
}
2288+
} else if (n.isContainerNode()) {
2289+
schema.addEnumItemObject(n.isNull()? null : n);
22882290
} else {
22892291
result.invalidType(location, "enum", "value", n);
22902292
}

modules/swagger-parser-v3/src/test/java/io/swagger/v3/parser/util/OpenAPIDeserializerTest.java

Lines changed: 47 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import com.fasterxml.jackson.databind.JsonNode;
44
import com.fasterxml.jackson.databind.ObjectMapper;
5+
import com.fasterxml.jackson.databind.node.JsonNodeFactory;
56
import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
67
import io.swagger.v3.core.util.Json;
78
import io.swagger.v3.oas.models.Components;
@@ -880,6 +881,10 @@ public void testDeserializeEnum() {
880881
" $ref: '#/components/schemas/NumberEnum'\n" +
881882
" be:\n" +
882883
" $ref: '#/components/schemas/BooleanEnum'\n" +
884+
" ae:\n" +
885+
" $ref: '#/components/schemas/ArrayEnum'\n" +
886+
" oe:\n" +
887+
" $ref: '#/components/schemas/ObjectEnum'\n" +
883888
"components:\n" +
884889
" schemas:\n" +
885890
" StringEnum:\n" +
@@ -906,7 +911,30 @@ public void testDeserializeEnum() {
906911
" - -1.151\n" +
907912
" - 0\n" +
908913
" - 1.6161\n" +
909-
" - 3.14";
914+
" - 3.14\n" +
915+
" ArrayEnum:\n" +
916+
" type: array\n" +
917+
" items:\n" +
918+
" type: string\n" +
919+
" enum:\n" +
920+
" - - Camry\n" +
921+
" - Prius\n" +
922+
" - null\n" +
923+
" - - Pilot\n" +
924+
" - Passport\n" +
925+
" - - Rogue\n" +
926+
" - Leaf\n" +
927+
" ObjectEnum:\n" +
928+
" type: object\n" +
929+
" enum:\n" +
930+
" - make: Toyota\n" +
931+
" model: Prius\n" +
932+
" - make: Honda\n" +
933+
" model: Pilot\n" +
934+
" - make: Nissan\n" +
935+
" model: Leaf\n" +
936+
" - null\n";
937+
910938
OpenAPIV3Parser parser = new OpenAPIV3Parser();
911939
SwaggerParseResult result = parser.readContents(yaml, null, null);
912940

@@ -947,6 +975,24 @@ public void testDeserializeEnum() {
947975
assertEquals(2, booleanValues.size());
948976
assertEquals(Boolean.TRUE, booleanValues.get(0));
949977
assertEquals(Boolean.FALSE, booleanValues.get(1));
978+
979+
Schema arrayModel = resolved.getComponents().getSchemas().get("ArrayEnum");
980+
assertEquals("array", arrayModel.getType());
981+
List<Object> arrayValues = arrayModel.getEnum();
982+
assertEquals(arrayValues.size(),4);
983+
assertEquals(arrayValues.get(0), JsonNodeFactory.instance.arrayNode().add( "Camry").add( "Prius"));
984+
assertEquals(arrayValues.get(1), null);
985+
assertEquals(arrayValues.get(2), JsonNodeFactory.instance.arrayNode().add( "Pilot").add( "Passport"));
986+
assertEquals(arrayValues.get(3), JsonNodeFactory.instance.arrayNode().add( "Rogue").add( "Leaf"));
987+
988+
Schema objectModel = resolved.getComponents().getSchemas().get("ObjectEnum");
989+
assertEquals("object", objectModel.getType());
990+
List<Object> objectValues = objectModel.getEnum();
991+
assertEquals(objectValues.size(),4);
992+
assertEquals(objectValues.get(0), JsonNodeFactory.instance.objectNode().put( "make", "Toyota").put( "model", "Prius"));
993+
assertEquals(objectValues.get(1), JsonNodeFactory.instance.objectNode().put( "make", "Honda").put( "model", "Pilot"));
994+
assertEquals(objectValues.get(2), JsonNodeFactory.instance.objectNode().put( "make", "Nissan").put( "model", "Leaf"));
995+
assertEquals(objectValues.get(3), null);
950996
}
951997

952998
@Test

0 commit comments

Comments
 (0)