From 316466ef5ef88304ce13cd26e732f82ac8084b3e Mon Sep 17 00:00:00 2001 From: jasper linschoten Date: Fri, 8 Sep 2023 10:29:17 +0200 Subject: [PATCH] Fix createApiComponent option in resttemplate is ignored --- README.md | 2 + .../libraries/resttemplate/api.mustache | 2 + .../codegen/java/BoatJavaCodeGenTests.java | 84 +++++++++++++------ 3 files changed, 64 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 6577cd155..3eaa0ad71 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,8 @@ It currently consists of # Release Notes BOAT is still under development and subject to change. +## 0.17.17 + * Fix [`createApiComponent` option in springtemplate generator is ignored](https://github.com/Backbase/backbase-openapi-tools/issues/630) ## 0.17.16 * BOAT Angular Generator * added `@angular/common` as peer dependency in the generated package.json files diff --git a/boat-scaffold/src/main/templates/boat-java/libraries/resttemplate/api.mustache b/boat-scaffold/src/main/templates/boat-java/libraries/resttemplate/api.mustache index f2e8a1b2c..1966c50da 100644 --- a/boat-scaffold/src/main/templates/boat-java/libraries/resttemplate/api.mustache +++ b/boat-scaffold/src/main/templates/boat-java/libraries/resttemplate/api.mustache @@ -27,7 +27,9 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; {{>generatedAnnotation}} +{{#createApiComponent}} @Component("{{package}}.{{classname}}") +{{/createApiComponent}} {{#operations}} public class {{classname}} { private ApiClient apiClient; diff --git a/boat-scaffold/src/test/java/com/backbase/oss/codegen/java/BoatJavaCodeGenTests.java b/boat-scaffold/src/test/java/com/backbase/oss/codegen/java/BoatJavaCodeGenTests.java index 9679c6aa4..e4664fa22 100644 --- a/boat-scaffold/src/test/java/com/backbase/oss/codegen/java/BoatJavaCodeGenTests.java +++ b/boat-scaffold/src/test/java/com/backbase/oss/codegen/java/BoatJavaCodeGenTests.java @@ -1,26 +1,33 @@ package com.backbase.oss.codegen.java; -import static com.backbase.oss.codegen.java.BoatJavaCodeGen.*; +import com.github.javaparser.StaticJavaParser; +import com.github.javaparser.ast.body.MethodDeclaration; +import com.github.javaparser.ast.body.TypeDeclaration; +import io.swagger.parser.OpenAPIParser; +import io.swagger.v3.parser.core.models.ParseOptions; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; +import org.openapitools.codegen.CliOption; +import org.openapitools.codegen.ClientOptInput; +import org.openapitools.codegen.DefaultGenerator; +import org.openapitools.codegen.languages.SpringCodegen; +import java.io.File; +import java.io.FileNotFoundException; +import java.util.List; import java.util.Map; +import static com.backbase.oss.codegen.java.BoatJavaCodeGen.*; import static java.util.stream.Collectors.groupingBy; import static org.hamcrest.MatcherAssert.assertThat; -import static org.hamcrest.Matchers.hasEntry; -import static org.hamcrest.Matchers.is; -import static org.hamcrest.Matchers.nullValue; +import static org.hamcrest.Matchers.*; import static org.junit.jupiter.api.Assertions.assertEquals; -import static org.junit.jupiter.api.Assertions.assertTrue; - -import org.junit.jupiter.api.Disabled; -import org.junit.jupiter.api.Test; -import org.openapitools.codegen.CliOption; -import org.openapitools.codegen.CodegenModel; -import org.openapitools.codegen.CodegenParameter; -import org.openapitools.codegen.CodegenProperty; class BoatJavaCodeGenTests { + static final String PROP_BASE = BoatJavaCodeGenTests.class.getSimpleName() + "."; + static final String TEST_OUTPUT = System.getProperty(PROP_BASE + "output", "target/boat-java-codegen-tests"); @Test void clientOptsUnicity() { final BoatJavaCodeGen gen = new BoatJavaCodeGen(); @@ -43,6 +50,7 @@ void processOptsWithRestTemplateDefaults() { assertThat(gen.useJacksonConversion, is(false)); assertThat(gen.useDefaultApiClient, is(true)); assertThat(gen.restTemplateBeanName, is(nullValue())); + assertThat(gen.createApiComponent, is(true)); } @Test @@ -57,6 +65,7 @@ void processOptsWithRestTemplate() { options.put(USE_JACKSON_CONVERSION, "true"); options.put(USE_DEFAULT_API_CLIENT, "false"); options.put(REST_TEMPLATE_BEAN_NAME, "the-coolest-rest-template-in-this-universe"); + options.put(CREATE_API_COMPONENT, "false"); gen.processOpts(); @@ -66,6 +75,7 @@ void processOptsWithRestTemplate() { assertThat(gen.useJacksonConversion, is(true)); assertThat(gen.useDefaultApiClient, is(false)); assertThat(gen.restTemplateBeanName, is("the-coolest-rest-template-in-this-universe")); + assertThat(gen.createApiComponent, is(false)); } @Test @@ -91,28 +101,54 @@ void processOptsWithoutRestTemplate() { } @Test - void processOptsCreateApiComponent() { + void processOptsUseProtectedFields() { final BoatJavaCodeGen gen = new BoatJavaCodeGen(); final Map options = gen.additionalProperties(); - options.put(CREATE_API_COMPONENT, "false"); + options.put(USE_PROTECTED_FIELDS, "true"); - gen.setLibrary("resttemplate"); gen.processOpts(); - assertThat(gen.createApiComponent, is(false)); + assertThat(gen.additionalProperties(), hasEntry("modelFieldsVisibility", "protected")); } - @Test - void processOptsUseProtectedFields() { - final BoatJavaCodeGen gen = new BoatJavaCodeGen(); - final Map options = gen.additionalProperties(); + @ParameterizedTest + @ValueSource(booleans = {true, false}) + void shouldHonourGenerateComponentAnnotation(boolean generate) throws InterruptedException, FileNotFoundException { - options.put(USE_PROTECTED_FIELDS, "true"); + var input = new File("src/test/resources/boat-spring/openapi.yaml"); + var output = TEST_OUTPUT + "/shouldNotGenerateComponentAnnotation/" + String.valueOf(generate); - gen.processOpts(); + final BoatJavaCodeGen gen = new BoatJavaCodeGen(); + gen.setOutputDir(output); + gen.setInputSpec(input.getAbsolutePath()); + gen.setApiPackage("com.backbase.test.api"); + gen.setModelPackage("com.backbase.test.api.model"); + gen.setInvokerPackage("com.backbase.test.api.invoker"); + gen.setApiNameSuffix("ApiClient"); - assertThat(gen.additionalProperties(), hasEntry("modelFieldsVisibility", "protected")); + final Map options = gen.additionalProperties(); + options.put("library", "resttemplate"); + options.put(CREATE_API_COMPONENT, String.valueOf(generate)); + + var openApiInput = new OpenAPIParser() + .readLocation(input.getAbsolutePath(), null, new ParseOptions()) + .getOpenAPI(); + var clientOptInput = new ClientOptInput(); + clientOptInput.config(gen); + clientOptInput.openAPI(openApiInput); + + List files = new DefaultGenerator().opts(clientOptInput).generate(); + + File apiFile = files.stream() + .filter(file -> file.getName().equals("PaymentsApiClient.java")) + .findFirst() + .get(); + TypeDeclaration apiType = StaticJavaParser.parse(apiFile) + .findFirst(TypeDeclaration.class).get(); + + assertThat(gen.createApiComponent, is(generate)); + assertThat(gen.getLibrary(), is("resttemplate")); + assertThat(apiType.getAnnotationByName("Component").isPresent(), is(generate)); } - }