From 687b5aabf30aaa7526ad90eb98f3866fef3ac699 Mon Sep 17 00:00:00 2001 From: Shane Farrell Date: Fri, 12 Apr 2019 11:38:35 -0500 Subject: [PATCH] Fix issue 1340 - StaticHtmlGenerator to allow snake_case property names (#2612) * Updated StaticHtmlGenerator to it overrides the toVarName(String name) method in DefaultCodegen and prevents underscores from being converted to the word Underscore * adding model propery with a snake_case name * Reverting change to base petstore.yaml file * Trying to trigger another CI build * Trying to trigger another CI build * Removing trailing space --- .../codegen/languages/StaticHtmlGenerator.java | 15 +++++++++++++++ .../codegen/html/StaticHtmlGeneratorTest.java | 16 ++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtmlGenerator.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtmlGenerator.java index 573f29abc8f..7386270d3f3 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtmlGenerator.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/StaticHtmlGenerator.java @@ -29,6 +29,8 @@ import org.openapitools.codegen.utils.ModelUtils; import java.util.*; +import static org.openapitools.codegen.utils.StringUtils.escape; + public class StaticHtmlGenerator extends DefaultCodegen implements CodegenConfig { protected String invokerPackage = "org.openapitools.client"; protected String groupId = "org.openapitools"; @@ -176,6 +178,19 @@ public class StaticHtmlGenerator extends DefaultCodegen implements CodegenConfig return name; } + // DefaultCodegen converts snake_case property names to snakeUnderscorecase + // but for static HTML, we want to preserve snake_case names + @Override + public String toVarName(String name) { + if (reservedWords.contains(name)) { + return escapeReservedWord(name); + } else if (((CharSequence) name).chars().anyMatch(character -> specialCharReplacements.keySet().contains("" + ((char) character)))) { + return escape(name, specialCharReplacements, Arrays.asList("_"), null); + } else { + return name; + } + } + public void preprocessOpenAPI(OpenAPI openAPI) { Info info = openAPI.getInfo(); info.setDescription(toHtml(info.getDescription())); diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/html/StaticHtmlGeneratorTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/html/StaticHtmlGeneratorTest.java index ca5f8da5fd9..8a3ee3473d0 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/html/StaticHtmlGeneratorTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/html/StaticHtmlGeneratorTest.java @@ -23,6 +23,8 @@ import io.swagger.v3.oas.models.media.ObjectSchema; import io.swagger.v3.oas.models.media.Schema; import io.swagger.v3.oas.models.media.StringSchema; import org.openapitools.codegen.CodegenModel; +import org.openapitools.codegen.CodegenProperty; +import org.openapitools.codegen.DefaultCodegen; import org.openapitools.codegen.TestUtils; import org.openapitools.codegen.languages.StaticHtmlGenerator; import org.testng.Assert; @@ -54,4 +56,18 @@ public class StaticHtmlGeneratorTest { Assert.assertEquals(openAPI.getInfo().getTitle(), "ping test"); } + @Test(description = "ensure that snake_case propery names wont be converted to snakeUnderscorecase") + public void testFromPropertyWithUnderscores() { + final Schema schema = new Schema() + .description("a sample model with property containing an underscore") + .addProperties("favorite_food", new StringSchema()); + final OpenAPI openAPI = TestUtils.createOpenAPIWithOneSchema("UnderscoreTest", schema); + final DefaultCodegen codegen = new StaticHtmlGenerator(); + codegen.setOpenAPI(openAPI); + + CodegenProperty property = codegen.fromProperty("favorite_food", (Schema) openAPI.getComponents().getSchemas().get("UnderscoreTest").getProperties().get("favorite_food")); + + Assert.assertEquals(property.baseName, "favorite_food"); + Assert.assertEquals(property.name, "favorite_food"); + } }