Fix removing dollar sign for name sanitization (#16301)

* fix replacing dollar sign

* try to add tests
add list import
add missing imports
import OpenAPI
fix import ?
fix import?
rename methods
test test fix
test python test fix
fix??
fix??

---------

Co-authored-by: Joshix-1 <57299889+Joshix-1@users.noreply.github.com>
Co-authored-by: Joshix-1 <joshix.dev@mailbox.org>
This commit is contained in:
William Cheng
2023-08-11 10:40:47 +08:00
committed by GitHub
parent a33c353a26
commit 9d100d8f6b
7 changed files with 62 additions and 4 deletions

View File

@@ -512,7 +512,7 @@ public abstract class AbstractPhpCodegen extends DefaultCodegen implements Codeg
name = name.replaceAll("[^\\w\\\\]+", "_"); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
// remove dollar sign
name = name.replaceAll("$", "");
name = name.replace("$", "");
// model name cannot use reserved keyword
if (isReservedWord(name)) {

View File

@@ -215,7 +215,7 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
// remove dollar sign
name = name.replaceAll("$", "");
name = name.replace("$", "");
// if it's all upper case, convert to lower case
if (name.matches("^[A-Z_]*$")) {
@@ -717,7 +717,7 @@ public abstract class AbstractPythonCodegen extends DefaultCodegen implements Co
String sanitizedName = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
// remove dollar sign
sanitizedName = sanitizedName.replaceAll("$", "");
sanitizedName = sanitizedName.replace("$", "");
// remove whitespace
sanitizedName = sanitizedName.replaceAll("\\s+", "");

View File

@@ -505,7 +505,7 @@ public class ProtobufSchemaCodegen extends DefaultCodegen implements CodegenConf
public String toModelName(String name) {
name = sanitizeName(name); // FIXME: a parameter should not be assigned. Also declare the methods parameters as 'final'.
// remove dollar sign
name = name.replaceAll("$", "");
name = name.replace("$", "");
// model name cannot use reserved keyword, e.g. return
if (isReservedWord(name)) {

View File

@@ -17,8 +17,11 @@
package org.openapitools.codegen.php;
import io.swagger.v3.oas.models.OpenAPI;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.languages.PhpClientCodegen;
import org.openapitools.codegen.TestUtils;
import org.testng.Assert;
import org.testng.annotations.Test;
@@ -76,4 +79,15 @@ public class PhpClientCodegenTest {
Assert.assertEquals(codegen.additionalProperties().get(CodegenConstants.INVOKER_PACKAGE), "Xinvoker");
}
@Test(description = "convert a model with dollar signs")
public void modelTest() {
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/dollar-in-names-pull14359.yaml");
final PhpClientCodegen codegen = new PhpClientCodegen();
codegen.setOpenAPI(openAPI);
final CodegenModel simpleName = codegen.fromModel("$DollarModel$", openAPI.getComponents().getSchemas().get("$DollarModel$"));
Assert.assertEquals(simpleName.name, "$DollarModel$");
Assert.assertEquals(simpleName.classname, "DollarModel");
Assert.assertEquals(simpleName.classVarName, "dollar_model");
}
}

View File

@@ -16,7 +16,9 @@
package org.openapitools.codegen.protobuf;
import io.swagger.v3.oas.models.OpenAPI;
import org.openapitools.codegen.ClientOptInput;
import org.openapitools.codegen.CodegenModel;
import org.openapitools.codegen.DefaultGenerator;
import org.openapitools.codegen.TestUtils;
import org.openapitools.codegen.config.CodegenConfigurator;
@@ -79,4 +81,16 @@ public class ProtobufSchemaCodegenTest {
assertEquals(generatedFile, expectedFile);
}
@Test(description = "convert a model with dollar signs")
public void modelTest() {
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/dollar-in-names-pull14359.yaml");
final ProtobufSchemaCodegen codegen = new ProtobufSchemaCodegen();
codegen.setOpenAPI(openAPI);
final CodegenModel simpleName = codegen.fromModel("$DollarModel$", openAPI.getComponents().getSchemas().get("$DollarModel$"));
Assert.assertEquals(simpleName.name, "$DollarModel$");
Assert.assertEquals(simpleName.classname, "DollarModel");
Assert.assertEquals(simpleName.classVarName, "$DollarModel$");
}
}

View File

@@ -484,4 +484,21 @@ public class PythonClientCodegenTest {
Assert.assertEquals(op.allParams.get(0).containerTypeMapped, "Dict");
Assert.assertEquals(op.allParams.get(0).baseName, "dict_string_integer");
}
@Test(description = "convert a model with dollar signs")
public void modelTestDollarSign() {
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/dollar-in-names-pull14359.yaml");
final DefaultCodegen codegen = new PythonClientCodegen();
codegen.setOpenAPI(openAPI);
final CodegenModel simpleName = codegen.fromModel("$DollarModel$", openAPI.getComponents().getSchemas().get("$DollarModel$"));
Assert.assertEquals(simpleName.name, "$DollarModel$");
Assert.assertEquals(simpleName.classname, "DollarModel");
Assert.assertEquals(simpleName.classVarName, "dollar_model");
List<CodegenProperty> vars = simpleName.getVars();
Assert.assertEquals(vars.size(), 1);
CodegenProperty property = vars.get(0);
Assert.assertEquals(property.name, "dollar_value");
}
}

View File

@@ -0,0 +1,13 @@
openapi: 3.0.3
info:
title: Pull 14359 - Dollar escaping
description: "Dollar sign in names"
version: "1.0.0"
components:
schemas:
$DollarModel$:
type: object
properties:
$dollarValue$:
type: integer
format: int64