Fix #8027 - import the auto generated supporting JSON class only when generateSupportingFiles is true

This commit is contained in:
moshe
2021-01-27 18:12:37 +02:00
parent 13513b3a41
commit 3f7366762d
3 changed files with 78 additions and 0 deletions

View File

@@ -233,6 +233,7 @@ public class DefaultGenerator implements Generator {
config.additionalProperties().put(CodegenConstants.GENERATE_APIS, generateApis);
config.additionalProperties().put(CodegenConstants.GENERATE_MODELS, generateModels);
config.additionalProperties().put("generateSupportingFiles", generateSupportingFiles);
if (!generateApiTests && !generateModelTests) {
config.additionalProperties().put(CodegenConstants.EXCLUDE_TESTS, true);

View File

@@ -46,7 +46,9 @@ import javax.validation.Valid;
{{#performBeanValidation}}
import org.hibernate.validator.constraints.*;
{{/performBeanValidation}}
{{#generateSupportingFiles}}
import {{invokerPackage}}.JSON;
{{/generateSupportingFiles}}
{{#models}}
{{#model}}

View File

@@ -446,6 +446,81 @@ public class JavaClientCodegenTest {
"import java.net.http.HttpRequest;");
}
@Test
public void testJdkHttpClientWithSupportingFiles() throws Exception {
Map<String, Object> properties = new HashMap<>();
properties.put(CodegenConstants.API_PACKAGE, "xyz.abcdef.api");
properties.put(CodegenConstants.MODEL_PACKAGE, "xyz.abcdef.model");
properties.put(CodegenConstants.INVOKER_PACKAGE, "xyz.abcdef.invoker");
File output = Files.createTempDirectory("test").toFile();
output.deleteOnExit();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
.setLibrary(JavaClientCodegen.NATIVE)
.setAdditionalProperties(properties)
.setInputSpec("src/test/resources/3_0/pingSomeObj.yaml")
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
final ClientOptInput clientOptInput = configurator.toClientOptInput();
DefaultGenerator generator = new DefaultGenerator();
generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true");
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true");
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "true");
List<File> files = generator.opts(clientOptInput).generate();
Assert.assertEquals(files.size(), 34);
validateJavaSourceFiles(files);
TestUtils.assertFileContains(Paths.get(output + "/src/main/java/xyz/abcdef/api/PingApi.java"),
"public class PingApi",
"import java.net.http.HttpClient;",
"import java.net.http.HttpRequest;",
"import java.net.http.HttpResponse;");
TestUtils.assertFileContains(Paths.get(output + "/src/main/java/xyz/abcdef/model/SomeObj.java"),
"import xyz.abcdef.invoker.JSON;",
"public class SomeObj {");
}
@Test
public void testJdkHttpClientWithoutSupportingFiles() throws Exception {
Map<String, Object> properties = new HashMap<>();
properties.put(CodegenConstants.API_PACKAGE, "xyz.abcdef.api");
properties.put(CodegenConstants.MODEL_PACKAGE, "xyz.abcdef.model");
properties.put(CodegenConstants.INVOKER_PACKAGE, "xyz.abcdef.invoker");
File output = Files.createTempDirectory("test").toFile();
output.deleteOnExit();
final CodegenConfigurator configurator = new CodegenConfigurator()
.setGeneratorName("java")
.setLibrary(JavaClientCodegen.NATIVE)
.setAdditionalProperties(properties)
.setInputSpec("src/test/resources/3_0/pingSomeObj.yaml")
.setOutputDir(output.getAbsolutePath().replace("\\", "/"));
final ClientOptInput clientOptInput = configurator.toClientOptInput();
DefaultGenerator generator = new DefaultGenerator();
generator.setGeneratorPropertyDefault(CodegenConstants.MODELS, "true");
generator.setGeneratorPropertyDefault(CodegenConstants.APIS, "true");
generator.setGeneratorPropertyDefault(CodegenConstants.SUPPORTING_FILES, "false");
List<File> files = generator.opts(clientOptInput).generate();
Assert.assertEquals(files.size(), 6);
validateJavaSourceFiles(files);
TestUtils.assertFileContains(Paths.get(output + "/src/main/java/xyz/abcdef/api/PingApi.java"),
"public class PingApi",
"import java.net.http.HttpClient;",
"import java.net.http.HttpRequest;",
"import java.net.http.HttpResponse;");
TestUtils.assertFileNotContains(Paths.get(output + "/src/main/java/xyz/abcdef/model/SomeObj.java"),
"import xyz.abcdef.invoker.JSON;");
}
@Test
public void testJdkHttpAsyncClient() throws Exception {
Map<String, Object> properties = new HashMap<>();