From e598f4ca90453ed15a9536b2b6cf6ab54a996631 Mon Sep 17 00:00:00 2001 From: OZG-Cloud Team <noreply@ozg-sh.de> Date: Wed, 20 Nov 2024 16:34:18 +0100 Subject: [PATCH] OZG-7077 implement comments from code review --- .../formcycle/FormDataHtmlCleaner.java | 6 +- .../formcycle/FormDataHtmlCleanerITCase.java | 89 +++++++++++++++++++ .../formcycle/FormDataHtmlCleanerTest.java | 72 +++------------ 3 files changed, 103 insertions(+), 64 deletions(-) create mode 100644 formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataHtmlCleanerITCase.java diff --git a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataHtmlCleaner.java b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataHtmlCleaner.java index 20047510..7ad15573 100644 --- a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataHtmlCleaner.java +++ b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataHtmlCleaner.java @@ -58,14 +58,14 @@ public class FormDataHtmlCleaner { return value; } - Object parseHtml(String html) { + String parseHtml(String html) { var outputSettings = new Document.OutputSettings(); // keep new lines outputSettings.prettyPrint(false); - var htmlText = Jsoup.clean(modifyInputHtml(html), "", Safelist.none(), outputSettings); + var htmlText = Jsoup.clean(replaceNewLines(html), "", Safelist.none(), outputSettings); return HtmlUtils.htmlUnescape(htmlText); } - String modifyInputHtml(String html) { + private String replaceNewLines(String html) { return html.replace("\\\\n", "\n"); } } diff --git a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataHtmlCleanerITCase.java b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataHtmlCleanerITCase.java new file mode 100644 index 00000000..8cfcd3e7 --- /dev/null +++ b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataHtmlCleanerITCase.java @@ -0,0 +1,89 @@ +/* + * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den + * Ministerpräsidenten des Landes Schleswig-Holstein + * Staatskanzlei + * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ +package de.ozgcloud.eingang.formcycle; + +import static org.assertj.core.api.Assertions.*; + +import java.util.Map; + +import org.junit.jupiter.api.Test; +import org.mockito.InjectMocks; +import org.mockito.Spy; + +import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; + +class FormDataHtmlCleanerITCase { + + @Spy + @InjectMocks + private FormDataHtmlCleaner cleaner; + + static final String KEY_LABEL = "label"; + static final String KEY_VALUE = "value"; + + static final Map<String, Object> FORM_DATA_MAP = Map.of("tf1", Map.of( + KEY_LABEL, "<p><em>Label</em></p>", + KEY_VALUE, "<i>Value</i>"), + "fs1", Map.of( + KEY_LABEL, "Key", + KEY_VALUE, Map.of( + "tf3", Map.of( + KEY_LABEL, "<p><s>Label</s></p>", + KEY_VALUE, "ein Text mit <html><body><h1>Hello</h1><body><html>")), + "tf4", Map.of( + KEY_LABEL, "<p><span style=\"background-color:#1abc9c;\">Wichtig</span></p>", + KEY_VALUE, "Text"), + "ed1", Map.of( + KEY_LABEL, + "<ol>\n\t<li><em><strong><u>ganz</u></strong></em></li>\n\t<li><span style=\"color:#e74c3c;" + + "\">bunt</span></li>\n</ol>", + KEY_VALUE, "TExt\nmit\n Leerzeichen\nund\n Umbrüchen" + ))); + + static final Map<String, Object> EXPECTED_MAP = Map.of("tf1", Map.of( + KEY_LABEL, "Label", + KEY_VALUE, "Value"), + "fs1", Map.of( + KEY_LABEL, "Key", + KEY_VALUE, Map.of( + "tf3", Map.of( + KEY_LABEL, "Label", + KEY_VALUE, "ein Text mit Hello")), + "tf4", Map.of( + KEY_LABEL, "Wichtig", + KEY_VALUE, "Text"), + "ed1", Map.of( + KEY_LABEL, + "\n\tganz\n\tbunt\n", + KEY_VALUE, "TExt\nmit\n Leerzeichen\nund\n Umbrüchen" + ))); + + @Test + void shouldCleanHtml() { + var result = cleaner.clean(FormDataTestFactory.createBuilder().formData(FORM_DATA_MAP).build()); + + assertThat(result.getFormData()).usingRecursiveComparison().isEqualTo(EXPECTED_MAP); + } + +} \ No newline at end of file diff --git a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataHtmlCleanerTest.java b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataHtmlCleanerTest.java index bdc3bdf2..ad121827 100644 --- a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataHtmlCleanerTest.java +++ b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataHtmlCleanerTest.java @@ -175,81 +175,31 @@ class FormDataHtmlCleanerTest { } @Nested - class TestHtmlCleaner { - - static final String KEY_LABEL = "label"; - static final String KEY_VALUE = "value"; - - static final Map<String, Object> FORM_DATA_MAP = Map.of("tf1", Map.of( - KEY_LABEL, "<p><em>Label</em></p>", - KEY_VALUE, "<i>Value</i>"), - "fs1", Map.of( - KEY_LABEL, "Key", - KEY_VALUE, Map.of( - "tf3", Map.of( - KEY_LABEL, "<p><s>Label</s></p>", - KEY_VALUE, "ein Text mit <html><body><h1>Hello</h1><body><html>")), - "tf4", Map.of( - KEY_LABEL, "<p><span style=\"background-color:#1abc9c;\">Wichtig</span></p>", - KEY_VALUE, "Text"), - "ed1", Map.of( - KEY_LABEL, - "<ol>\n\t<li><em><strong><u>ganz</u></strong></em></li>\n\t<li><span style=\"color:#e74c3c;" - + "\">bunt</span></li>\n</ol>", - KEY_VALUE, "TExt\nmit\n Leerzeichen\nund\n Umbrüchen" - ))); - - static final Map<String, Object> EXPECTED_MAP = Map.of("tf1", Map.of( - KEY_LABEL, "Label", - KEY_VALUE, "Value"), - "fs1", Map.of( - KEY_LABEL, "Key", - KEY_VALUE, Map.of( - "tf3", Map.of( - KEY_LABEL, "Label", - KEY_VALUE, "ein Text mit Hello")), - "tf4", Map.of( - KEY_LABEL, "Wichtig", - KEY_VALUE, "Text"), - "ed1", Map.of( - KEY_LABEL, - "\n\tganz\n\tbunt\n", - KEY_VALUE, "TExt\nmit\n Leerzeichen\nund\n Umbrüchen" - ))); + class TestParseHtml { @Test - void shouldCleanHtml() { - var result = cleaner.clean(FormData.builder().formData(FORM_DATA_MAP).build()); + void shouldParseHtml() { + var result = cleaner.parseHtml("<html><body><h1>Hello</h1><body><html>"); - assertThat(result.getFormData()).usingRecursiveComparison().isEqualTo(EXPECTED_MAP); + assertThat(result).isEqualTo("Hello"); } @DisplayName("should decode german characters") @ParameterizedTest(name = "{0} => {2}") - @CsvSource({ "Ä, Ä-Wert, Ä, Ä-Wert", - "Ö, Ö-Wert, Ö, Ö-Wert", - "Ü, Ü-Wert, Ü, Ü-Wert", - "ß, Label mit ß, ß, Label mit ß" }) - void shouldDecodeUmlaut(String srcLabel, String srcValue, String expectedLabel, String expectedValue) { - var sourceMap = Map.<String, Object>of("tf1", Map.of(KEY_LABEL, srcLabel, KEY_VALUE, srcValue)); - var expectedMap = Map.of("tf1", Map.of(KEY_LABEL, expectedLabel, KEY_VALUE, expectedValue)); + @CsvSource({ "Ä, Ä", "Ö, Ö", "Ü, Ü", "ß, ß" }) + void shouldDecodeUmlaut(String srcValue, String expectedValue) { + var result = cleaner.parseHtml(srcValue); - var result = cleaner.cleanFormData(sourceMap); - - assertThat(result).isEqualTo(expectedMap); + assertThat(result).isEqualTo(expectedValue); } @DisplayName("should decode special characters") @ParameterizedTest(name = "{0} => {1}") - @CsvSource(value = { "&, &", - "<, <,", - ">, >", - "", \"", - "', '" }, quoteCharacter = '`') + @CsvSource(value = { "&, &", "<, <,", ">, >", "", \"", "', '" }, quoteCharacter = '`') void shouldDecodeAmpersand(String src, String expected) { - var result = cleaner.cleanFormData(Map.of(KEY_LABEL, src)); + var result = cleaner.parseHtml(src); - assertThat(result).isEqualTo(Map.of(KEY_LABEL, expected)); + assertThat(result).isEqualTo(expected); } } } \ No newline at end of file -- GitLab