Skip to content

Commit cab9b4e

Browse files
authored
Merge pull request #3100 from swagger-api/ticket-3098
fix #3098 - fix null enum item handling
2 parents 4ca50d4 + d3bfc5e commit cab9b4e

File tree

7 files changed

+112
-10
lines changed

7 files changed

+112
-10
lines changed

modules/swagger-core/src/test/java/io/swagger/v3/core/deserialization/JsonDeserializationTest.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020
import org.testng.annotations.Test;
2121

2222
import java.io.IOException;
23+
import java.util.Arrays;
2324
import java.util.List;
2425
import java.util.Map;
2526

@@ -285,4 +286,75 @@ public void testDeserializeRefCallback() throws Exception {
285286
OpenAPI oas = Yaml.mapper().readValue(yaml, OpenAPI.class);
286287
assertEquals(oas.getPaths().get("/simplecallback").getGet().getCallbacks().get("testCallback1").get$ref(), "#/components/callbacks/Callback");
287288
}
289+
290+
@Test(description = "Deserialize null enum item")
291+
public void testNullEnumItem() throws Exception {
292+
String yaml = "openapi: 3.0.1\n" +
293+
"paths:\n" +
294+
" /:\n" +
295+
" get:\n" +
296+
" tags:\n" +
297+
" - MyTag\n" +
298+
" summary: Operation Summary\n" +
299+
" description: Operation Description\n" +
300+
" operationId: operationId\n" +
301+
" parameters:\n" +
302+
" - name: subscriptionId\n" +
303+
" in: query\n" +
304+
" schema:\n" +
305+
" type: string\n" +
306+
" responses:\n" +
307+
" default:\n" +
308+
" description: default response\n" +
309+
" content:\n" +
310+
" '*/*': {}\n" +
311+
"components:\n" +
312+
" schemas:\n" +
313+
" UserStatus:\n" +
314+
" type: integer\n" +
315+
" description: some int values with null\n" +
316+
" format: int32\n" +
317+
" enum:\n" +
318+
" - 1\n" +
319+
" - 2\n" +
320+
" - null\n";
321+
322+
OpenAPI oas = Yaml.mapper().readValue(yaml, OpenAPI.class);
323+
324+
assertEquals(oas.getComponents().getSchemas().get("UserStatus").getEnum(), Arrays.asList(1, 2, null));
325+
326+
yaml = "openapi: 3.0.1\n" +
327+
"paths:\n" +
328+
" /:\n" +
329+
" get:\n" +
330+
" tags:\n" +
331+
" - MyTag\n" +
332+
" summary: Operation Summary\n" +
333+
" description: Operation Description\n" +
334+
" operationId: operationId\n" +
335+
" parameters:\n" +
336+
" - name: subscriptionId\n" +
337+
" in: query\n" +
338+
" schema:\n" +
339+
" type: string\n" +
340+
" responses:\n" +
341+
" default:\n" +
342+
" description: default response\n" +
343+
" content:\n" +
344+
" '*/*': {}\n" +
345+
"components:\n" +
346+
" schemas:\n" +
347+
" UserStatus:\n" +
348+
" type: string\n" +
349+
" description: some int values with null\n" +
350+
" enum:\n" +
351+
" - 1\n" +
352+
" - 2\n" +
353+
" - null\n";
354+
355+
oas = Yaml.mapper().readValue(yaml, OpenAPI.class);
356+
357+
assertEquals(oas.getComponents().getSchemas().get("UserStatus").getEnum(), Arrays.asList("1", "2", null));
358+
}
359+
288360
}

modules/swagger-core/src/test/java/io/swagger/v3/core/oas/models/ModelWithRanges.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,4 +32,14 @@ public String getStringValues() {
3232
public Double getDoubleValues() {
3333
return 1.0;
3434
}
35+
36+
@Schema(description = "some int values", allowableValues = {"1", "2"})
37+
public int getIntAllowableValues() {
38+
return 2;
39+
}
40+
41+
@Schema(description = "some int values with null", allowableValues = {"1", "2", "null"})
42+
public int getIntAllowableValuesWithNull() {
43+
return 2;
44+
}
3545
}

