Add tests for duplicated operationId (#20070)

* add tests for duplicated operation id

* add spec file
This commit is contained in:
William Cheng 2024-11-09 16:38:20 +08:00 committed by GitHub
parent b34df341a4
commit 1bda458882
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 1138 additions and 952 deletions

View File

@ -69,7 +69,8 @@ import static org.testng.Assert.*;
public class JavaClientCodegenTest {
// This is the kind of information that ideally would be defined and available system-wide
@Getter enum Library {
@Getter
enum Library {
APACHE_HTTPCLIENT("apache-httpclient", Serializer.JACKSON),
FEIGN("feign", Serializer.JACKSON, Set.of(Serializer.GSON)),
GOOGLE_API_CLIENT("google-api-client", Serializer.JACKSON),
@ -105,35 +106,41 @@ public class JavaClientCodegenTest {
enum Serializer {
GSON, JACKSON, JSONB;
public String toString() {
return this.name().toLowerCase(Locale.ROOT);
}
}
@DataProvider Iterator<Library> supportedLibraries() {
@DataProvider
Iterator<Library> supportedLibraries() {
return Arrays.stream(Library.values()).iterator();
}
@DataProvider Iterator<Library> librariesSupportingGson() {
@DataProvider
Iterator<Library> librariesSupportingGson() {
return Arrays.stream(Library.values())
.filter(library -> library.getSupportedSerializers().contains(Serializer.GSON))
.iterator();
}
@DataProvider Iterator<Library> librariesSupportingJackson() {
@DataProvider
Iterator<Library> librariesSupportingJackson() {
return Arrays.stream(Library.values())
.filter(library -> library.getSupportedSerializers().contains(Serializer.JACKSON))
.iterator();
}
@DataProvider Iterator<Library> librariesNotSupportingJackson() {
@DataProvider
Iterator<Library> librariesNotSupportingJackson() {
return Arrays.stream(Library.values())
.filter(library -> !library.getSupportedSerializers().contains(Serializer.JACKSON))
.iterator();
}
@Test public void arraysInRequestBody() {
@Test
public void arraysInRequestBody() {
OpenAPI openAPI = TestUtils.createOpenAPI();
final JavaClientCodegen codegen = new JavaClientCodegen();
codegen.setOpenAPI(openAPI);
@ -282,7 +289,8 @@ public class JavaClientCodegenTest {
Assertions.assertEquals(codegen.getSerializationLibrary(), JavaClientCodegen.SERIALIZATION_LIBRARY_JACKSON);
}
@Test public void testGeneratedAuthClassesJersey() {
@Test
public void testGeneratedAuthClassesJersey() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -302,7 +310,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testImportMappingResult() {
@Test
public void testImportMappingResult() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.addTypeMapping("OffsetDateTime", "Instant")
@ -326,7 +335,8 @@ public class JavaClientCodegenTest {
Assertions.assertTrue(codegen.getFeatureSet().getSecurityFeatures().contains(SecurityFeature.SignatureAuth));
}
@Test public void testPackageNamesSetInvokerDerivedFromApi() {
@Test
public void testPackageNamesSetInvokerDerivedFromApi() {
final JavaClientCodegen codegen = new JavaClientCodegen();
codegen.additionalProperties().put(CodegenConstants.MODEL_PACKAGE, "xyz.yyyyy.zzzzzzz.mmmmm.model");
codegen.additionalProperties().put(CodegenConstants.API_PACKAGE, "xyz.yyyyy.zzzzzzz.aaaaa.api");
@ -339,7 +349,8 @@ public class JavaClientCodegenTest {
configAssert.assertValue(CodegenConstants.INVOKER_PACKAGE, codegen::getInvokerPackage, "xyz.yyyyy.zzzzzzz.aaaaa");
}
@Test public void testPackageNamesSetInvokerDerivedFromModel() {
@Test
public void testPackageNamesSetInvokerDerivedFromModel() {
final JavaClientCodegen codegen = new JavaClientCodegen();
codegen.additionalProperties().put(CodegenConstants.MODEL_PACKAGE, "xyz.yyyyy.zzzzzzz.mmmmm.model");
@ -351,7 +362,8 @@ public class JavaClientCodegenTest {
configAssert.assertValue(CodegenConstants.INVOKER_PACKAGE, codegen::getInvokerPackage, "xyz.yyyyy.zzzzzzz.mmmmm");
}
@Test public void testGetSchemaTypeWithComposedSchemaWithAllOf() {
@Test
public void testGetSchemaTypeWithComposedSchemaWithAllOf() {
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/2_0/composed-allof.yaml");
Operation operation = openAPI.getPaths().get("/ping").getPost();
@ -361,7 +373,8 @@ public class JavaClientCodegenTest {
.first().hasFieldOrPropertyWithValue("baseType", "MessageEventCoreWithTimeListEntries");
}
@Test public void updateCodegenPropertyEnum() {
@Test
public void updateCodegenPropertyEnum() {
final JavaClientCodegen codegen = new JavaClientCodegen();
CodegenProperty array = codegenPropertyWithArrayOfIntegerValues();
@ -375,7 +388,8 @@ public class JavaClientCodegenTest {
Assertions.assertEquals(testedEnumVar.getOrDefault("value", ""), "1");
}
@Test public void updateCodegenPropertyEnumWithCustomNames() {
@Test
public void updateCodegenPropertyEnumWithCustomNames() {
final JavaClientCodegen codegen = new JavaClientCodegen();
CodegenProperty array = codegenPropertyWithArrayOfIntegerValues();
array.getItems().setVendorExtensions(Map.of("x-enum-varnames", Collections.singletonList("ONE")));
@ -390,7 +404,8 @@ public class JavaClientCodegenTest {
Assertions.assertEquals(testedEnumVar.getOrDefault("value", ""), "1");
}
@Test public void testGeneratePing() {
@Test
public void testGeneratePing() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -446,7 +461,8 @@ public class JavaClientCodegenTest {
.contains("public class DefaultApi");
}
@Test public void testGeneratePingSomeObj(){
@Test
public void testGeneratePingSomeObj() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -508,7 +524,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testJdkHttpClient() {
@Test
public void testJdkHttpClient() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -534,7 +551,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testJdkHttpClientWithUseBeanValidationEnabled() {
@Test
public void testJdkHttpClientWithUseBeanValidationEnabled() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -552,7 +570,8 @@ public class JavaClientCodegenTest {
.contains("@Pattern", "import jakarta.validation.constraints.*");
}
@Test public void testJdkHttpClientWithAndWithoutDiscriminator() {
@Test
public void testJdkHttpClientWithAndWithoutDiscriminator() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -574,7 +593,8 @@ public class JavaClientCodegenTest {
.contains("import xyz.abcdef.invoker.JSON;");
}
@Test public void testJdkHttpAsyncClient() {
@Test
public void testJdkHttpAsyncClient() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -655,7 +675,8 @@ public class JavaClientCodegenTest {
assertEquals(postScopes.size(), 2, "POST scopes don't match. actual:" + postScopes);
}
@Test public void testAuthorizationScopeValues_Issue6733() {
@Test
public void testAuthorizationScopeValues_Issue6733() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -678,7 +699,8 @@ public class JavaClientCodegenTest {
Assertions.assertEquals(files.size(), 1);
}
@Test public void testTypedAndNonTypedComposedSchemaGeneration_3_1() {
@Test
public void testTypedAndNonTypedComposedSchemaGeneration_3_1() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -700,7 +722,8 @@ public class JavaClientCodegenTest {
Assertions.assertEquals(files.size(), 9);
}
@Test public void testMultiPartSpecifiesFileName_Issue17367() throws IOException {
@Test
public void testMultiPartSpecifiesFileName_Issue17367() throws IOException {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -732,7 +755,8 @@ public class JavaClientCodegenTest {
"file.getName\\(\\)\\);.*")));
}
@Test public void testAuthorizationsMethodsSizeWhenFiltered() {
@Test
public void testAuthorizationsMethodsSizeWhenFiltered() {
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue4584.yaml");
final ClientOptInput clientOptInput = new ClientOptInput().openAPI(openAPI).config(new JavaClientCodegen());
final DefaultGenerator defaultGenerator = new DefaultGenerator();
@ -748,7 +772,8 @@ public class JavaClientCodegenTest {
assertEquals(getCodegenOperation.authMethods.size(), 2);
}
@Test public void testFreeFormObjects() {
@Test
public void testFreeFormObjects() {
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue796.yaml");
JavaClientCodegen codegen = new JavaClientCodegen();
@ -783,7 +808,8 @@ public class JavaClientCodegenTest {
/**
* See https://github.com/OpenAPITools/openapi-generator/issues/3589
*/
@Test public void testSchemaMapping() throws IOException {
@Test
public void testSchemaMapping() throws IOException {
final Path output = newTempFolder();
final ClientOptInput clientOptInput = new CodegenConfigurator()
.setGeneratorName("java")
@ -819,7 +845,8 @@ public class JavaClientCodegenTest {
Assertions.assertEquals(fieldMatcher.group(1), "foo.bar.TypeAlias");
}
@Test public void testBearerAuth() {
@Test
public void testBearerAuth() {
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/pingBearerAuth.yaml");
List<CodegenSecurity> security = new JavaClientCodegen().fromSecurity(openAPI.getComponents().getSecuritySchemes());
@ -831,7 +858,8 @@ public class JavaClientCodegenTest {
.hasFieldOrPropertyWithValue("isBasicBearer", Boolean.TRUE);
}
@Test public void testVertXAuthInfoWithHyphenSeparatedSecurityScheme() {
@Test
public void testVertXAuthInfoWithHyphenSeparatedSecurityScheme() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1042,7 +1070,8 @@ public class JavaClientCodegenTest {
* We will contact the contributor of the following test to see if the fix will break their use cases and
* how we can fix it accordingly.
*/
@Test(enabled = false) public void testRestTemplateFormMultipart() {
@Test(enabled = false)
public void testRestTemplateFormMultipart() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1077,7 +1106,8 @@ public class JavaClientCodegenTest {
* We will contact the contributor of the following test to see if the fix will break their use cases and
* how we can fix it accordingly.
*/
@Test(enabled = false) public void testWebClientFormMultipart() {
@Test(enabled = false)
public void testWebClientFormMultipart() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1136,7 +1166,8 @@ public class JavaClientCodegenTest {
"List<Pet>"); // explicit 'x-webclient-blocking: true' which overrides global config
}
@Test public void testAllowModelWithNoProperties() {
@Test
public void testAllowModelWithNoProperties() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1164,7 +1195,8 @@ public class JavaClientCodegenTest {
* We will contact the contributor of the following test to see if the fix will break their use cases and
* how we can fix it accordingly.
*/
@Test(enabled = false) public void testRestTemplateWithUseAbstractionForFiles() {
@Test(enabled = false)
public void testRestTemplateWithUseAbstractionForFiles() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1197,7 +1229,8 @@ public class JavaClientCodegenTest {
);
}
@Test void testNotDuplicateOauth2FlowsScopes() {
@Test
void testNotDuplicateOauth2FlowsScopes() {
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/issue_7614.yaml");
final ClientOptInput clientOptInput = new ClientOptInput().openAPI(openAPI).config(new JavaClientCodegen());
final DefaultGenerator defaultGenerator = new DefaultGenerator();
@ -1249,7 +1282,8 @@ public class JavaClientCodegenTest {
.findFirst();
}
@Test public void testCustomMethodParamsAreCamelizedWhenUsingFeign() {
@Test
public void testCustomMethodParamsAreCamelizedWhenUsingFeign() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1276,7 +1310,8 @@ public class JavaClientCodegenTest {
/**
* see https://github.com/OpenAPITools/openapi-generator/issues/19895
*/
@Test public void testCharsetInContentTypeCorrectlyEncodedForFeignApi_issue19895() {
@Test
public void testCharsetInContentTypeCorrectlyEncodedForFeignApi_issue19895() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1308,7 +1343,8 @@ public class JavaClientCodegenTest {
* We will contact the contributor of the following test to see if the fix will break their use cases and
* how we can fix it accordingly.
*/
@Test(enabled = false) public void testWebClientWithUseAbstractionForFiles() {
@Test(enabled = false)
public void testWebClientWithUseAbstractionForFiles() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1359,7 +1395,8 @@ public class JavaClientCodegenTest {
/**
* See https://github.com/OpenAPITools/openapi-generator/issues/8352
*/
@Test public void testWebClientWithFreeFormInQueryParameters() {
@Test
public void testWebClientWithFreeFormInQueryParameters() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator().setGeneratorName("java")
.setLibrary(JavaClientCodegen.WEBCLIENT)
@ -1377,7 +1414,8 @@ public class JavaClientCodegenTest {
/**
* See https://github.com/OpenAPITools/openapi-generator/issues/11242
*/
@Test public void testNativeClientWhiteSpacePathParamEncoding() {
@Test
public void testNativeClientWhiteSpacePathParamEncoding() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1399,7 +1437,8 @@ public class JavaClientCodegenTest {
/**
* See https://github.com/OpenAPITools/openapi-generator/issues/4808
*/
@Test public void testNativeClientExplodedQueryParamObject() {
@Test
public void testNativeClientExplodedQueryParamObject() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1421,7 +1460,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testDefaultMicroprofileRestClientVersion() {
@Test
public void testDefaultMicroprofileRestClientVersion() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1443,7 +1483,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testMicroprofileRestClientVersion_1_4_1() {
@Test
public void testMicroprofileRestClientVersion_1_4_1() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setAdditionalProperties(Map.of(JavaClientCodegen.MICROPROFILE_REST_CLIENT_VERSION, "1.4.1"))
@ -1486,7 +1527,8 @@ public class JavaClientCodegenTest {
fail("Expected an exception that did not occur");
}
@Test public void testMicroprofileRestClientVersion_3_0() {
@Test
public void testMicroprofileRestClientVersion_3_0() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setAdditionalProperties(Map.of(JavaClientCodegen.MICROPROFILE_REST_CLIENT_VERSION, "3.0"))
@ -1509,7 +1551,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testMicroprofileGenerateCorrectJsonbCreator_issue12622() {
@Test
public void testMicroprofileGenerateCorrectJsonbCreator_issue12622() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setAdditionalProperties(Map.of(JavaClientCodegen.MICROPROFILE_REST_CLIENT_VERSION, "3.0"))
@ -1566,7 +1609,8 @@ public class JavaClientCodegenTest {
.containsWithNameAndAttributes("JsonProperty", ImmutableMap.of("value", "JSON_PROPERTY_NAME", "required", "true"));
}
@Test public void testJavaClientDefaultValues_issueNoNumber() {
@Test
public void testJavaClientDefaultValues_issueNoNumber() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setAdditionalProperties(Map.of(JavaClientCodegen.MICROPROFILE_REST_CLIENT_VERSION, "3.0"))
@ -1589,7 +1633,8 @@ public class JavaClientCodegenTest {
.asString().endsWith("= new ArrayList<>();");
}
@Test public void testWebClientJsonCreatorWithNullable_issue12790() {
@Test
public void testWebClientJsonCreatorWithNullable_issue12790() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setAdditionalProperties(Map.of(AbstractJavaCodegen.OPENAPI_NULLABLE, "true"))
@ -1610,7 +1655,8 @@ public class JavaClientCodegenTest {
"this.notNullableProperty = notNullableProperty;");
}
@Test public void testRestTemplateResponseTypeWithUseAbstractionForFiles() {
@Test
public void testRestTemplateResponseTypeWithUseAbstractionForFiles() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1632,7 +1678,8 @@ public class JavaClientCodegenTest {
);
}
@Test(dataProvider = "supportedLibraries") void testExtraAnnotations(Library library) {
@Test(dataProvider = "supportedLibraries")
void testExtraAnnotations(Library library) {
final Path output = newTempFolder();
final String outputPath = output.toString().replace('\\', '/');
final CodegenConfigurator configurator = new CodegenConfigurator()
@ -1654,7 +1701,8 @@ public class JavaClientCodegenTest {
/**
* See https://github.com/OpenAPITools/openapi-generator/issues/11340
*/
@Test public void testReferencedHeader2() {
@Test
public void testReferencedHeader2() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator().setGeneratorName("java")
.setAdditionalProperties(Map.of(BeanValidationFeatures.USE_BEANVALIDATION, "true"))
@ -1675,7 +1723,8 @@ public class JavaClientCodegenTest {
.containsWithName("NotNull");
}
@Test public void testReturnTypeMapping() {
@Test
public void testReturnTypeMapping() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1708,7 +1757,8 @@ public class JavaClientCodegenTest {
+ " queryObject.getValues()));");
}
@Test public void testJdkHttpClientWithAndWithoutParentExtension() {
@Test
public void testJdkHttpClientWithAndWithoutParentExtension() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -1735,7 +1785,8 @@ public class JavaClientCodegenTest {
.content().contains("public class AnotherChild {");
}
@Test public void testDiscriminatorWithMappingIssue14731() {
@Test
public void testDiscriminatorWithMappingIssue14731() {
final Path output = newTempFolder();
final OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/bugs/issue_14731.yaml", null, new ParseOptions())
@ -1767,7 +1818,8 @@ public class JavaClientCodegenTest {
.content().doesNotContain("@JsonTypeName");
}
@Test public void testDiscriminatorWithoutMappingIssue14731() {
@Test
public void testDiscriminatorWithoutMappingIssue14731() {
final Path output = newTempFolder();
final OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/bugs/issue_14731.yaml", null, new ParseOptions())
@ -1799,7 +1851,8 @@ public class JavaClientCodegenTest {
.content().contains("@JsonTypeName");
}
@Test public void testForJavaNativeJsonSubtype() {
@Test
public void testForJavaNativeJsonSubtype() {
final Path output = newTempFolder();
final OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/bugs/issue_14917.yaml", null, new ParseOptions())
@ -1834,7 +1887,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void shouldProperlyExplodeRestTemplateQueryParameters_issue907() {
@Test
public void shouldProperlyExplodeRestTemplateQueryParameters_issue907() {
final Map<String, File> files = generateFromContract(
"src/test/resources/3_0/java/explode-query-parameter.yaml",
@ -1892,7 +1946,8 @@ public class JavaClientCodegenTest {
final String library,
final Map<String, Object> properties
) {
return generateFromContract(pathToSpecification, library, properties, configurator -> {});
return generateFromContract(pathToSpecification, library, properties, configurator -> {
});
}
@SneakyThrows
@ -1915,7 +1970,8 @@ public class JavaClientCodegenTest {
.stream().collect(Collectors.toMap(File::getName, Function.identity()));
}
@Test public void testForJavaApacheHttpClientJsonSubtype() {
@Test
public void testForJavaApacheHttpClientJsonSubtype() {
final Path output = newTempFolder();
OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/bugs/issue_14917.yaml", null, new ParseOptions())
@ -1952,7 +2008,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testIsOverriddenProperty() {
@Test
public void testIsOverriddenProperty() {
final OpenAPI openAPI =
TestUtils.parseFlattenSpec("src/test/resources/3_0/allOf_composition_discriminator.yaml");
JavaClientCodegen codegen = new JavaClientCodegen();
@ -1969,7 +2026,8 @@ public class JavaClientCodegenTest {
Assertions.assertEquals(cp1.isOverridden, false);
}
@Test public void testForJavaApacheHttpClientOverrideSetter() {
@Test
public void testForJavaApacheHttpClientOverrideSetter() {
final Path output = newTempFolder();
OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/3_0/allOf_composition_discriminator.yaml", null, null)
@ -1987,7 +2045,8 @@ public class JavaClientCodegenTest {
.contains(" }\n" + "\n" + " public Pet petType(@javax.annotation.Nonnull String petType) {\n");
}
@Test public void testForJavaNativeClientOverrideSetter() {
@Test
public void testForJavaNativeClientOverrideSetter() {
final Path output = newTempFolder();
final OpenAPI openAPI = new OpenAPIParser()
.readLocation("src/test/resources/3_0/allOf_composition_discriminator.yaml", null, null)
@ -2004,7 +2063,8 @@ public class JavaClientCodegenTest {
.contains(" }\n" + "\n" + " public Pet petType(@javax.annotation.Nonnull String petType) {\n");
}
@Test public void testDeprecatedProperty() {
@Test
public void testDeprecatedProperty() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2023,7 +2083,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testDeprecatedPropertyJersey3() {
@Test
public void testDeprecatedPropertyJersey3() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2074,7 +2135,8 @@ public class JavaClientCodegenTest {
.containsWithName("annotation2");
}
@Test public void testRestTemplateWithGeneratedClientAsBeanDisabled() {
@Test
public void testRestTemplateWithGeneratedClientAsBeanDisabled() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2091,7 +2153,8 @@ public class JavaClientCodegenTest {
TestUtils.assertFileNotContains(output.resolve("src/main/java/xyz/abcdef/api/PetApi.java"), "@Component");
}
@Test public void testRestTemplateWithGeneratedClientAsBeanEnabled() {
@Test
public void testRestTemplateWithGeneratedClientAsBeanEnabled() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2108,7 +2171,8 @@ public class JavaClientCodegenTest {
TestUtils.assertFileContains(output.resolve("src/main/java/xyz/abcdef/api/PetApi.java"), "@Component");
}
@Test public void testRestTemplateWithUseBeanValidationEnabled() {
@Test
public void testRestTemplateWithUseBeanValidationEnabled() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2125,7 +2189,8 @@ public class JavaClientCodegenTest {
TestUtils.assertFileContains(output.resolve("src/main/java/org/openapitools/client/model/Pet.java"), "@Valid");
}
@Test public void testRestTemplateWithUseBeanValidationDisabled() {
@Test
public void testRestTemplateWithUseBeanValidationDisabled() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2142,7 +2207,8 @@ public class JavaClientCodegenTest {
TestUtils.assertFileNotContains(output.resolve("src/main/java/org/openapitools/client/model/Pet.java"), "@Valid");
}
@Test public void testRestTemplateWithPerformBeanValidationEnabled() {
@Test
public void testRestTemplateWithPerformBeanValidationEnabled() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2159,7 +2225,8 @@ public class JavaClientCodegenTest {
TestUtils.assertFileExists(output.resolve("src/main/java/xyz/abcdef/BeanValidationException.java"));
}
@Test public void testRestTemplateWithPerformBeanValidationDisabled() {
@Test
public void testRestTemplateWithPerformBeanValidationDisabled() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2176,7 +2243,8 @@ public class JavaClientCodegenTest {
TestUtils.assertFileNotExists(output.resolve("src/main/java/org/openapitools/client/invoker/BeanValidationException.java"));
}
@Test public void testLogicToAvoidStackOverflow() {
@Test
public void testLogicToAvoidStackOverflow() {
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
.addAdditionalProperty(CodegenConstants.API_PACKAGE, "xyz.abcdef.api")
@ -2190,7 +2258,8 @@ public class JavaClientCodegenTest {
// shouldn't throw stackoverflow exception
}
@Test public void testWebClientSupportListOfStringReturnType_issue7118() {
@Test
public void testWebClientSupportListOfStringReturnType_issue7118() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2216,7 +2285,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testEnumCaseInsensitive_issue8084() {
@Test
public void testEnumCaseInsensitive_issue8084() {
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/2_0/issue8084.yaml");
final JavaClientCodegen codegen = new JavaClientCodegen();
codegen.setOpenAPI(openAPI);
@ -2231,7 +2301,8 @@ public class JavaClientCodegenTest {
.bodyContainsLines("if (b.value.equalsIgnoreCase(value)) {");
}
@Test public void testEnumCaseSensitive_issue8084() {
@Test
public void testEnumCaseSensitive_issue8084() {
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/2_0/issue8084.yaml");
final JavaClientCodegen codegen = new JavaClientCodegen();
codegen.setOpenAPI(openAPI);
@ -2246,7 +2317,8 @@ public class JavaClientCodegenTest {
.bodyContainsLines("if (b.value.equals(value)) {");
}
@Test public void testWebClientResponseTypeWithUseAbstractionForFiles_issue16589() {
@Test
public void testWebClientResponseTypeWithUseAbstractionForFiles_issue16589() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2266,7 +2338,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testHandleConstantParams() {
@Test
public void testHandleConstantParams() {
final Path output = newTempFolder();
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/java/autoset_constant.yaml");
JavaClientCodegen codegen = new JavaClientCodegen();
@ -2298,7 +2371,8 @@ public class JavaClientCodegenTest {
assertNull(files.get("AllOfDatetime.java"));
}
@Test public void testOpenapiGeneratorIgnoreListOption() {
@Test
public void testOpenapiGeneratorIgnoreListOption() {
final Path output = newTempFolder();
final OpenAPI openAPI = TestUtils.parseFlattenSpec("src/test/resources/3_0/allof_primitive.yaml");
JavaClientCodegen codegen = new JavaClientCodegen();
@ -2389,7 +2463,8 @@ public class JavaClientCodegenTest {
JavaFileAssert.assertThat(apiFile).fileContains(expectedInnerEnumLines);
}
@Test public void testQueryParamsExploded_whenQueryParamIsNull() {
@Test
public void testQueryParamsExploded_whenQueryParamIsNull() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2404,7 +2479,8 @@ public class JavaClientCodegenTest {
TestUtils.assertFileContains(output.resolve("src/main/java/xyz/abcdef/api/DepartmentApi.java"), "if (filter != null) {");
}
@Test public void generateAllArgsConstructor() {
@Test
public void generateAllArgsConstructor() {
Map<String, File> files = generateFromContract("src/test/resources/3_0/java/all_args_constructor.yaml", JavaClientCodegen.RESTTEMPLATE,
Map.of(AbstractJavaCodegen.GENERATE_CONSTRUCTOR_WITH_ALL_ARGS, Boolean.TRUE),
codegenConfigurator -> codegenConfigurator.addOpenapiNormalizer("REFACTOR_ALLOF_WITH_PROPERTIES_ONLY", "false"));
@ -2435,7 +2511,8 @@ public class JavaClientCodegenTest {
.hasParameter("_list").toConstructor();
}
@Test public void generateAllArgsConstructor_REFACTOR_ALLOF_WITH_PROPERTIES_ONLY() {
@Test
public void generateAllArgsConstructor_REFACTOR_ALLOF_WITH_PROPERTIES_ONLY() {
// try the generation with some additional OpenAPINormalizers
Map<String, File> files = generateFromContract("src/test/resources/3_0/java/all_args_constructor.yaml", JavaClientCodegen.RESTTEMPLATE,
@ -2463,7 +2540,8 @@ public class JavaClientCodegenTest {
.assertConstructor("Integer", "String", "LocalDate", "String", "String");
}
@Test public void testRestClientFormMultipart() {
@Test
public void testRestClientFormMultipart() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2492,7 +2570,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testRestClientWithUseAbstractionForFiles() {
@Test
public void testRestClientWithUseAbstractionForFiles() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2521,7 +2600,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testRestClientWithFreeFormInQueryParameters() {
@Test
public void testRestClientWithFreeFormInQueryParameters() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator().setGeneratorName("java")
.setLibrary(JavaClientCodegen.RESTCLIENT)
@ -2535,7 +2615,8 @@ public class JavaClientCodegenTest {
TestUtils.assertFileContains(output.resolve("src/main/java/xyz/abcdef/ApiClient.java"), "value instanceof Map");
}
@Test public void testRestClientJsonCreatorWithNullable_issue12790() {
@Test
public void testRestClientJsonCreatorWithNullable_issue12790() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.addAdditionalProperty(AbstractJavaCodegen.OPENAPI_NULLABLE, "true")
@ -2557,7 +2638,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testRestClientSupportListOfStringReturnType_issue7118() {
@Test
public void testRestClientSupportListOfStringReturnType_issue7118() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2583,7 +2665,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testRestClientResponseTypeWithUseAbstractionForFiles_issue16589() {
@Test
public void testRestClientResponseTypeWithUseAbstractionForFiles_issue16589() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -2604,7 +2687,8 @@ public class JavaClientCodegenTest {
);
}
@Test void testBuilderJavaClient() {
@Test
void testBuilderJavaClient() {
Map<String, File> files = generateFromContract(
"src/test/resources/3_0/java/builder.yaml",
JavaClientCodegen.RESTTEMPLATE,
@ -2626,11 +2710,13 @@ public class JavaClientCodegenTest {
);
}
@DataProvider Iterator<String> serializationLibraries() {
@DataProvider
Iterator<String> serializationLibraries() {
return new JavaClientCodegen().supportedLibraries().keySet().iterator();
}
@Test(dataProvider = "serializationLibraries") void setsDefaultSerializationLibrary(String library) {
@Test(dataProvider = "serializationLibraries")
void setsDefaultSerializationLibrary(String library) {
var codegen = new JavaClientCodegen();
codegen.setLibrary(library);
codegen.processOpts();
@ -2648,7 +2734,8 @@ public class JavaClientCodegenTest {
* When GSON is selected as serializer, there should not be any jackson references
* (except jackson-databind-nullable that is, which is only added when openApiNullable=true)
*/
@Test(dataProvider = "librariesSupportingGson") void gsonCodeDoesNotContainJacksonReferences(Library library) {
@Test(dataProvider = "librariesSupportingGson")
void gsonCodeDoesNotContainJacksonReferences(Library library) {
final CodegenConfigurator configurator = new CodegenConfigurator()
.addAdditionalProperty(SERIALIZATION_LIBRARY, Serializer.GSON)
.addAdditionalProperty(OPENAPI_NULLABLE, "false")
@ -2669,7 +2756,8 @@ public class JavaClientCodegenTest {
/**
* Regression test for <a href="https://github.com/OpenAPITools/openapi-generator/issues/6496">#6496</a>
*/
@Test void doesNotGenerateJacksonJsonFormatAnnotation_whenLibraryIsGson_andSerializeBigDecimalAsStringIsTrue() {
@Test
void doesNotGenerateJacksonJsonFormatAnnotation_whenLibraryIsGson_andSerializeBigDecimalAsStringIsTrue() {
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
.setLibrary(JavaClientCodegen.OKHTTP_GSON)
@ -2695,7 +2783,8 @@ public class JavaClientCodegenTest {
* Test that fix for <a href="https://github.com/OpenAPITools/openapi-generator/issues/6496">#6496</a> has
* no unwanted side effects on the existing feature (Jackson + bigDecimalAsString)
*/
@Test void generatesJacksonJsonFormatAnnotation_whenLibraryIsJackson_andSerializeBigDecimalAsStringIsTrue() {
@Test
void generatesJacksonJsonFormatAnnotation_whenLibraryIsJackson_andSerializeBigDecimalAsStringIsTrue() {
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
.setLibrary(JavaClientCodegen.NATIVE)
@ -3015,7 +3104,8 @@ public class JavaClientCodegenTest {
.bodyContainsLines("headerParams.add(HttpHeaders.AUTHORIZATION, \"Bearer \" + accessToken)");
}
@Test public void testRestClientWithXML_issue_19137() {
@Test
public void testRestClientWithXML_issue_19137() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -3037,7 +3127,8 @@ public class JavaClientCodegenTest {
);
}
@Test public void testRestClientWithUseSingleRequestParameter_issue_19406() {
@Test
public void testRestClientWithUseSingleRequestParameter_issue_19406() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
@ -3063,4 +3154,41 @@ public class JavaClientCodegenTest {
);
}
@Test
public void testDuplicatedOperationId() {
final Path output = newTempFolder();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setValidateSpec(false)
.setGeneratorName("java")
.setLibrary(JavaClientCodegen.RESTCLIENT)
.setAdditionalProperties(Map.of(
CodegenConstants.API_PACKAGE, "xyz.abcdef.api",
CodegenConstants.USE_SINGLE_REQUEST_PARAMETER, true
))
.setInputSpec("src/test/resources/3_0/duplicated_operationid.yaml")
.setOutputDir(output.toString().replace("\\", "/"));
new DefaultGenerator().opts(configurator.toClientOptInput()).generate();
TestUtils.assertFileContains(
output.resolve("src/main/java/xyz/abcdef/api/PetApi.java"),
" void getObject("
);
TestUtils.assertFileContains(
output.resolve("src/main/java/xyz/abcdef/api/UserApi.java"),
" void getObject("
);
TestUtils.assertFileNotContains(
output.resolve("src/main/java/xyz/abcdef/api/UserApi.java"),
" void getObject_0("
);
TestUtils.assertFileNotContains(
output.resolve("src/main/java/xyz/abcdef/api/UserApi.java"),
" void getObject0("
);
}
}

View File

@ -0,0 +1,58 @@
openapi: 3.0.0
servers:
- url: 'http://petstore.swagger.io/v2'
info:
description: A sample spec to test duplicated operationId
version: 1.0.0
title: OpenAPI Petstore
license:
name: Apache-2.0
url: 'https://www.apache.org/licenses/LICENSE-2.0.html'
paths:
'/pet/{petId}':
get:
tags:
- pet
summary: Find pet by ID
description: Returns a single pet
operationId: getObject
parameters:
- name: petId
in: path
description: ID of pet to return
required: true
schema:
type: integer
format: int64
responses:
'200':
description: successful operation
'400':
description: Invalid ID supplied
'404':
description: Pet not found
'/user/{username}':
get:
tags:
- user
summary: Get user by user name
description: ''
operationId: getObject
parameters:
- name: username
in: path
description: The name that needs to be fetched. Use user1 for testing.
required: true
schema:
type: string
responses:
'200':
description: successful operation
'400':
description: Invalid username supplied
'404':
description: User not found
externalDocs:
description: Find out more about Swagger
url: 'http://swagger.io'