diff --git a/modules/swagger-parser/src/test/java/io/swagger/parser/util/DeserializationUtilsTest.java b/modules/swagger-parser/src/test/java/io/swagger/parser/util/DeserializationUtilsTest.java new file mode 100644 index 0000000000..a83428f5b4 --- /dev/null +++ b/modules/swagger-parser/src/test/java/io/swagger/parser/util/DeserializationUtilsTest.java @@ -0,0 +1,60 @@ +package io.swagger.parser.util; + +import com.fasterxml.jackson.databind.JsonNode; +import org.testng.annotations.Test; + +import java.io.File; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; + +import static org.testng.AssertJUnit.assertFalse; +import static org.testng.AssertJUnit.assertNotSame; + +public class DeserializationUtilsTest { + + @Test + public void testEnumValuesAreNotConvertedToBooleansOAS2() throws IOException { + String yaml = readFile("src/test/resources/EnumYesNoOnOffOAS2.yaml"); + + JsonNode jsonNode = DeserializationUtils.readYamlTree(yaml, null); + + jsonNode.findPath("EnumWithQuotes").get("enum").elements() + .forEachRemaining(element -> { + assertFalse(element.isBoolean()); + assertNotSame(element.textValue(), "true"); + assertNotSame(element.textValue(), "false"); + }); + jsonNode.findPath("EnumNoQuotes").get("enum").elements() + .forEachRemaining(element -> { + assertFalse(element.isBoolean()); + assertNotSame(element.textValue(), "true"); + assertNotSame(element.textValue(), "false"); + }); + } + + @Test + public void testEnumValuesAreNotConvertedToBooleansOAS3() throws IOException { + String yaml = readFile("src/test/resources/EnumYesNoOnOffOAS3.yaml"); + + JsonNode jsonNode = DeserializationUtils.readYamlTree(yaml, null); + + jsonNode.findPath("EnumWithQuotes").get("enum").elements() + .forEachRemaining(element -> { + assertFalse(element.isBoolean()); + assertNotSame(element.textValue(), "true"); + assertNotSame(element.textValue(), "false"); + }); + jsonNode.findPath("EnumNoQuotes").get("enum").elements() + .forEachRemaining(element -> { + assertFalse(element.isBoolean()); + assertNotSame(element.textValue(), "true"); + assertNotSame(element.textValue(), "false"); + }); + } + + + private String readFile(String name) throws IOException { + return new String(Files.readAllBytes(new File(name).toPath()), StandardCharsets.UTF_8); + } +} diff --git a/modules/swagger-parser/src/test/resources/EnumYesNoOnOffOAS2.yaml b/modules/swagger-parser/src/test/resources/EnumYesNoOnOffOAS2.yaml new file mode 100644 index 0000000000..2596d549f8 --- /dev/null +++ b/modules/swagger-parser/src/test/resources/EnumYesNoOnOffOAS2.yaml @@ -0,0 +1,46 @@ +swagger: '2.0' +info: + title: Yes No On Off string test + version: 1.0.0 +paths: {} +definitions: + EnumNoQuotes: + type: string + enum: + - some_string + - y + - Y + - yes + - Yes + - YES + - n + - N + - no + - No + - NO + - on + - On + - ON + - off + - Off + - OFF + EnumWithQuotes: + type: string + enum: + - some_string + - 'y' + - 'Y' + - 'yes' + - 'Yes' + - 'YES' + - 'n' + - 'N' + - 'no' + - 'No' + - 'NO' + - 'on' + - 'On' + - 'ON' + - 'off' + - 'Off' + - 'OFF' \ No newline at end of file diff --git a/modules/swagger-parser/src/test/resources/EnumYesNoOnOffOAS3.yaml b/modules/swagger-parser/src/test/resources/EnumYesNoOnOffOAS3.yaml new file mode 100644 index 0000000000..ce17825826 --- /dev/null +++ b/modules/swagger-parser/src/test/resources/EnumYesNoOnOffOAS3.yaml @@ -0,0 +1,47 @@ +openapi: 3.0.0 +info: + title: Yes No On Off string test + version: 1.0.0 +paths: {} +components: + schemas: + EnumNoQuotes: + type: string + enum: + - some_string + - y + - Y + - yes + - Yes + - YES + - n + - N + - no + - No + - NO + - on + - On + - ON + - off + - Off + - OFF + EnumWithQuotes: + type: string + enum: + - some_string + - 'y' + - 'Y' + - 'yes' + - 'Yes' + - 'YES' + - 'n' + - 'N' + - 'no' + - 'No' + - 'NO' + - 'on' + - 'On' + - 'ON' + - 'off' + - 'Off' + - 'OFF' \ No newline at end of file