modules/swagger-core/src/test/java/io/swagger/v3/core/resolving/ModelWithRangesTest.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,12 @@ public void modelWithRangesTest() {
5353
assertEquals(doubleValues.getMaximum(), new BigDecimal("8.0"));
5454
assertEquals(doubleValues.getExclusiveMaximum(), Boolean.TRUE);
5555
assertNull(doubleValues.getExclusiveMinimum());
56+
57+
final IntegerSchema intAllowableValues = (IntegerSchema) properties.get("intAllowableValues");
58+
assertEquals(intAllowableValues.getEnum(), Arrays.asList(1, 2));
59+
60+
final IntegerSchema intAllowableValuesWithNull = (IntegerSchema) properties.get("intAllowableValuesWithNull");
61+
assertEquals(intAllowableValuesWithNull.getEnum(), Arrays.asList(1, 2, null));
62+
5663
}
5764
}

modules/swagger-core/src/test/java/io/swagger/v3/core/serialization/ModelSerializerTest.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import io.swagger.v3.core.oas.models.Manufacturers;
99
import io.swagger.v3.core.oas.models.ReadOnlyModel;
1010
import io.swagger.v3.core.util.Json;
11+
import io.swagger.v3.core.util.Yaml;
1112
import io.swagger.v3.oas.models.ExternalDocumentation;
1213
import io.swagger.v3.oas.models.media.ArraySchema;
1314
import io.swagger.v3.oas.models.media.DateSchema;
@@ -348,4 +349,22 @@ public void testIssue2064Ip() throws Exception {
348349
assertEquals(ip.getMultipleOf(), new BigDecimal("3.0"));
349350

350351
}
352+
353+
@Test
354+
public void testEnumWithNull() throws Exception {
355+
String yaml =
356+
"type: integer\n" +
357+
"description: some int values with null\n" +
358+
"format: int32\n" +
359+
"enum: \n" +
360+
"- 1\n" +
361+
"- 2\n" +
362+
"- null\n";
363+
364+
final Schema model = Yaml.mapper().readValue(yaml, Schema.class);
365+
366+
assertEquals(model.getEnum(), Arrays.asList(1, 2, null));
367+
SerializationMatchers.assertEqualsToYaml(model, yaml);
368+
369+
}
351370
}

modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/model/ExtensionUser.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,8 @@ public void setPhone(String phone) {
108108
}
109109

110110
@XmlElement(name = "userStatus")
111-
//@Schema(description = "User Status", type = "string", allowableValues = {"1-registered", "2-active", "3-closed"})
112111
@Schema(
113112
description = "User Status",
114-
allowableValues = "1-registered,2-active,3-closed",
115113
extensions = {
116114
@Extension(name = "x-userStatus", properties = {
117115
@ExtensionProperty(name = "name", value = "Josh")}),

modules/swagger-jaxrs2/src/test/java/io/swagger/v3/jaxrs2/resources/model/User.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -96,8 +96,7 @@ public void setPhone(String phone) {
9696
}
9797

9898
@XmlElement(name = "userStatus")
99-
//@Schema(description = "User Status", type = "string", allowableValues = {"1-registered", "2-active", "3-closed"})
100-
@Schema(description = "User Status", allowableValues = "1-registered,2-active,3-closed")
99+
@Schema(description = "User Status") //, allowableValues = {"1","2","3"})
101100
public int getUserStatus() {
102101
return userStatus;
103102
}

modules/swagger-models/src/main/java/io/swagger/v3/oas/models/media/Schema.java

Lines changed: 3 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -154,13 +154,10 @@ public void setEnum(List<T> _enum) {
154154
}
155155

156156
public void addEnumItemObject(T _enumItem) {
157-
T casted = cast(_enumItem);
158-
if (casted != null) {
159-
if (this._enum == null) {
160-
this._enum = new ArrayList<>();
161-
}
162-
this._enum.add(casted);
157+
if (this._enum == null) {
158+
this._enum = new ArrayList<>();
163159
}
160+
this._enum.add(cast(_enumItem));
164161
}
165162

166163
/**

0 commit comments

Comments
 (0)