diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java index 8d9f07cf157a20eae9795b7a09bccb6ab5ccb868..bae3987d8513165869044dbe5f702ac13160b3df 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapter.java @@ -2,9 +2,9 @@ package de.ozgcloud.eingang.semantik.enginebased.dfoerdermittel; import java.io.IOException; import java.io.InputStream; +import java.util.Collection; import java.util.Collections; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -109,17 +109,26 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema .orElse(formData); } - private ZustaendigeStelle addOrganisationsEinheitId(String orgaId, List<ZustaendigeStelle> zustaendigeStelleList) { + private ZustaendigeStelle addOrganisationsEinheitId(String orgaId, Collection<ZustaendigeStelle> zustaendigeStelles) { ZustaendigeStelle.ZustaendigeStelleBuilder zustaendigeStelleBuilder; - if (Objects.isNull(zustaendigeStelleList) || zustaendigeStelleList.isEmpty()) { + if (Objects.isNull(zustaendigeStelles) || zustaendigeStelles.isEmpty()) { zustaendigeStelleBuilder = ZustaendigeStelle.builder(); } else { - zustaendigeStelleBuilder = zustaendigeStelleList.getFirst().toBuilder(); + var zustaendigeStellesIterator = zustaendigeStelles.iterator(); + var zustaendigeStelle = zustaendigeStellesIterator.next(); + if (zustaendigeStellesIterator.hasNext()) { + logErrorForMoreThanOneZustaendigeStelle(); + } + zustaendigeStelleBuilder = zustaendigeStelle.toBuilder(); } return zustaendigeStelleBuilder.organisationseinheitenId(orgaId).build(); } + void logErrorForMoreThanOneZustaendigeStelle() { + LOG.error("Expect at most one existing ZustaendigeStelle for DFoerdermittel. Continuing by using the first one."); + } + FormData addFormName(FormData formData) { return mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.formName( getNonEmptyFachnachrichtValueByKey(formData, KEY_FORM_NAME) diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java index 875c8c91fa584b34be8396795a54981e903048ba..698b665b58d345e68e98052b28ff257b387b8a52 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelEngineBasedSemantikAdapterTest.java @@ -26,6 +26,7 @@ import de.ozgcloud.eingang.common.formdata.IncomingFile; import de.ozgcloud.eingang.common.formdata.PostfachAddressTestFactory; import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory; import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; +import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory; import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory; class DFoerdermittelEngineBasedSemantikAdapterTest { @@ -216,12 +217,66 @@ class DFoerdermittelEngineBasedSemantikAdapterTest { @Nested class TestAddOrganisationsEinheitId { - @Test - void shouldHaveOrganisationsEinheitId() { - var formData = adapter.addOrganisationsEinheitId(DFoerdermittelFormDataTestFactory.create()); - var organisationseinheitenId = formData.getZustaendigeStelles().getFirst().getOrganisationseinheitenId(); - assertThat(organisationseinheitenId).isEqualTo(ORGANISATIONS_EINHEIT_ID); + @DisplayName("with no existing zustaendige stelles") + @Nested + class TestWithNoExistingZustaendigeStelles { + @Test + void shouldHaveOrganisationsEinheitId() { + var inputFormData = DFoerdermittelFormDataTestFactory.createBuilder() + .clearZustaendigeStelles() + .build(); + + var formData = adapter.addOrganisationsEinheitId(inputFormData); + + assertThat(formData.getZustaendigeStelles()) + .extracting("organisationseinheitenId") + .containsExactly(ORGANISATIONS_EINHEIT_ID); + } + } + + @DisplayName("with one existing zustaendige stelle") + @Nested + class TestWithOneExistingZustaendigeStelle { + @Test + void shouldHaveOrganisationsEinheitId() { + var formData = adapter.addOrganisationsEinheitId(DFoerdermittelFormDataTestFactory.create()); + + assertThat(formData.getZustaendigeStelles()) + .extracting("organisationseinheitenId") + .containsExactly(ORGANISATIONS_EINHEIT_ID); + } + } + + @DisplayName("with two existing zustaendige stelles") + @Nested + class TestWithTwoExistingZustaendigeStelles { + + private FormData inputFormData; + + @BeforeEach + void setup() { + inputFormData = DFoerdermittelFormDataTestFactory.createBuilder() + .zustaendigeStelle(ZustaendigeStelleTestFactory.create()) + .build(); + } + + @Test + void shouldHaveOrganisationsEinheitId() { + var formData = adapter.addOrganisationsEinheitId(inputFormData); + + assertThat(formData.getZustaendigeStelles()) + .extracting("organisationseinheitenId") + .containsExactly(ORGANISATIONS_EINHEIT_ID); + } + + @DisplayName("should log error for more than one zustaendige stelle") + @Test + void shouldLogErrorForMoreThanOneZustaendigeStelle() { + adapter.addOrganisationsEinheitId(inputFormData); + + verify(adapter).logErrorForMoreThanOneZustaendigeStelle(); + } } } diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelFormDataTestFactory.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelFormDataTestFactory.java index 8b8c9bf4103b13f085a7910361925a11e7b90297..7bd4cc6a52d36405595a47500be02c2919066c6f 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelFormDataTestFactory.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/dfoerdermittel/DFoerdermittelFormDataTestFactory.java @@ -8,6 +8,7 @@ import java.util.function.Predicate; import java.util.stream.IntStream; import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory; import lombok.Builder; @@ -35,7 +36,7 @@ class DFoerdermittelFormDataTestFactory { } static FormData.FormDataBuilder createBuilderWithFachnachricht(Fachnachricht fachnachricht) { - return FormData.builder() + return FormDataTestFactory.createBuilder() .header(FormHeaderTestFactory.create()) .formData(Map.of("Fachnachricht", createFachnachrichtMapWithFachnachricht(fachnachricht))); }