From 7aef0b3c3c087accc52baef61bebdb16e4ae6046 Mon Sep 17 00:00:00 2001
From: "shane.farrell" <shane.farrell@target.com>
Date: Thu, 4 Apr 2019 15:55:42 -0500
Subject: [PATCH 1/6] Updated StaticHtmlGenerator to it overrides the
 toVarName(String name) method in DefaultCodegen and prevents underscores from
 being converted to the word Underscore

---
 .../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 573f29abc8f8..7386270d3f3c 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 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 String toModelName(final String name) {
         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 ca5f8da5fd9e..8a3ee3473d05 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.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 void testSpecWithoutSchema() throws Exception {
         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");
+    }
 }

From 4b5feb039ce1098162a705b75edcd481ed3a04eb Mon Sep 17 00:00:00 2001
From: "shane.farrell" <shane.farrell@target.com>
Date: Fri, 5 Apr 2019 10:47:23 -0500
Subject: [PATCH 2/6] adding model propery with a snake_case name

---
 modules/openapi-generator/src/test/resources/3_0/petstore.yaml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/modules/openapi-generator/src/test/resources/3_0/petstore.yaml b/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
index a89eb6532659..62c1816e39af 100644
--- a/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
+++ b/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
@@ -701,6 +701,8 @@ components:
             wrapped: true
           items:
             type: string
+        favorite_food:
+            type: string
         tags:
           type: array
           xml:

From 5ee3be6e6d5565f93ddd6b1a7b9ba2d502bb7eb7 Mon Sep 17 00:00:00 2001
From: "shane.farrell" <shane.farrell@target.com>
Date: Tue, 9 Apr 2019 12:51:29 -0500
Subject: [PATCH 3/6] Reverting change to base petstore.yaml file

---
 modules/openapi-generator/src/test/resources/3_0/petstore.yaml | 2 --
 1 file changed, 2 deletions(-)

diff --git a/modules/openapi-generator/src/test/resources/3_0/petstore.yaml b/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
index 62c1816e39af..a89eb6532659 100644
--- a/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
+++ b/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
@@ -701,8 +701,6 @@ components:
             wrapped: true
           items:
             type: string
-        favorite_food:
-            type: string
         tags:
           type: array
           xml:

From f0f5e421b6b46db33e845e0d1bfae2c218dcdd0d Mon Sep 17 00:00:00 2001
From: "shane.farrell" <shane.farrell@target.com>
Date: Tue, 9 Apr 2019 16:43:49 -0500
Subject: [PATCH 4/6] Trying to trigger another CI build

---
 modules/openapi-generator/src/test/resources/3_0/petstore.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/openapi-generator/src/test/resources/3_0/petstore.yaml b/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
index a89eb6532659..989cbfa0b3a8 100644
--- a/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
+++ b/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
@@ -701,7 +701,7 @@ components:
             wrapped: true
           items:
             type: string
-        tags:
+        tags: 
           type: array
           xml:
             name: tag

From 953d9462046d92b455eeb5ecbef215122aef91d5 Mon Sep 17 00:00:00 2001
From: Shane Farrell <shane.farrell@920Solutions.com>
Date: Tue, 9 Apr 2019 16:43:49 -0500
Subject: [PATCH 5/6] Trying to trigger another CI build

---
 modules/openapi-generator/src/test/resources/3_0/petstore.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/openapi-generator/src/test/resources/3_0/petstore.yaml b/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
index a89eb6532659..989cbfa0b3a8 100644
--- a/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
+++ b/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
@@ -701,7 +701,7 @@ components:
             wrapped: true
           items:
             type: string
-        tags:
+        tags: 
           type: array
           xml:
             name: tag

From a5f463eb3f3e2a760433fd2dd86a0053a4cfcec9 Mon Sep 17 00:00:00 2001
From: "shane.farrell" <shane.farrell@target.com>
Date: Fri, 12 Apr 2019 07:30:33 -0500
Subject: [PATCH 6/6] Removing trailing space

---
 modules/openapi-generator/src/test/resources/3_0/petstore.yaml | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/modules/openapi-generator/src/test/resources/3_0/petstore.yaml b/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
index 989cbfa0b3a8..a89eb6532659 100644
--- a/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
+++ b/modules/openapi-generator/src/test/resources/3_0/petstore.yaml
@@ -701,7 +701,7 @@ components:
             wrapped: true
           items:
             type: string
-        tags: 
+        tags:
           type: array
           xml:
             name: tag