diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataTestFactory.java index f051953be4c4f0639765059ab839c37b6d597751..e496826bf677bb6bd3a9202f54095ce4a5140e75 100644 --- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataTestFactory.java +++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormDataTestFactory.java @@ -61,7 +61,6 @@ public class FormDataTestFactory { return FormData.builder() .header(FormHeaderTestFactory.create()) .antragsteller(AntragstellerTestFactory.create()) - .zustaendigeStelles(List.of(ZustaendigeStelleTestFactory.create())) .formData(Map.of( SIMPLE_VALUE_KEY, SIMPLE_VALUE, SUBFORM_KEY, SUBFORM_VALUE, diff --git a/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EnterpriseEntryITCase.java b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EnterpriseEntryITCase.java index 7d90ccc779b105a4667b1ad1f568fa83d98d2baa..2982a7a881fd716d3c7dec518a6053786bbf00d8 100644 --- a/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EnterpriseEntryITCase.java +++ b/enterprise-adapter/src/test/java/de/ozgcloud/eingang/enterprise/entry/EnterpriseEntryITCase.java @@ -6,8 +6,6 @@ import static org.mockito.Mockito.*; import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.*; import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.*; -import java.util.List; - import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -44,11 +42,11 @@ class EnterpriseEntryITCase { @Test void shouldCallVorgangService() { - when(vorgangService.createVorgangs(any())).thenReturn(List.of(VORGANG_ID)); + when(vorgangService.createVorgang(any())).thenReturn(VORGANG_ID); doPostRequest(); - verify(vorgangService).createVorgangs(any()); + verify(vorgangService).createVorgang(any()); } @SneakyThrows @@ -67,7 +65,7 @@ class EnterpriseEntryITCase { @BeforeEach void mock() { - when(vorgangService.createVorgangs(any())).thenReturn(List.of(VORGANG_ID)); + when(vorgangService.createVorgang(any())).thenReturn(VORGANG_ID); } @Test @@ -115,7 +113,7 @@ class EnterpriseEntryITCase { .file(buildJsonFileMock("representation", "jugendsozialarbeit_an_schulen-DM.json"))) .andExpect(status().is2xxSuccessful()); - verify(vorgangService).createVorgangs(formDataCaptor.capture()); + verify(vorgangService).createVorgang(formDataCaptor.capture()); return formDataCaptor.getValue(); } diff --git a/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java b/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java index ca9264cd8aee24c77e0b46ff92dc5c9ced1ade56..91d203b2fd562200dc9f9df7990e63d2dadaac99 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java @@ -40,12 +40,12 @@ public class VorgangService { private final VorgangRemoteService remoteService; - public List<String> createVorgangs(FormData formData) { + public String createVorgang(FormData formData) { var preparedFormData = preserveConsistency(formData); var organisationseinheitIds = getOrganisationsEinheitIds(formData); return organisationseinheitIds.isEmpty() - ? List.of(createVorgangOnMissingZustaendigeStelle(preparedFormData)) - : createMultipleVorgangs(preparedFormData, organisationseinheitIds); + ? createVorgangOnMissingZustaendigeStelle(preparedFormData) + : createMultipleVorgangs(preparedFormData, organisationseinheitIds).getFirst(); } String createVorgangOnMissingZustaendigeStelle(FormData formData) { diff --git a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperITCase.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperITCase.java index 1ddf53694607b896d65fe2a12d67afb9103ff658..fbb17f294ffbe8a3e51012c16422c73334c12f1e 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperITCase.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperITCase.java @@ -37,6 +37,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import de.ozgcloud.eingang.common.formdata.AntragstellerTestFactory; +import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory; @@ -49,6 +50,15 @@ class GrpcEingangMapperITCase { @Autowired private GrpcEingangMapper grpcEingangMapper; + private FormData inputFormData; + + @BeforeEach + void mock() { + inputFormData = FormDataTestFactory.createBuilder() + .zustaendigeStelle(ZustaendigeStelleTestFactory.create()) + .build(); + } + @DisplayName("Mapped GrpcEingang") @Nested class TestToEingang { @@ -59,8 +69,8 @@ class GrpcEingangMapperITCase { @Test void antragstellerShouldBeMapped() { - - var antragSteller = grpcEingangMapper.toEingang(FormDataTestFactory.create(), Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)).getAntragsteller(); + var antragSteller = grpcEingangMapper.toEingang(inputFormData, + Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)).getAntragsteller(); assertThat(antragSteller.getPostfachId()).isEqualTo(AntragstellerTestFactory.POSTFACH_ID); assertThat(antragSteller.getVorname()).isEqualTo(AntragstellerTestFactory.VORNAME); @@ -69,8 +79,8 @@ class GrpcEingangMapperITCase { @Test void dataShouldBeMapped() { - - var antragsteller = grpcEingangMapper.toEingang(FormDataTestFactory.create(), Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)).getAntragsteller(); + var antragsteller = grpcEingangMapper.toEingang(inputFormData, + Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)).getAntragsteller(); assertThat(antragsteller.getOtherData().getFieldList()).hasSize(1); assertThat(antragsteller.getOtherData().getField(0).getName()).isEqualTo(AntragstellerTestFactory.GEBIET_BEZEICHNUNG_KEY); @@ -83,8 +93,10 @@ class GrpcEingangMapperITCase { class TestZustaendigeStelle { @Test void eingangShouldHaveZustaendigeStelle() { - var zustaendigeStelle = grpcEingangMapper.toEingang(FormDataTestFactory.create(), Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)).getZustaendigeStelle(); + var zustaendigeStelle = grpcEingangMapper.toEingang(inputFormData, Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)) + .getZustaendigeStelle(); + assertThat(zustaendigeStelle).isNotNull(); assertThat(zustaendigeStelle.getOrganisationseinheitenId()).isEqualTo(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); assertThat(zustaendigeStelle.getEmail()).isEqualTo(ZustaendigeStelleTestFactory.EMAIL); } @@ -92,8 +104,9 @@ class GrpcEingangMapperITCase { @DisplayName("should map empty organisationeinheitId if missing") @Test void shouldMapEmptyOrganisationeinheitIdIfMissing() { - var zustaendigeStelle = grpcEingangMapper.toEingang(FormDataTestFactory.create(), Optional.empty()).getZustaendigeStelle(); + var zustaendigeStelle = grpcEingangMapper.toEingang(inputFormData, Optional.empty()).getZustaendigeStelle(); + assertThat(zustaendigeStelle).isNotNull(); assertThat(zustaendigeStelle.getOrganisationseinheitenId()).isEmpty(); } } @@ -107,7 +120,7 @@ class GrpcEingangMapperITCase { @BeforeEach void init() { - eingang = grpcEingangMapper.toEingang(FormDataTestFactory.create(), Optional.empty()); + eingang = grpcEingangMapper.toEingang(inputFormData, Optional.empty()); } @Test @@ -187,7 +200,8 @@ class GrpcEingangMapperITCase { void valueListShouldGenerateFields() { GrpcEingang eingang = grpcEingangMapper - .toEingang(FormDataTestFactory.createBuilder().formData(Map.of("key", List.of("value1", "value2"))).build(), Optional.empty()); + .toEingang(FormDataTestFactory.createBuilder().formData(Map.of("key", List.of("value1", "value2"))).build(), + Optional.empty()); assertThat(eingang.getFormData().getFieldCount()).isEqualTo(2); } @@ -197,7 +211,8 @@ class GrpcEingangMapperITCase { GrpcEingang eingang = grpcEingangMapper .toEingang(FormDataTestFactory.createBuilder() - .formData(Map.of("key-1", List.of(Map.of("sub_key", "value1"), Map.of("sub_key", "value2")))).build(), Optional.empty()); + .formData(Map.of("key-1", List.of(Map.of("sub_key", "value1"), Map.of("sub_key", "value2")))).build(), + Optional.empty()); assertThat(eingang.getFormData().getFormCount()).isEqualTo(2); assertThat(eingang.getFormData().getForm(0).getFieldCount()).isEqualTo(1); diff --git a/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java b/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java index c25e940c72f3960c24137a48911fec615f85042d..bb1294f2bad530b55eb9dafb45b5dc86dac05306 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java @@ -57,58 +57,107 @@ class VorgangServiceTest { @Mock private VorgangRemoteService remoteService; - private static final String VORGANG_ID_2 = "vorgangId2"; private static final String ORGANISATIONSEINHEIT_ID_2 = "08150816"; - public static final List<String> ORGANISATIONSEINHEIT_IDS = List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID, - ORGANISATIONSEINHEIT_ID_2); - - private FormData formData; - private FormData preservedFormData; - - @BeforeEach - void setup() { - formData = FormDataTestFactory.create(); - preservedFormData = FormDataTestFactory.createBuilder() - .zustaendigeStelle(ZustaendigeStelleTestFactory.createBuilder() - .organisationseinheitenId(ORGANISATIONSEINHEIT_ID_2) - .build()) - .build(); - } - - @DisplayName("Create vorgangs") + @DisplayName("Create vorgang") @Nested class TestCreateVorgangs { + private FormData formData; + private FormData preservedFormData; @BeforeEach - void mockEingangMapper() { - doReturn(preservedFormData).when(service).preserveConsistency(formData); + void setup() { + formData = FormDataTestFactory.create(); + preservedFormData = FormDataTestFactory.createBuilder() + .zustaendigeStelle(ZustaendigeStelleTestFactory.createBuilder() + .organisationseinheitenId(ORGANISATIONSEINHEIT_ID_2) + .build()) + .build(); + doReturn(preservedFormData).when(service).preserveConsistency(any()); + } + + @DisplayName("should call preserve consistency") + @Test + void shouldCallPreserveConsistency() { + mockOrganisationseinheitId(); + + createVorgang(); + + verify(service).preserveConsistency(eq(formData)); + } + + @DisplayName("should call get organisationseinheit ids") + @Test + void shouldCallGetOrganisationseinheitIds() { + mockOrganisationseinheitId(); + + createVorgang(); + + verify(service).getOrganisationsEinheitIds(eq(formData)); + } + + @DisplayName("should call create multiple vorgangs") + @Test + void shouldCallCreateMultipleVorgangs() { + var organisationseinheitIds = List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID, ORGANISATIONSEINHEIT_ID_2); + mockOrganisationseinheitIds(organisationseinheitIds); + + createVorgang(); + + verify(service).createMultipleVorgangs( + eq(preservedFormData), + eq(organisationseinheitIds)); + } + + @DisplayName("should return first vorgang id with multiple organisationseinheits") + @Test + void shouldReturnFirstVorgangIdWithMultipleOrganisationseinheits() { + var organisationseinheitIds = List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID, ORGANISATIONSEINHEIT_ID_2); + mockOrganisationseinheitIds(organisationseinheitIds); + + var vorgangIds = createVorgang(); + + assertThat(vorgangIds).isEqualTo(VORGANG_ID); + } + + private void mockOrganisationseinheitId() { + doReturn(List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)).when(service).getOrganisationsEinheitIds(any()); + doReturn(List.of(VORGANG_ID)).when(service).createMultipleVorgangs(any(), any()); } - @DisplayName("should return multiple vorgang ids for each organisationseinheit") + private void mockOrganisationseinheitIds(List<String> organisationseinheitIds) { + doReturn(organisationseinheitIds).when(service) + .getOrganisationsEinheitIds(any()); + doReturn(List.of(VORGANG_ID, "otherId")).when(service).createMultipleVorgangs(any(), any()); + } + + @DisplayName("should call create vorgang on missing zustaendige stelle if organisationseinheit is missing") @Test - void shouldReturnMultipleVorgangIdsForEachOrganisationseinheit() { - doReturn(ORGANISATIONSEINHEIT_IDS).when(service).getOrganisationsEinheitIds(formData); - doReturn(List.of(VORGANG_ID, VORGANG_ID_2)).when(service).createMultipleVorgangs(preservedFormData, ORGANISATIONSEINHEIT_IDS); + void shouldCallCreateVorgangOnMissingZustaendigeStelleIfOrganisationseinheitIsMissing() { + mockMissingOrganisationseinheitIds(); - var vorgangIds = createVorgangs(); + createVorgang(); - assertThat(vorgangIds).containsExactly(VORGANG_ID, VORGANG_ID_2); + verify(service).createVorgangOnMissingZustaendigeStelle(eq(preservedFormData)); } @DisplayName("should return single vorgang id if organisationseinheit is missing") @Test void shouldReturnSingleVorgangIdIfOrganisationseinheitIsMissing() { - doReturn(emptyList()).when(service).getOrganisationsEinheitIds(formData); - doReturn(VORGANG_ID).when(service).createVorgangOnMissingZustaendigeStelle(preservedFormData); + mockMissingOrganisationseinheitIds(); - var vorgangIds = createVorgangs(); + var firstVorgangId = createVorgang(); + + assertThat(firstVorgangId).isEqualTo(VORGANG_ID); + } - assertThat(vorgangIds).containsExactly(VORGANG_ID); + private void mockMissingOrganisationseinheitIds() { + doReturn(emptyList()).when(service).getOrganisationsEinheitIds(any()); + doReturn(VORGANG_ID).when(service).createVorgangOnMissingZustaendigeStelle(any()); } - private List<String> createVorgangs() { - return service.createVorgangs(formData); + private String createVorgang() { + return service.createVorgang(formData); } } @@ -118,11 +167,22 @@ class VorgangServiceTest { @Mock private FormData formData; + @BeforeEach + void mock() { + when(remoteService.createVorgang(any(), any())).thenReturn(VORGANG_ID); + } + + @DisplayName("should call create vorgang") + @Test + void shouldCallCreateVorgang() { + service.createVorgangOnMissingZustaendigeStelle(formData); + + verify(remoteService).createVorgang(formData, Optional.empty()); + } + @DisplayName("should return") @Test void shouldReturn() { - when(remoteService.createVorgang(formData, Optional.empty())).thenReturn(VORGANG_ID); - var vorgangId = service.createVorgangOnMissingZustaendigeStelle(formData); assertThat(vorgangId).isEqualTo(VORGANG_ID); @@ -132,24 +192,55 @@ class VorgangServiceTest { @DisplayName("create multiple vorgangs") @Nested class TestCreateMultipleVorgangs { + + private static final String VORGANG_ID_2 = "vorgangId2"; + private static final List<String> ORGANISATIONSEINHEIT_IDS = List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID, + ORGANISATIONSEINHEIT_ID_2); + @Mock private FormData formData; + @BeforeEach + void mock() { + when(remoteService.createVorgang(any(), any())) + .thenReturn(VORGANG_ID) + .thenReturn(VORGANG_ID_2); + } + + @DisplayName("should call create vorgang twice") + @Test + void shouldCallCreateVorgangTwice() { + service.createMultipleVorgangs(formData, ORGANISATIONSEINHEIT_IDS); + + verify(remoteService).createVorgang(formData, Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)); + verify(remoteService).createVorgang(formData, Optional.of(ORGANISATIONSEINHEIT_ID_2)); + } + @DisplayName("should return") @Test void shouldReturn() { - when(remoteService.createVorgang(formData, Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID))).thenReturn(VORGANG_ID); - when(remoteService.createVorgang(formData, Optional.of(ORGANISATIONSEINHEIT_ID_2))).thenReturn(VORGANG_ID_2); - var vorgangIds = service.createMultipleVorgangs(formData, ORGANISATIONSEINHEIT_IDS); - assertThat(vorgangIds).containsExactly(VORGANG_ID, VORGANG_ID_2); + assertThat(vorgangIds).containsExactlyInAnyOrder(VORGANG_ID, VORGANG_ID_2); } } @DisplayName("get organisationseinheit ids") @Nested class TestGetOrganisationseinheitIds { + + private FormData preservedFormData; + + @BeforeEach + void mock() { + preservedFormData = FormDataTestFactory.createBuilder() + .zustaendigeStelle(ZustaendigeStelleTestFactory.create()) + .zustaendigeStelle(ZustaendigeStelleTestFactory.createBuilder() + .organisationseinheitenId(ORGANISATIONSEINHEIT_ID_2) + .build()) + .build(); + } + @DisplayName("should return") @Test void shouldReturn() { diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java index dba7dca209d04d01b2a244572d522c98ed51fd0b..65c69a87ebc51b3313b8b4ec84d24f7d10170cf0 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/SemantikAdapter.java @@ -34,7 +34,6 @@ import de.ozgcloud.eingang.semantik.enginebased.EngineBasedSemantikAdapter; import de.ozgcloud.eingang.semantik.formbased.FormBasedSemantikAdapter; import lombok.extern.log4j.Log4j2; - @Log4j2 @Service public class SemantikAdapter { @@ -50,7 +49,7 @@ public class SemantikAdapter { formData = parseByEngineAdapter(formData); formData = parseByFormAdapter(formData); - return vorgangService.createVorgangs(formData).getFirst(); + return vorgangService.createVorgang(formData); } private FormData parseByEngineAdapter(FormData formData) { diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapper.java index 46c379d15fc6ffbe3b68841a47a8443721a6a8d1..4fff0ea90b799476bac4f0b3b3c39e4e8378935f 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapper.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapper.java @@ -74,7 +74,6 @@ class AfmZustaendigeStelleMapper implements AfmEngineBasedMapper { return formData.toBuilder() .formData(addMetaDataFlag(formData)) - .clearZustaendigeStelles() .zustaendigeStelle(zustaendigeStelle).build(); } diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapper.java index a140e306f7c2f10030a9ba12cb2132d86201bb87..a99ae318b214154314e9cf5752dcf13ce03d89fe 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapper.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapper.java @@ -46,7 +46,6 @@ public class ZustaendigeStelleMetadataMapper { .map(this::readZustaendigeStelleMetadata) .map(this::mapZustaendigeStelle) .map(zustaendigeStelle -> formData.toBuilder() - .clearZustaendigeStelles() .zustaendigeStelle(zustaendigeStelle).build()) .orElse(formData); } 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..82d0967071bcfcabad3b9a7803d0e23c77e69a7a 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; @@ -103,23 +103,30 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema return Optional.ofNullable((String) getFachnachricht(formData).get(KEY_ORGANISATIONS_EINHEIT_ID)) .map(orgaId -> addOrganisationsEinheitId(orgaId, formData.getZustaendigeStelles())) .map(zustStelle -> formData.toBuilder() - .clearZustaendigeStelles() .zustaendigeStelle(zustStelle) .build()) .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(); + logErrorForExistingZustaendigeStelle(); + zustaendigeStelleBuilder = zustaendigeStelle.toBuilder(); } return zustaendigeStelleBuilder.organisationseinheitenId(orgaId).build(); } + void logErrorForExistingZustaendigeStelle() { + LOG.error( + "Expect no existing ZustaendigeStelle for DFoerdermittel! Continuing with two ZustaendigeStelles, the original(s) and a copy of the first with overridden OrganisationsEinheitId."); + } + FormData addFormName(FormData formData) { return mapWithModifiedHeader(formData, headerBuilder -> headerBuilder.formName( getNonEmptyFachnachrichtValueByKey(formData, KEY_FORM_NAME) diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsZustaendigeStelleMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsZustaendigeStelleMapper.java index aa1f66b8deaf00d48a63efcbe284de82a88163fe..e58650aca3e1168d826bf4286be4b742873e5c5c 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsZustaendigeStelleMapper.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsZustaendigeStelleMapper.java @@ -40,7 +40,6 @@ class FormSolutionsZustaendigeStelleMapper implements FormSolutionsEngineBasedMa @Override public FormData parseFormData(FormData formData) { return formData.toBuilder() - .clearZustaendigeStelles() .zustaendigeStelle(buildZustaendigeStelle(formData)) .formData(removeProcessedData(formData)) .build(); diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java index 5adf04373769060992244c6f13d3f9689c26201b..ea63f2379a7391af25178495e00d3af611cb04e4 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java @@ -99,7 +99,7 @@ class SemantikAdapterTest { doReturn(List.of(engineAdapter)).when(adapter).getResponsibleEngineAdapters(formData); when(engineAdapter.parseFormData(any())).thenReturn(engineAdapterResponse); when(formAdapter.parseFormData(any())).thenReturn(formAdapterResponse); - when(vorgangService.createVorgangs(formAdapterResponse)).thenReturn(List.of(VORGANG_ID, "otherId")); + when(vorgangService.createVorgang(any())).thenReturn(VORGANG_ID); } @Test @@ -127,7 +127,7 @@ class SemantikAdapterTest { void shouldCallVorgangRemoteService() { adapter.processFormData(formData); - verify(vorgangService).createVorgangs(formAdapterResponse); + verify(vorgangService).createVorgang(formAdapterResponse); } @DisplayName("should return first vorgang id") diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapperTest.java index 1c580defa779a5dc55cb4b066ae1b4df4b96c7d1..e9abbeff9c2dc8b2af9f03c35006fe667cc3acbc 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapperTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmZustaendigeStelleMapperTest.java @@ -37,6 +37,7 @@ import org.mockito.Spy; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; +import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; class AfmZustaendigeStelleMapperTest { @@ -78,22 +79,27 @@ class AfmZustaendigeStelleMapperTest { void shouldMapOrganisationseinheitenId() { var parsedFormData = parseZustaendigeStelleData(formData); - assertThat(parsedFormData.getZustaendigeStelles().getFirst().getOrganisationseinheitenId()) - .isEqualTo(AfmZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); + assertThat(parsedFormData.getZustaendigeStelles()) + .extracting(ZustaendigeStelle::getOrganisationseinheitenId) + .containsExactly(AfmZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); } @Test void shouldMapBezeichnung() { var parsedFormData = parseZustaendigeStelleData(formData); - assertThat(parsedFormData.getZustaendigeStelles().getFirst().getBezeichnung()).isEqualTo(BEZEICHNUNG); + assertThat(parsedFormData.getZustaendigeStelles()) + .extracting(ZustaendigeStelle::getBezeichnung) + .containsExactly(BEZEICHNUNG); } @Test void shouldMapEmail() { var parsedFormData = parseZustaendigeStelleData(formData); - assertThat(parsedFormData.getZustaendigeStelles().getFirst().getEmail()).isEqualTo(AfmZustaendigeStelleTestFactory.EMAIL); + assertThat(parsedFormData.getZustaendigeStelles()) + .extracting(ZustaendigeStelle::getEmail) + .containsExactly(AfmZustaendigeStelleTestFactory.EMAIL); } @Test diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapperTest.java index e0c8c341b1f6df2d98794ece6945ec37ee453995..d2b0412c81d0830aa3080902ea8c91371fac7e17 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapperTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/ZustaendigeStelleMetadataMapperTest.java @@ -1,6 +1,5 @@ package de.ozgcloud.eingang.semantik.enginebased.afm; -import static java.util.Collections.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; @@ -45,7 +44,6 @@ class ZustaendigeStelleMetadataMapperTest { behoerdeMetadataFile = IncomingFileTestFactory.createBuilder().name(ZustaendigeStelleMetadataMapper.BEHOERDE_METADATA_FILE_NAME) .build(); formData = FormDataTestFactory.createBuilder() - .zustaendigeStelles(emptyList()) .representation(behoerdeMetadataFile).build(); } @@ -84,10 +82,8 @@ class ZustaendigeStelleMetadataMapperTest { @Nested class TestReadBehoerdeMetadata { - private File brokenFile; - } @Nested 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..1d078b3f189f4469c0a81e7f43da820f35b654fe 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,8 @@ 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.ZustaendigeStelle; +import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory; import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory; class DFoerdermittelEngineBasedSemantikAdapterTest { @@ -216,12 +218,51 @@ 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.create(); + + var formData = adapter.addOrganisationsEinheitId(inputFormData); + + assertThat(formData.getZustaendigeStelles()) + .extracting(ZustaendigeStelle::getOrganisationseinheitenId) + .containsExactly(ORGANISATIONS_EINHEIT_ID); + } + } + + @DisplayName("with one existing zustaendige stelle") + @Nested + class TestWithOneExistingZustaendigeStelle { + + private FormData inputFormData; + + @BeforeEach + void mock() { + inputFormData = DFoerdermittelFormDataTestFactory.createBuilder() + .zustaendigeStelle(ZustaendigeStelleTestFactory.create()) + .build(); + } + + @Test + void shouldHaveOrganisationsEinheitId() { + var formData = adapter.addOrganisationsEinheitId(inputFormData); + + assertThat(formData.getZustaendigeStelles()) + .extracting(ZustaendigeStelle::getOrganisationseinheitenId) + .containsExactly(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID, ORGANISATIONS_EINHEIT_ID); + } + + @DisplayName("should log error for existing zustaendige stelle") + @Test + void shouldLogErrorForExistingZustaendigeStelle() { + adapter.addOrganisationsEinheitId(inputFormData); + + verify(adapter).logErrorForExistingZustaendigeStelle(); + } } } 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))); } diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsEngineBasedAdapterITCase.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsEngineBasedAdapterITCase.java index 854931d9a9efb2357125d60dbc8caf448e259467..b0535b604a7120b70b0b8803c8003cc038cb9ae1 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsEngineBasedAdapterITCase.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsEngineBasedAdapterITCase.java @@ -50,6 +50,7 @@ import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; import de.ozgcloud.eingang.common.formdata.IncomingFileGroupTestFactory; import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; +import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; import de.ozgcloud.eingang.semantik.SemantikAdapter; import lombok.SneakyThrows; @@ -236,14 +237,16 @@ public class FormSolutionsEngineBasedAdapterITCase { void shouldMap() { var data = engineAdapter.parseFormData(formData); - assertThat(data.getZustaendigeStelles()).isNotNull(); + assertThat(data.getZustaendigeStelles()).isNotNull().isNotEmpty(); } @Test void shouldMapOrganistaionseinheitenId() { var data = engineAdapter.parseFormData(formData); - assertThat(data.getZustaendigeStelles().getFirst().getOrganisationseinheitenId()).isEqualTo("test"); + assertThat(data.getZustaendigeStelles()) + .extracting(ZustaendigeStelle::getOrganisationseinheitenId) + .containsExactly("test"); } } } diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsZustaendigeStelleMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsZustaendigeStelleMapperTest.java index d5dc287138426b71beeb3cbb56e267a0d2f88efe..bd31c4218074b8bc343d3327e10455885df7371a 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsZustaendigeStelleMapperTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsZustaendigeStelleMapperTest.java @@ -27,7 +27,6 @@ import static de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory.* import static de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsZustaendigeStelleMapper.*; import static org.assertj.core.api.Assertions.*; -import java.util.Collections; import java.util.Map; import org.junit.jupiter.api.BeforeEach; @@ -53,7 +52,6 @@ class FormSolutionsZustaendigeStelleMapperTest { @BeforeEach void setup() { formData = FormDataTestFactory.createBuilder() - .zustaendigeStelles(Collections.emptyList()) .formData(Map.of( FormDataTestFactory.SIMPLE_VALUE_KEY, FormDataTestFactory.SIMPLE_VALUE, FormSolutionsZustaendigeStelleMapper.ZUSTAENDIGE_STELLE, ORGANISATIONSEINHEIT_ID)) diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragITCase.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragITCase.java index c1ff751f7c17ff4a56869bdda7a7e842a491e2f0..1dc7a653cbff13129ba7339deebce6315cc5637b 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragITCase.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragITCase.java @@ -51,10 +51,9 @@ public class MantelantragITCase { @SpyBean SemantikAdapter semantikAdapter; - private FormData formData; - @Captor ArgumentCaptor<FormData> formDataCaptor; + private FormData formData; @Captor ArgumentCaptor<Optional<String>> oeIdCaptor;