From 6a591f2ef957bc20e21719160a4627751adef382 Mon Sep 17 00:00:00 2001 From: Tao Sun Date: Thu, 18 Jul 2024 13:26:28 +0800 Subject: [PATCH 1/2] fix #4711: check allowableValues for enum --- .../v3/core/util/AnnotationsUtils.java | 3 ++ .../v3/core/util/AnnotationsUtilsTest.java | 35 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index e1ed50c9f2..23b410db6e 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -1720,6 +1720,9 @@ public static Optional getSchema(io.swagger.v3.oas.annotations if (StringUtils.isNotBlank(schemaAnnotation.format())) { schemaObject.setFormat(schemaAnnotation.format()); } + if (schemaAnnotation.allowableValues().length != 0) { + schemaObject.setEnum(Arrays.asList(schemaAnnotation.allowableValues())); + } if (isArray) { Optional arraySchema = AnnotationsUtils.getArraySchema(arrayAnnotation, components, jsonViewAnnotation, openapi31, null); if (arraySchema.isPresent()) { diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java index 08f95abd10..4160083f92 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java @@ -16,6 +16,7 @@ import java.math.BigInteger; import java.net.URI; import java.net.URL; +import java.util.Arrays; import java.util.Date; import java.util.Map; import java.util.Optional; @@ -97,4 +98,38 @@ private void dummyType() { class DummyClass implements Serializable {} + @DataProvider + private Object[][] expectedEnumSchema() { + return new Object[][]{ + {"emptyImplementationSchemaEnum", ImmutableMap.of("type", "string", "enum", Arrays.asList("foo", "bar"))}, + {"stringImplementationSchemaEnum", ImmutableMap.of("type", "string", "enum", Arrays.asList("foo", "bar"))}, + {"enumSchema", ImmutableMap.of("type", "string", "enum", Arrays.asList("FOO", "BAR"))}, + }; + } + + @Test(dataProvider = "expectedEnumSchema") + public void getEnumSchema(String methodName, Map expected) throws NoSuchMethodException { + final Method method = getClass().getDeclaredMethod(methodName); + Content annotationContent = method.getAnnotation(ApiResponse.class).content()[0]; + Optional schema = AnnotationsUtils.getSchema(annotationContent, new Components(), null, false); + Assert.assertTrue(schema.isPresent()); + Assert.assertEquals(schema.get().getType(), expected.get("type")); + Assert.assertEquals(schema.get().getEnum(), expected.get("enum")); + } + + @ApiResponse(content = @Content(schema = @io.swagger.v3.oas.annotations.media.Schema(allowableValues = {"foo", "bar"}))) + private void emptyImplementationSchemaEnum() { + } + + @ApiResponse(content = @Content(schema = @io.swagger.v3.oas.annotations.media.Schema(implementation = String.class, allowableValues = {"foo", "bar"}))) + private void stringImplementationSchemaEnum() { + } + + @ApiResponse(content = @Content(schema = @io.swagger.v3.oas.annotations.media.Schema(implementation = Foo.class))) + private void enumSchema() { + } + + enum Foo { + FOO, BAR; + } } From 49eeeea4a6ef459213293f6b4845bca7fa9f9566 Mon Sep 17 00:00:00 2001 From: Tao Sun Date: Thu, 18 Jul 2024 14:40:14 +0800 Subject: [PATCH 2/2] style: Replace tab with space --- .../v3/core/util/AnnotationsUtils.java | 6 +-- .../v3/core/util/AnnotationsUtilsTest.java | 52 +++++++++---------- 2 files changed, 29 insertions(+), 29 deletions(-) diff --git a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java index 23b410db6e..c5fa3ff1b6 100644 --- a/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java +++ b/modules/swagger-core/src/main/java/io/swagger/v3/core/util/AnnotationsUtils.java @@ -1720,9 +1720,9 @@ public static Optional getSchema(io.swagger.v3.oas.annotations if (StringUtils.isNotBlank(schemaAnnotation.format())) { schemaObject.setFormat(schemaAnnotation.format()); } - if (schemaAnnotation.allowableValues().length != 0) { - schemaObject.setEnum(Arrays.asList(schemaAnnotation.allowableValues())); - } + if (schemaAnnotation.allowableValues().length != 0) { + schemaObject.setEnum(Arrays.asList(schemaAnnotation.allowableValues())); + } if (isArray) { Optional arraySchema = AnnotationsUtils.getArraySchema(arrayAnnotation, components, jsonViewAnnotation, openapi31, null); if (arraySchema.isPresent()) { diff --git a/modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java b/modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java index 4160083f92..320a2ff181 100644 --- a/modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java +++ b/modules/swagger-core/src/test/java/io/swagger/v3/core/util/AnnotationsUtilsTest.java @@ -98,38 +98,38 @@ private void dummyType() { class DummyClass implements Serializable {} - @DataProvider - private Object[][] expectedEnumSchema() { - return new Object[][]{ - {"emptyImplementationSchemaEnum", ImmutableMap.of("type", "string", "enum", Arrays.asList("foo", "bar"))}, - {"stringImplementationSchemaEnum", ImmutableMap.of("type", "string", "enum", Arrays.asList("foo", "bar"))}, - {"enumSchema", ImmutableMap.of("type", "string", "enum", Arrays.asList("FOO", "BAR"))}, - }; - } - - @Test(dataProvider = "expectedEnumSchema") - public void getEnumSchema(String methodName, Map expected) throws NoSuchMethodException { + @DataProvider + private Object[][] expectedEnumSchema() { + return new Object[][]{ + {"emptyImplementationSchemaEnum", ImmutableMap.of("type", "string", "enum", Arrays.asList("foo", "bar"))}, + {"stringImplementationSchemaEnum", ImmutableMap.of("type", "string", "enum", Arrays.asList("foo", "bar"))}, + {"enumSchema", ImmutableMap.of("type", "string", "enum", Arrays.asList("FOO", "BAR"))}, + }; + } + + @Test(dataProvider = "expectedEnumSchema") + public void getEnumSchema(String methodName, Map expected) throws NoSuchMethodException { final Method method = getClass().getDeclaredMethod(methodName); - Content annotationContent = method.getAnnotation(ApiResponse.class).content()[0]; - Optional schema = AnnotationsUtils.getSchema(annotationContent, new Components(), null, false); - Assert.assertTrue(schema.isPresent()); - Assert.assertEquals(schema.get().getType(), expected.get("type")); - Assert.assertEquals(schema.get().getEnum(), expected.get("enum")); - } + Content annotationContent = method.getAnnotation(ApiResponse.class).content()[0]; + Optional schema = AnnotationsUtils.getSchema(annotationContent, new Components(), null, false); + Assert.assertTrue(schema.isPresent()); + Assert.assertEquals(schema.get().getType(), expected.get("type")); + Assert.assertEquals(schema.get().getEnum(), expected.get("enum")); + } @ApiResponse(content = @Content(schema = @io.swagger.v3.oas.annotations.media.Schema(allowableValues = {"foo", "bar"}))) private void emptyImplementationSchemaEnum() { } - @ApiResponse(content = @Content(schema = @io.swagger.v3.oas.annotations.media.Schema(implementation = String.class, allowableValues = {"foo", "bar"}))) - private void stringImplementationSchemaEnum() { - } + @ApiResponse(content = @Content(schema = @io.swagger.v3.oas.annotations.media.Schema(implementation = String.class, allowableValues = {"foo", "bar"}))) + private void stringImplementationSchemaEnum() { + } - @ApiResponse(content = @Content(schema = @io.swagger.v3.oas.annotations.media.Schema(implementation = Foo.class))) - private void enumSchema() { - } + @ApiResponse(content = @Content(schema = @io.swagger.v3.oas.annotations.media.Schema(implementation = Foo.class))) + private void enumSchema() { + } - enum Foo { - FOO, BAR; - } + enum Foo { + FOO, BAR; + } }