From c97a2e7df2f30447699953d4f5a664a7fb16b0af Mon Sep 17 00:00:00 2001 From: Qadeer Khan Date: Thu, 2 Oct 2025 12:45:54 +0200 Subject: [PATCH 01/14] Oppstarter seksjonering av redigerbare vedtaksbrev. WIP - utvid test med flere seksjoner. Trekke ut html --- .../BrevXhtmlTilSeksjonKonverter.java | 17 ++++++ .../VedtaksbrevForh\303\245ndsvisInput.java" | 11 ++++ .../vedtak/VedtaksbrevTjeneste.java | 18 +++++- .../VedtaksbrevTjenesteEditorTest.java | 60 +++++++++++++++++++ .../formidling/VedtaksbrevTjenesteTest.java | 4 +- .../editor/VedtaksbrevEditorResponse.java | 18 ++++++ .../editor/VedtaksbrevSeksjon.java | 7 +++ .../editor/VedtaksbrevSeksjonType.java | 5 ++ .../formidling/FormidlingRestTjeneste.java | 9 ++- 9 files changed, 144 insertions(+), 5 deletions(-) create mode 100644 formidling/src/main/java/no/nav/ung/sak/formidling/BrevXhtmlTilSeksjonKonverter.java create mode 100644 "formidling/src/main/java/no/nav/ung/sak/formidling/vedtak/VedtaksbrevForh\303\245ndsvisInput.java" create mode 100644 formidling/src/test/java/no/nav/ung/sak/formidling/VedtaksbrevTjenesteEditorTest.java create mode 100644 kontrakt/src/main/java/no/nav/ung/sak/kontrakt/formidling/vedtaksbrev/editor/VedtaksbrevEditorResponse.java create mode 100644 kontrakt/src/main/java/no/nav/ung/sak/kontrakt/formidling/vedtaksbrev/editor/VedtaksbrevSeksjon.java create mode 100644 kontrakt/src/main/java/no/nav/ung/sak/kontrakt/formidling/vedtaksbrev/editor/VedtaksbrevSeksjonType.java diff --git a/formidling/src/main/java/no/nav/ung/sak/formidling/BrevXhtmlTilSeksjonKonverter.java b/formidling/src/main/java/no/nav/ung/sak/formidling/BrevXhtmlTilSeksjonKonverter.java new file mode 100644 index 0000000000..9ad5ba9b7c --- /dev/null +++ b/formidling/src/main/java/no/nav/ung/sak/formidling/BrevXhtmlTilSeksjonKonverter.java @@ -0,0 +1,17 @@ +package no.nav.ung.sak.formidling; + +import no.nav.ung.sak.kontrakt.formidling.vedtaksbrev.editor.VedtaksbrevSeksjon; +import no.nav.ung.sak.kontrakt.formidling.vedtaksbrev.editor.VedtaksbrevSeksjonType; + +import java.util.List; + +public class BrevXhtmlTilSeksjonKonverter { + public static List konverter(String html) { + return List.of( + new VedtaksbrevSeksjon(VedtaksbrevSeksjonType.STYLE, ""), new VedtaksbrevSeksjon(VedtaksbrevSeksjonType.STATISK, "Til XXXXXX"), new VedtaksbrevSeksjon(VedtaksbrevSeksjonType.REDIGERBAR, "

Overskrift

"), - new VedtaksbrevSeksjon(VedtaksbrevSeksjonType.STATISK, "

Du kan klage

") + new VedtaksbrevSeksjon(VedtaksbrevSeksjonType.STATISK, "

Du kan klage

