From d52e3fbfda89fe22b7e292b5d647fb55cf0223d5 Mon Sep 17 00:00:00 2001 From: gonzalad <777485+gonzalad@users.noreply.github.com> Date: Thu, 25 May 2023 10:01:12 +0200 Subject: [PATCH] spring: fix multiline tag description (#15112) (fix #12474) * spring: fix multiline tag description @Tag description should merge multiple lines into single line and trim the newline char at the end The fix was done in a similar way to what is done for operation description. * spring: multiline tag description add unit test --------- Co-authored-by: gonzalad Co-authored-by: Oleh Kurpiak --- .../codegen/languages/SpringCodegen.java | 2 +- .../java/spring/SpringCodegenTest.java | 26 ++++++++++++++++ .../issue12474-multiline-description.yaml | 31 +++++++++++++++++++ 3 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 modules/openapi-generator/src/test/resources/3_0/spring/issue12474-multiline-description.yaml diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java index 840646539ac7..829be48ea37d 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/SpringCodegen.java @@ -858,7 +858,7 @@ public class SpringCodegen extends AbstractJavaCodegen final String firstTagName = firstTag.getName(); // But use a sensible tag name if there is none objs.put("tagName", "default".equals(firstTagName) ? firstOperation.baseName : firstTagName); - objs.put("tagDescription", firstTag.getDescription()); + objs.put("tagDescription", escapeText(firstTag.getDescription())); } return objs; diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java index 6bb4c3d0c907..9dd7b4d24c7d 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/spring/SpringCodegenTest.java @@ -2666,4 +2666,30 @@ public class SpringCodegenTest { .bodyContainsLines("if (b.value.equals(value)) {"); } + + + @Test + public void multiLineOperationDescription() throws IOException { + Map additionalProperties = new HashMap<>(); + additionalProperties.put(SpringCodegen.USE_TAGS, "true"); + additionalProperties.put(DOCUMENTATION_PROVIDER, DocumentationProvider.SPRINGDOC.name()); + + Map files = generateFromContract("src/test/resources/3_0/spring/issue12474-multiline-description.yaml", SPRING_BOOT, additionalProperties); + + String expectedDescription = "# Multi-line descriptions This is an example of a multi-line description. It: - has multiple lines - uses Markdown (CommonMark) for rich text representation"; + JavaFileAssert.assertThat(files.get("PingTagApi.java")) + .fileContains(expectedDescription); + } + + @Test + public void multiLineTagDescription() throws IOException { + Map additionalProperties = new HashMap<>(); + additionalProperties.put(SpringCodegen.USE_TAGS, "true"); + additionalProperties.put(DOCUMENTATION_PROVIDER, DocumentationProvider.SPRINGDOC.name()); + + Map files = generateFromContract("src/test/resources/3_0/spring/issue12474-multiline-description.yaml", SPRING_BOOT, additionalProperties); + + JavaFileAssert.assertThat(files.get("PingTagApi.java")) + .fileContains("This is a multine tag : * tag item 1 * tag item 2 "); + } } diff --git a/modules/openapi-generator/src/test/resources/3_0/spring/issue12474-multiline-description.yaml b/modules/openapi-generator/src/test/resources/3_0/spring/issue12474-multiline-description.yaml new file mode 100644 index 000000000000..12b471c0fdd7 --- /dev/null +++ b/modules/openapi-generator/src/test/resources/3_0/spring/issue12474-multiline-description.yaml @@ -0,0 +1,31 @@ +openapi: "3.0.1" +info: + title: test + version: "1.0" + +tags: + - name: pingTag + description: | + This is a multine tag : + * tag item 1 + * tag item 2 + +paths: + + /ping: + get: + tags: + - pingTag + summary: Multi-line descriptions + description: |- + # Multi-line descriptions + + This is an example of a multi-line description. + + It: + - has multiple lines + - uses Markdown (CommonMark) for rich text representation + operationId: ping + responses: + 200: + description: OK