[scala-sttp] fix enumeration operator constant name collision (#10596)

* fix enumeration operator onstant name collision

* test to verify OperatorName
This commit is contained in:
bgong-mdsol 2022-03-01 11:32:25 -05:00 committed by GitHub
parent e37400554c
commit 417d69425a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 111 additions and 0 deletions

View File

@ -166,6 +166,13 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
dateLibrary.setEnum(dateOptions);
cliOptions.add(dateLibrary);
specialCharReplacements.put("=", "Equal");
specialCharReplacements.put("!=", "Not_Equal");
specialCharReplacements.put(">", "Greater_Than");
specialCharReplacements.put("<", "Less_Than");
specialCharReplacements.put(">=", "Greater_Than_Or_Equal_To");
specialCharReplacements.put("<=", "Less_Than_Or_Equal_To");
}
@Override
@ -454,6 +461,7 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
prop.containerType = "set";
}
}
return prop;
}
@ -508,6 +516,9 @@ public abstract class AbstractScalaCodegen extends DefaultCodegen {
}
protected String formatIdentifier(String name, boolean capitalized) {
if (specialCharReplacements.containsKey(name)) {
name = specialCharReplacements.get(name);
}
String identifier = camelize(sanitizeName(name), true);
if (capitalized) {
identifier = StringUtils.capitalize(identifier);

View File

@ -1,10 +1,26 @@
package org.openapitools.codegen.scala;
import static org.openapitools.codegen.TestUtils.assertFileContains;
import static org.openapitools.codegen.TestUtils.assertFileNotContains;
import org.openapitools.codegen.ClientOptInput;
import org.openapitools.codegen.CodegenConstants;
import org.openapitools.codegen.DefaultGenerator;
import org.openapitools.codegen.languages.ScalaSttpClientCodegen;
import org.openapitools.codegen.languages.features.CXFServerFeatures;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import io.swagger.parser.OpenAPIParser;
import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.media.Schema;
import io.swagger.v3.parser.core.models.ParseOptions;
public class SttpCodegenTest {
@ -29,4 +45,38 @@ public class SttpCodegenTest {
Assert.assertEquals(type, "Array[Byte]");
}
@Test
public void verifyOperatorName() throws IOException {
File output = Files.createTempDirectory("test").toFile().getCanonicalFile();
output.deleteOnExit();
String outputPath = output.getAbsolutePath().replace('\\', '/');
OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/3_0/scala/issue_10187_operatorName.yaml", null, new ParseOptions()).getOpenAPI();
ScalaSttpClientCodegen codegen = new ScalaSttpClientCodegen();
codegen.setOutputDir(output.getAbsolutePath());
codegen.additionalProperties().put(CXFServerFeatures.LOAD_TEST_DATA_FROM_FILE, "true");
ClientOptInput input = new ClientOptInput();
input.openAPI(openAPI);
input.config(codegen);
DefaultGenerator generator = new DefaultGenerator();
generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true");
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_TESTS, "false");
generator.setGeneratorPropertyDefault(CodegenConstants.MODEL_DOCS, "false");
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true");
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false");
generator.opts(input).generate();
Path path = Paths.get(outputPath + "/src/main/scala/org/openapitools/client/model/Condition.scala");
assertFileContains(path, "object ConditionEnums");
assertFileContains(path, "val Equal = Value(\"=\")");
assertFileContains(path, "val NotEqual = Value(\"!=\")");
assertFileNotContains(path, "val X3D = Value(\"=\")");
assertFileNotContains(path, "val X3D = Value(\"!=\")");
}
}

View File

@ -0,0 +1,50 @@
openapi: 3.0.1
info:
version: 1.0.0
title: Example - The comparison operator
license:
name: MIT
servers:
- url: http://api.example.xyz/v1
paths:
/report:
get:
operationId: getReport
responses:
'200':
description: get Report
content:
application/json:
schema:
$ref: '#/components/schemas/Reports'
components:
schemas:
Reports:
properties:
name:
type: string
expression:
items:
$ref: '#/components/schemas/Condition'
type: array
Condition:
example:
variable: variable
operator: =
comparison_value: comparison_value
properties:
variable:
type: string
comparison_value:
type: string
operator:
description: The comparison operator.
enum:
- =
- '!='
- >
- <
- '>='
- <=
type: string
type: object