") ); } } diff --git a/formidling/src/main/java/no/nav/ung/sak/formidling/vedtak/VedtaksbrevTjeneste.java b/formidling/src/main/java/no/nav/ung/sak/formidling/vedtak/VedtaksbrevTjeneste.java index 7b2234ef63..0d762aecc4 100644 --- a/formidling/src/main/java/no/nav/ung/sak/formidling/vedtak/VedtaksbrevTjeneste.java +++ b/formidling/src/main/java/no/nav/ung/sak/formidling/vedtak/VedtaksbrevTjeneste.java @@ -5,6 +5,7 @@ import jakarta.inject.Inject; import no.nav.fpsak.tidsserie.LocalDateTimeline; import no.nav.ung.kodeverk.KodeverdiSomObjekt; +import no.nav.ung.kodeverk.dokument.DokumentMalType; import no.nav.ung.sak.behandlingslager.behandling.repository.BehandlingRepository; import no.nav.ung.sak.behandlingslager.formidling.VedtaksbrevValgEntitet; import no.nav.ung.sak.behandlingslager.formidling.VedtaksbrevValgRepository; @@ -252,7 +253,6 @@ public void ryddVedTilbakeHopp(Long behandlingId) { } public VedtaksbrevEditorResponse editor(Long behandlingId, DokumentMalType dokumentMalType, boolean redigertVersjon) { - BehandlingVedtaksbrevResultat kjør = vedtaksbrevRegler.kjør(behandlingId); GenerertBrev forhåndsvis = forhåndsvis(new VedtaksbrevForhåndsvisInput( behandlingId, dokumentMalType, diff --git a/formidling/src/test/java/no/nav/ung/sak/formidling/VedtaksbrevTjenesteEditorTest.java b/formidling/src/test/java/no/nav/ung/sak/formidling/VedtaksbrevTjenesteEditorTest.java index fa079e8c70..612ffd4879 100644 --- a/formidling/src/test/java/no/nav/ung/sak/formidling/VedtaksbrevTjenesteEditorTest.java +++ b/formidling/src/test/java/no/nav/ung/sak/formidling/VedtaksbrevTjenesteEditorTest.java @@ -5,6 +5,7 @@ import no.nav.k9.felles.testutilities.cdi.CdiAwareExtension; import no.nav.ung.kodeverk.dokument.DokumentMalType; import no.nav.ung.sak.db.util.JpaExtension; +import no.nav.ung.sak.formidling.scenarioer.BrevScenarioerUtils; import no.nav.ung.sak.formidling.scenarioer.EndringInntektScenarioer; import no.nav.ung.sak.formidling.vedtak.VedtaksbrevTjeneste; import no.nav.ung.sak.kontrakt.formidling.vedtaksbrev.editor.VedtaksbrevEditorResponse; @@ -12,12 +13,18 @@ import no.nav.ung.sak.kontrakt.formidling.vedtaksbrev.editor.VedtaksbrevSeksjonType; import no.nav.ung.sak.test.util.UngTestRepositories; import no.nav.ung.sak.test.util.behandling.UngTestScenario; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.parser.Parser; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import java.time.LocalDate; import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; @@ -50,11 +57,56 @@ void skal_lage_editor_response() { VedtaksbrevEditorResponse response = vedtaksbrevTjeneste.editor(behandling.getId(), DokumentMalType.ENDRING_INNTEKT, false); List seksjoner = response.original(); assertThat(seksjoner).hasSize(4); - var stiler = seksjoner.stream().filter(s -> s.type() == VedtaksbrevSeksjonType.STYLE) - .findFirst().orElseThrow(); - assertThat(stiler.innhold()).contains(""), - new VedtaksbrevSeksjon(VedtaksbrevSeksjonType.STATISK, "Til XXXXXX"), - new VedtaksbrevSeksjon(VedtaksbrevSeksjonType.REDIGERBAR, "

Overskrift

"), - new VedtaksbrevSeksjon(VedtaksbrevSeksjonType.STATISK, "

Du kan klage

") - ); + List seksjoner = new ArrayList<>(); + + // Parse HTML med Jsoup + Document doc = Jsoup.parse(html); + + // Del 1: Style - Trekk ut style taggen + Element style = doc.selectFirst("style"); + if (style == null) { + throw new IllegalArgumentException("Fant ingen styleelement"); + } + + seksjoner.add(new VedtaksbrevSeksjon(VedtaksbrevSeksjonType.STYLE, style.outerHtml())); + + Element header = doc.selectFirst("header"); + if (header == null) { + throw new IllegalArgumentException("Fant ingen headerelement"); + } + seksjoner.add(new VedtaksbrevSeksjon(VedtaksbrevSeksjonType.STATISK, header.outerHtml())); + + Element editableDiv = doc.body().selectFirst("div[data-editable]"); + if (editableDiv == null) { + throw new IllegalArgumentException("Fant ingen
element"); + } + seksjoner.add(new VedtaksbrevSeksjon(VedtaksbrevSeksjonType.REDIGERBAR, editableDiv.html())); + + Elements footer = editableDiv.nextElementSiblings(); + seksjoner.add(new VedtaksbrevSeksjon(VedtaksbrevSeksjonType.STATISK, footer.outerHtml())); + + return seksjoner; } } diff --git a/formidling/src/test/java/no/nav/ung/sak/formidling/BrevXhtmlTilSeksjonKonverterTest.java b/formidling/src/test/java/no/nav/ung/sak/formidling/BrevXhtmlTilSeksjonKonverterTest.java new file mode 100644 index 0000000000..7fcbb50a4f --- /dev/null +++ b/formidling/src/test/java/no/nav/ung/sak/formidling/BrevXhtmlTilSeksjonKonverterTest.java @@ -0,0 +1,77 @@ +package no.nav.ung.sak.formidling; + +import no.nav.ung.sak.kontrakt.formidling.vedtaksbrev.editor.VedtaksbrevSeksjon; +import no.nav.ung.sak.kontrakt.formidling.vedtaksbrev.editor.VedtaksbrevSeksjonType; +import org.junit.jupiter.api.Test; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class BrevXhtmlTilSeksjonKonverterTest { + + @Test + void skal_dele_opp_html_i_fire_seksjoner() { + String html = """ + + + + + +
+
+

Til: Ung Testesen

+

Fødselsnummer: 01017000299

+
+
+
+
+

Redigerbar overskrift

+

Dette kan redigeres

+
+

Du kan klage

+

Klagefrist

+

Med vennlig Hilsen

+

Nav

+
+ + + """; + // Arrange + + // Act + List seksjoner = BrevXhtmlTilSeksjonKonverter.konverter(html); + + // Assert + assertThat(seksjoner).hasSize(4); + + // Del 1: Style + assertThat(seksjoner.get(0).type()).isEqualTo(VedtaksbrevSeksjonType.STYLE); + assertThat(seksjoner.get(0).innhold()).contains("