diff --git a/pom.xml b/pom.xml index 30a017911eff03ceaecf9d435b2dad7da69d137a..6da03db8e519852461e906b56e32e0ded7e26d1d 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,6 @@ <openapi-generator.version>7.10.0</openapi-generator.version> <swagger-parser.version>2.1.23</swagger-parser.version> <wiremock-spring-boot.version>3.6.0</wiremock-spring-boot.version> - <jsoup.version>1.18.3</jsoup.version> </properties> <dependencies> <!-- OZG-Cloud --> @@ -60,11 +59,6 @@ <artifactId>swagger-parser</artifactId> <version>${swagger-parser.version}</version> </dependency> - <dependency> - <groupId>org.jsoup</groupId> - <artifactId>jsoup</artifactId> - <version>${jsoup.version}</version> - </dependency> <!-- test --> <dependency> diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocument.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocument.java index 5273da376784ad394b91bd8b8527f125573edd83..b6a5497aa7418a2bca6e12df080ca731d2686989 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocument.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocument.java @@ -1,51 +1,9 @@ package de.ozgcloud.nachrichten.postfach.osiv2.transfer; -import java.util.List; -import java.util.function.Function; - -import org.jsoup.Jsoup; -import org.jsoup.nodes.Document; -import org.jsoup.nodes.Element; - public record Osi2HtmlDocument(String html) { - private record SpanRendering(String tag, Function<Element, String> markdownReplacement) { - static SpanRendering of(String tag, Function<Element, String> markdownReplacement) { - return new SpanRendering(tag, markdownReplacement); - } - - void replaceElementsWithMarkdownSpansIn(Document document) { - document.body() - .select(tag) - .replaceAll(anchor -> new Element("span") - .text(markdownReplacement.apply(anchor)) - ); - } - } - - static final List<SpanRendering> SPAN_RENDERINGS = List.of( - SpanRendering.of("a", anchor -> "[" + anchor.text() + "](" + anchor.attr("href") + ")"), - SpanRendering.of("img", image -> " + ")"), - SpanRendering.of("i", italic -> "_" + italic.text() + "_"), - SpanRendering.of("em", italic -> "_" + italic.text() + "_"), - SpanRendering.of("b", bold -> "__" + bold.text() + "__"), - SpanRendering.of("strong", bold -> "__" + bold.text() + "__"), - SpanRendering.of("h1", heading -> "# " + heading.text()), - SpanRendering.of("h2", heading -> "## " + heading.text()), - SpanRendering.of("h3", heading -> "### " + heading.text()), - SpanRendering.of("blockquote", bold -> "> " + bold.text()) - ); - public String renderToPlainText() { - var document = Jsoup.parse(html); - applySpanRenderings(document); - return document.wholeText(); - } - - private void applySpanRenderings(Document document) { - for (var entry : SPAN_RENDERINGS) { - entry.replaceElementsWithMarkdownSpansIn(document); - } + return html.replaceAll("<br/?>", "\n"); } public static String renderToPlainText(String html) { diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2ResponseMapper.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2ResponseMapper.java index aef50b4e3ceb8f8a8f989571411ec4a8200eba56..0b20678b622bcfc0df1bc2a009554693870c277e 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2ResponseMapper.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2ResponseMapper.java @@ -2,7 +2,6 @@ package de.ozgcloud.nachrichten.postfach.osiv2.transfer; import java.time.ZoneOffset; -import org.jsoup.Jsoup; import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.ReportingPolicy; diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageTestFactory.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageTestFactory.java index e51f5ef25d7e5cae8a4d4ded107828e3e6b45052..4df9e39e6b8f8c1e765256852bc0fece4ab783a7 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageTestFactory.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/factory/V1ReplyMessageTestFactory.java @@ -15,7 +15,7 @@ public class V1ReplyMessageTestFactory { Das ist das Multiline&<b>a</b><br><br/> Body"""; public static final String REPLY_BODY = """ - Das ist das Multiline&<b>a</b> + Das ist das Multiline&<b>a</b> Body"""; diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocumentTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocumentTest.java index c4a928abf75810ef29d5213a6bce9a0efa43d10e..205145c2937ee3e60d52eae2a0de0a32a0580e88 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocumentTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/Osi2HtmlDocumentTest.java @@ -4,84 +4,15 @@ import static org.assertj.core.api.AssertionsForInterfaceTypes.*; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; -import org.junit.jupiter.params.ParameterizedTest; -import org.junit.jupiter.params.provider.ValueSource; class Osi2HtmlDocumentTest { @DisplayName("should render anchor link") @Test void shouldRenderAnchorLink() { - var plainText = renderPlainText("<a href=\"https://www.example.com\">Example</a>"); + var plainText = renderPlainText("<a href=\"https://www.example.com\">Example<br></a><br/>text"); - assertThat("[Example](https://www.example.com)").isEqualTo(plainText); - } - - @DisplayName("should render h1 heading") - @Test - void shouldRenderH1Heading() { - var plainText = renderPlainText("<h1>Example</h1>"); - - assertThat(plainText).isEqualTo("# Example"); - } - - @DisplayName("should render h2 heading") - @Test - void shouldRenderH2Heading() { - var plainText = renderPlainText("<h2>Example</h2>"); - - assertThat(plainText).isEqualTo("## Example"); - } - - @DisplayName("should render h3 heading") - @Test - void shouldRenderH3Heading() { - var plainText = renderPlainText("<h3>Example</h3>"); - - assertThat(plainText ).isEqualTo("### Example"); - } - - - @DisplayName("should render italic") - @ParameterizedTest - @ValueSource(strings = { "<i>Example</i>", "<em>Example</em>" }) - void shouldRenderItalic(String italicExample) { - var plainText = renderPlainText(italicExample); - - assertThat(plainText).isEqualTo("_Example_"); - } - - @DisplayName("should render bold") - @ParameterizedTest - @ValueSource(strings = { "<b>Example</b>", "<strong>Example</strong>" }) - void shouldRenderBold(String boldExample) { - var plainText = renderPlainText(boldExample); - - assertThat(plainText).isEqualTo("__Example__"); - } - - @DisplayName("should render image") - @Test - void shouldRenderImage() { - var plainText = renderPlainText("<img src=\"https://www.example.com/image.jpg\" alt=\"Example\">"); - - assertThat(plainText).isEqualTo(""); - } - - @DisplayName("should render blockquote") - @Test - void shouldRenderBlockquote() { - var plainText = renderPlainText("<blockquote><p>Example</p>\n<p>Example2</p></blockquote>"); - - assertThat(plainText).isEqualTo("> Example Example2"); - } - - @DisplayName("should render html") - @Test - void shouldRenderHtml() { - var plainText = renderPlainText("<p>Example😶</p><br/><p>Example2</p><b>"); - - assertThat(plainText).isEqualTo("Example\uD83D\uDE36\nExample2____"); + assertThat("<a href=\"https://www.example.com\">Example\n</a>\ntext").isEqualTo(plainText); } private String renderPlainText(String html) {