diff --git a/common/src/main/java/de/ozgcloud/eingang/common/formdata/FormData.java b/common/src/main/java/de/ozgcloud/eingang/common/formdata/FormData.java index 474be54dfd8c56eb60f5d9b2fb535742273f0fe8..3296ccb5e34cf25e47720371c9b32fa7881aeeab 100644 --- a/common/src/main/java/de/ozgcloud/eingang/common/formdata/FormData.java +++ b/common/src/main/java/de/ozgcloud/eingang/common/formdata/FormData.java @@ -48,7 +48,8 @@ public class FormData { @Builder.Default private FormHeader header = FormHeader.builder().build(); - private ZustaendigeStelle zustaendigeStelle; + @Singular + private List<ZustaendigeStelle> zustaendigeStelles; @ToString.Exclude private Antragsteller antragsteller; @ToString.Exclude 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 05bdcffff581a6e8ce7e4f56fe5d86cb53054bb0..8d23e2cb03b702eb1fb9fc3869e5eb750f72cd84 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 @@ -51,6 +51,8 @@ public class FormDataTestFactory { public static final String ATTACHMENT_GROUP_2 = "FileGroup2"; + public static final String VORGANG_ID = "vorgangId"; + public static FormData create() { return createBuilder().build(); } 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 86d4309910b98191d19bfc9a33b8b97fed0f33c9..edde8e256ad108a7458f4325b7444c4a585f776d 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 @@ -64,6 +64,7 @@ class EnterpriseEntryITCase { assertThat(formData).isNotNull(); } + @Test void shouldHaveNoOfRepresentations() { var formData = doPostRequest(); diff --git a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleFormDataMapperTest.java b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleFormDataMapperTest.java index feb214cccd2dca6533c39109f6f85619be567304..077a22039a5d9da064404d03e2ec4c24b6584915 100644 --- a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleFormDataMapperTest.java +++ b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleFormDataMapperTest.java @@ -32,6 +32,7 @@ import org.mockito.InjectMocks; import org.mockito.Spy; import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory; +import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; import de.ozgcloud.vorgang.common.grpc.GrpcFormDataMapper; class FormCycleFormDataMapperTest { @@ -59,7 +60,9 @@ class FormCycleFormDataMapperTest { void shouldMapZustaendigeStelle() { var mapped = mapper.toFormData(FormCycleFormDataTestFactory.create()); - assertThat(mapped.getZustaendigeStelle().getOrganisationseinheitenId()).isEqualTo(FormCycleFormHeaderTestFactory.ORGANISATIONSEINHEIT_ID); + assertThat(mapped.getZustaendigeStelles()) + .extracting(ZustaendigeStelle::getOrganisationseinheitenId) + .containsExactly(FormCycleFormHeaderTestFactory.ORGANISATIONSEINHEIT_ID); } } diff --git a/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java b/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java index 74607f148396fb856dd86a4716f5f67f0d2f4019..c69b8397708151fa0c71aec866f6c2a5aeaceb4f 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java @@ -23,6 +23,7 @@ */ package de.ozgcloud.eingang.router; +import java.util.Optional; import java.util.UUID; import org.mapstruct.CollectionMappingStrategy; @@ -32,8 +33,6 @@ import org.mapstruct.NullValueCheckStrategy; import org.mapstruct.NullValuePropertyMappingStrategy; import org.mapstruct.ReportingPolicy; -import com.google.protobuf.ByteString; - import de.ozgcloud.eingang.common.formdata.Antragsteller; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; @@ -52,17 +51,17 @@ import de.ozgcloud.vorgang.vorgang.GrpcZustaendigeStelle; uses = { GrpcFormDataMapper.class, ServiceKontoMapper.class }) public interface GrpcEingangMapper { - @Mapping(source = "antragsteller.data", target = "antragsteller.otherData") - @Mapping(source = "attachments", target = "attachmentsList") - @Mapping(source = "representations", target = "representationsList") - GrpcEingang toEingang(FormData formData); - - default ByteString byteArrayToByteString(byte[] byteArray) { - if (byteArray == null) { - return null; - } + @Mapping(target = "antragsteller.otherData", source = "formData.antragsteller.data") + @Mapping(target = "attachmentsList", source = "formData.attachments") + @Mapping(target = "representationsList", source = "formData.representations") + @Mapping(target = "zustaendigeStelle", expression = "java( toZustaendigeStelle(getZustaendigeStelle(formData, organisationsEinheitenId)) )") + GrpcEingang toEingang(FormData formData, Optional<String> organisationsEinheitenId); - return ByteString.copyFrom(byteArray); + default ZustaendigeStelle getZustaendigeStelle(FormData formData, Optional<String> organisationsEinheitenId) { + return organisationsEinheitenId.flatMap(oeId -> formData.getZustaendigeStelles().stream() + .filter(zustaendigeStelle -> zustaendigeStelle.getOrganisationseinheitenId().equals(oeId)) + .findFirst()) + .orElseGet(() -> ZustaendigeStelle.builder().build()); } @Mapping(source = "files", target = "filesList") diff --git a/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java b/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java index 2a50225927053555819bbd1ac937ed0598088dd4..5d1293168a6770fd9a8afa0e863afd08cd4750ca 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java @@ -75,7 +75,7 @@ public class VorgangRemoteService { logConnection(organisationsEinheitenId, vorgangServiceStub.get()); try { - return createVorgang(formData, grpcEingangMapper.toEingang(formData), vorgangServiceStub.get(), binaryFileServiceStub.get()); + return createVorgang(formData, grpcEingangMapper.toEingang(formData, organisationsEinheitenId), vorgangServiceStub.get(), binaryFileServiceStub.get()); } finally { finishStubConnections(List.of(vorgangServiceStub, binaryFileServiceStub)); } 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 de97243af9a356da303522e4555b1509b540dc16..22abba8cb58224ab8a14a838630ed6698c096137 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java @@ -41,13 +41,29 @@ public class VorgangService { private final VorgangRemoteService remoteService; public String createVorgang(FormData formData) { - var preparedFormData = preserveConsistency(formData); + return createVorgangForOrganisationsEinheitIds(getOrganisationsEinheitIds(formData), preserveConsistency(formData)); + } + + String createVorgangForOrganisationsEinheitIds(List<String> organisationsEinheitIds, FormData preparedFormData) { + return organisationsEinheitIds.isEmpty() + ? createVorgangOnMissingZustaendigeStelle(preparedFormData) + : createMultipleVorgangs(preparedFormData, organisationsEinheitIds).getFirst(); + } + + String createVorgangOnMissingZustaendigeStelle(FormData formData) { + return remoteService.createVorgang(formData, Optional.empty()); + } - return remoteService.createVorgang(preparedFormData, getOrganisationsEinheitId(preparedFormData)); + List<String> createMultipleVorgangs(FormData formData, List<String> organisationseinheitIds) { + return organisationseinheitIds.stream() + .map(oeId -> remoteService.createVorgang(formData, Optional.of(oeId))) + .toList(); } - private Optional<String> getOrganisationsEinheitId(FormData formData) { - return Optional.ofNullable(formData.getZustaendigeStelle()).map(ZustaendigeStelle::getOrganisationseinheitenId); + List<String> getOrganisationsEinheitIds(FormData formData) { + return formData.getZustaendigeStelles().stream() + .map(ZustaendigeStelle::getOrganisationseinheitenId) + .toList(); } FormData preserveConsistency(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 4150f6cef6d0574b78c6db89d9b61c068cd620e2..f3c15dea9839888f9895a6e440489ee6f09b9b8e 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperITCase.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperITCase.java @@ -27,6 +27,7 @@ import static org.assertj.core.api.Assertions.*; import java.util.List; import java.util.Map; +import java.util.Optional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -58,8 +59,7 @@ class GrpcEingangMapperITCase { @Test void antragstellerShouldBeMapped() { - - var antragSteller = grpcEingangMapper.toEingang(FormDataTestFactory.create()).getAntragsteller(); + var antragSteller = grpcEingangMapper.toEingang(FormDataTestFactory.create(), Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)).getAntragsteller(); assertThat(antragSteller.getPostfachId()).isEqualTo(AntragstellerTestFactory.POSTFACH_ID); assertThat(antragSteller.getVorname()).isEqualTo(AntragstellerTestFactory.VORNAME); @@ -68,8 +68,7 @@ class GrpcEingangMapperITCase { @Test void dataShouldBeMapped() { - - var antragsteller = grpcEingangMapper.toEingang(FormDataTestFactory.create()).getAntragsteller(); + var antragsteller = grpcEingangMapper.toEingang(FormDataTestFactory.create(), Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)).getAntragsteller(); assertThat(antragsteller.getOtherData().getFieldList()).hasSize(1); assertThat(antragsteller.getOtherData().getField(0).getName()).isEqualTo(AntragstellerTestFactory.GEBIET_BEZEICHNUNG_KEY); @@ -82,13 +81,21 @@ class GrpcEingangMapperITCase { class TestZustaendigeStelle { @Test void eingangShouldHaveZustaendigeStelle() { - - var zustaendigeStelle = grpcEingangMapper.toEingang(FormDataTestFactory.create()).getZustaendigeStelle(); + var zustaendigeStelle = grpcEingangMapper.toEingang(FormDataTestFactory.create(), Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)).getZustaendigeStelle(); assertThat(zustaendigeStelle).isNotNull(); assertThat(zustaendigeStelle.getOrganisationseinheitenId()).isEqualTo(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); assertThat(zustaendigeStelle.getEmail()).isEqualTo(ZustaendigeStelleTestFactory.EMAIL); } + + @DisplayName("should map empty organisationeinheitId if missing") + @Test + void shouldMapEmptyOrganisationeinheitIdIfMissing() { + var zustaendigeStelle = grpcEingangMapper.toEingang(FormDataTestFactory.create(), Optional.empty()).getZustaendigeStelle(); + + assertThat(zustaendigeStelle).isNotNull(); + assertThat(zustaendigeStelle.getOrganisationseinheitenId()).isEmpty(); + } } @Nested @@ -100,7 +107,7 @@ class GrpcEingangMapperITCase { @BeforeEach void init() { - eingang = grpcEingangMapper.toEingang(FormDataTestFactory.create()); + eingang = grpcEingangMapper.toEingang(FormDataTestFactory.create(), Optional.empty()); } @Test @@ -159,7 +166,7 @@ class GrpcEingangMapperITCase { @Test void testRepresentations() { - GrpcEingang eingang = grpcEingangMapper.toEingang(FormDataTestFactory.create()); + GrpcEingang eingang = grpcEingangMapper.toEingang(FormDataTestFactory.create(), Optional.empty()); assertThat(eingang.getRepresentationsCount()).isEqualTo(1); @@ -180,7 +187,7 @@ class GrpcEingangMapperITCase { void valueListShouldGenerateFields() { GrpcEingang eingang = grpcEingangMapper - .toEingang(FormDataTestFactory.createBuilder().formData(Map.of("key", List.of("value1", "value2"))).build()); + .toEingang(FormDataTestFactory.createBuilder().formData(Map.of("key", List.of("value1", "value2"))).build(), Optional.empty()); assertThat(eingang.getFormData().getFieldCount()).isEqualTo(2); } @@ -190,7 +197,7 @@ 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()); + .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/GrpcEingangMapperTest.java b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java index 3909125566b6f297d16633590aa4dcc05644611b..df68e82b76e4175a69dde4153eceb108cde21872 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/GrpcEingangMapperTest.java @@ -27,6 +27,8 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; +import java.util.Optional; + import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -212,7 +214,7 @@ class GrpcEingangMapperTest { } private GrpcEingang toEingang() { - return mapper.toEingang(FormDataTestFactory.create()); + return mapper.toEingang(FormDataTestFactory.create(), Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)); } } } \ No newline at end of file diff --git a/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java b/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java index 993c973ca2f71c645734db5ab5039151b9a0543f..1a8161b18bb9c02dce8ec7ee65ccd05f16707345 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java @@ -117,7 +117,7 @@ class VorgangRemoteServiceTest { when(resolver.resolveBinaryFileServiceStubByOrganisationsEinheitId(any())).thenReturn(managableBinaryFileServiceStub); when(managableBinaryFileServiceStub.get()).thenReturn(binaryFileServiceStub); - when(eingangMapper.toEingang(any())).thenReturn(eingang); + when(eingangMapper.toEingang(any(), any())).thenReturn(eingang); doNothing().when(remoteService).logConnection(any(), any()); doNothing().when(remoteService).finishStubConnections(any()); @@ -159,7 +159,7 @@ class VorgangRemoteServiceTest { void shouldCallEingangMapper() { createVorgang(); - verify(eingangMapper).toEingang(formData); + verify(eingangMapper).toEingang(formData, organisationsEinheitId); } @Test 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 2db3d04b7e3ad7bdb2240c7a1a66d8b39cbb4ca8..a78d71e8cdf178413195e438ec4d4820d62e1707 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java @@ -23,10 +23,13 @@ */ package de.ozgcloud.eingang.router; +import static de.ozgcloud.eingang.common.formdata.FormDataTestFactory.*; +import static java.util.Collections.*; import static org.assertj.core.api.Assertions.*; import static org.junit.jupiter.api.Assertions.*; import static org.mockito.Mockito.*; +import java.util.List; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; @@ -51,8 +54,6 @@ class VorgangServiceTest { @InjectMocks private VorgangService service; @Mock - private GrpcEingangMapper eingangMapper; - @Mock private VorgangRemoteService remoteService; @DisplayName("Create vorgang") @@ -61,10 +62,13 @@ class VorgangServiceTest { private final FormData formData = FormDataTestFactory.create(); private final FormData preservedFormData = FormDataTestFactory.create(); + private final List<String> organisationseinheitIds = List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); @BeforeEach void mockEingangMapper() { doReturn(preservedFormData).when(service).preserveConsistency(formData); + doReturn(organisationseinheitIds).when(service).getOrganisationsEinheitIds(any()); + doReturn(VORGANG_ID).when(service).createVorgangForOrganisationsEinheitIds(organisationseinheitIds, preservedFormData); } @Test @@ -74,15 +78,147 @@ class VorgangServiceTest { verify(service).preserveConsistency(formData); } + @DisplayName("should call create vorgang for organisationseinheitIds") @Test - void shouldCallRemoteService() { + void shouldCallCreateVorgangForOrganisationseinheitIds() { callCreateVorgang(); - verify(remoteService).createVorgang(preservedFormData, Optional.ofNullable(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)); + verify(service).createVorgangForOrganisationsEinheitIds(organisationseinheitIds, preservedFormData); + } + + @DisplayName("should call get organisationseinheit ids") + @Test + void shouldCallGetOrganisationseinheitIds() { + callCreateVorgang(); + + verify(service).getOrganisationsEinheitIds(formData); + } + + @DisplayName("should return vorgang id") + @Test + void shouldReturn() { + var vorgangId = callCreateVorgang(); + + assertThat(vorgangId).isEqualTo(VORGANG_ID); + } + + private String callCreateVorgang() { + return service.createVorgang(formData); + } + } + + @DisplayName("create vorgang for organisationsEinheitIds") + @Nested + class TestCreateVorgangForOrganisationsEinheitIds { + private final FormData preservedFormData = FormDataTestFactory.create(); + private final List<String> organisationseinheitIds = List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); + + @DisplayName("should call create multiple vorgangs") + @Test + void shouldCallCreateMultipleVorgangs() { + service.createVorgangForOrganisationsEinheitIds(organisationseinheitIds, preservedFormData); + + verify(service).createMultipleVorgangs(preservedFormData, organisationseinheitIds); + } + + @DisplayName("should return first vorgang id with multiple organisationseinheits") + @Test + void shouldReturnFirstVorgangIdWithMultipleOrganisationseinheits() { + doReturn(List.of(VORGANG_ID)).when(service).createMultipleVorgangs(any(), any()); + + var vorgangId = service.createVorgangForOrganisationsEinheitIds(organisationseinheitIds, preservedFormData); + + assertThat(vorgangId).isEqualTo(VORGANG_ID); + } + + @DisplayName("should call create vorgang on missing zustaendige stelle if organisationseinheit is missing") + @Test + void shouldCallCreateVorgangOnMissingZustaendigeStelleIfOrganisationseinheitIsMissing() { + service.createVorgangForOrganisationsEinheitIds(emptyList(), preservedFormData); + + verify(service).createVorgangOnMissingZustaendigeStelle(eq(preservedFormData)); + } + + @DisplayName("should return single vorgang id if organisationseinheit is missing") + @Test + void shouldReturnSingleVorgangIdIfOrganisationseinheitIsMissing() { + doReturn(VORGANG_ID).when(service).createVorgangOnMissingZustaendigeStelle(any()); + + var firstVorgangId = service.createVorgangForOrganisationsEinheitIds(emptyList(), preservedFormData); + + assertThat(firstVorgangId).isEqualTo(VORGANG_ID); + } + + } + + @DisplayName("create vorgang on missing zustaendige stelle") + @Nested + class TestVorgangOnMissingZustaendigeStelle { + @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() { + var vorgangId = service.createVorgangOnMissingZustaendigeStelle(formData); + + assertThat(vorgangId).isEqualTo(VORGANG_ID); } + } + + @DisplayName("create multiple vorgangs") + @Nested + class TestCreateMultipleVorgangs { + + @Mock + private FormData formData; + + @BeforeEach + void mock() { + when(remoteService.createVorgang(any(), any())).thenReturn(VORGANG_ID); + } + + @DisplayName("should call create vorgang twice") + @Test + void shouldCallCreateVorgangTwice() { + service.createMultipleVorgangs(formData, List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)); + + verify(remoteService).createVorgang(formData, Optional.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)); + } + + @DisplayName("should return") + @Test + void shouldReturn() { + var vorgangIds = service.createMultipleVorgangs(formData, List.of(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)); + + assertThat(vorgangIds).containsExactly(VORGANG_ID); + } + } + + @DisplayName("get organisationseinheit ids") + @Nested + class TestGetOrganisationseinheitIds { + private final FormData preservedFormData = FormDataTestFactory.create(); + + @DisplayName("should return") + @Test + void shouldReturn() { + var organisationseinheitIds = service.getOrganisationsEinheitIds(preservedFormData); - private void callCreateVorgang() { - service.createVorgang(formData); + assertThat(organisationseinheitIds).containsExactly(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID); } } @@ -102,7 +238,7 @@ class VorgangServiceTest { assertThat(consistentFormData.getHeader().getServiceKonto()).isNull(); } - @DisplayName("should keep serviceKonto if postfachAddress eixsts") + @DisplayName("should keep serviceKonto if postfachAddress exists") @Test void shouldKeepServiceKonto() { var consistentFormData = service.preserveConsistency(FormDataTestFactory.create()); 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 9168807d8b4e2a6c52ae95c8bb509ffd04ecd1d8..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 { 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 1e057c6e81f5c937a429d8050c2c8996742026c9..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 @@ -72,7 +72,9 @@ class AfmZustaendigeStelleMapper implements AfmEngineBasedMapper { .organisationseinheitenId(organisationseinheitenID) .build(); - return formData.toBuilder().formData(addMetaDataFlag(formData)).zustaendigeStelle(zustaendigeStelle).build(); + return formData.toBuilder() + .formData(addMetaDataFlag(formData)) + .zustaendigeStelle(zustaendigeStelle).build(); } String getOrganisationseinheitenId(FormData formData) { 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 4b417bd36dc8421632a5e26447d1b7b669f249dd..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 @@ -45,7 +45,8 @@ public class ZustaendigeStelleMetadataMapper { return formData.getRepresentations().stream().filter(IS_BEHOERDE_METADATA).findAny() .map(this::readZustaendigeStelleMetadata) .map(this::mapZustaendigeStelle) - .map(zustaendigeStelle -> formData.toBuilder().zustaendigeStelle(zustaendigeStelle).build()) + .map(zustaendigeStelle -> formData.toBuilder() + .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 a89ba548f5247f858cea72a3443f89d5cd014cda..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,6 +2,7 @@ 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.Map; @@ -100,22 +101,32 @@ public class DFoerdermittelEngineBasedSemantikAdapter implements EngineBasedSema FormData addOrganisationsEinheitId(FormData formData) { return Optional.ofNullable((String) getFachnachricht(formData).get(KEY_ORGANISATIONS_EINHEIT_ID)) - .map(orgaId -> addOrganisationsEinheitId(orgaId, formData.getZustaendigeStelle())) - .map(zustStelle -> formData.toBuilder().zustaendigeStelle(zustStelle).build()) + .map(orgaId -> addOrganisationsEinheitId(orgaId, formData.getZustaendigeStelles())) + .map(zustStelle -> formData.toBuilder() + .zustaendigeStelle(zustStelle) + .build()) .orElse(formData); } - private ZustaendigeStelle addOrganisationsEinheitId(String orgaId, ZustaendigeStelle zustaendigeStelle) { + private ZustaendigeStelle addOrganisationsEinheitId(String orgaId, Collection<ZustaendigeStelle> zustaendigeStelles) { ZustaendigeStelle.ZustaendigeStelleBuilder zustaendigeStelleBuilder; - if (Objects.isNull(zustaendigeStelle)) { + if (Objects.isNull(zustaendigeStelles) || zustaendigeStelles.isEmpty()) { zustaendigeStelleBuilder = ZustaendigeStelle.builder(); } else { + 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/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/SemantikAdapterTest.java index 754667f0298c9d867846cafee6f28d6b82677fd2..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 @@ -23,6 +23,7 @@ */ package de.ozgcloud.eingang.semantik; +import static de.ozgcloud.eingang.common.formdata.FormDataTestFactory.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; @@ -98,6 +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.createVorgang(any())).thenReturn(VORGANG_ID); } @Test @@ -127,5 +129,13 @@ class SemantikAdapterTest { verify(vorgangService).createVorgang(formAdapterResponse); } + + @DisplayName("should return first vorgang id") + @Test + void shouldReturnFirstVorgangId() { + var vorgangId = adapter.processFormData(formData); + + assertThat(vorgangId).isEqualTo(VORGANG_ID); + } } } diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/FilesMapperHelperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/FilesMapperHelperTest.java index cfbf8d3481cd4679412ceceb84f886152467c30a..0375100ea49c6ac7f0c68bdff8a41d8d988bd3ad 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/FilesMapperHelperTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/FilesMapperHelperTest.java @@ -171,7 +171,7 @@ class FilesMapperHelperTest { assertThat(cleanedFormData.getId()).isEqualTo(formData.getId()); assertThat(cleanedFormData.getHeader()).isEqualTo(formData.getHeader()); - assertThat(cleanedFormData.getZustaendigeStelle()).isEqualTo(formData.getZustaendigeStelle()); + assertThat(cleanedFormData.getZustaendigeStelles()).isEqualTo(formData.getZustaendigeStelles()); assertThat(cleanedFormData.getAntragsteller()).isEqualTo(formData.getAntragsteller()); assertThat(cleanedFormData.getNumberOfAttachments()).isEqualTo(formData.getNumberOfAttachments()); assertThat(cleanedFormData.getAttachments()).isEqualTo(formData.getAttachments()); 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 4f83cb409499a33c332c3b8226012cf210949ae8..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.getZustaendigeStelle().getOrganisationseinheitenId()) - .isEqualTo(AfmZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); + assertThat(parsedFormData.getZustaendigeStelles()) + .extracting(ZustaendigeStelle::getOrganisationseinheitenId) + .containsExactly(AfmZustaendigeStelleTestFactory.ORGANISATIONSEINHEITEN_ID); } @Test void shouldMapBezeichnung() { var parsedFormData = parseZustaendigeStelleData(formData); - assertThat(parsedFormData.getZustaendigeStelle().getBezeichnung()).isEqualTo(BEZEICHNUNG); + assertThat(parsedFormData.getZustaendigeStelles()) + .extracting(ZustaendigeStelle::getBezeichnung) + .containsExactly(BEZEICHNUNG); } @Test void shouldMapEmail() { var parsedFormData = parseZustaendigeStelleData(formData); - assertThat(parsedFormData.getZustaendigeStelle().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 5da34d86397802416e222b17f31722392944791d..56058ec127401eeff1744df316e1aa60ef62449e 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 @@ -44,7 +44,7 @@ class ZustaendigeStelleMetadataMapperTest { behoerdeMetadataFile = IncomingFileTestFactory.createBuilder().name(ZustaendigeStelleMetadataMapper.BEHOERDE_METADATA_FILE_NAME) .build(); formData = FormDataTestFactory.createBuilder() - .zustaendigeStelle(null) + .clearZustaendigeStelles() .representation(behoerdeMetadataFile).build(); } @@ -76,17 +76,15 @@ class ZustaendigeStelleMetadataMapperTest { var result = mapper.parseZustaendigeStelleData(formData); - assertThat(result.getZustaendigeStelle()).isEqualTo(zustaendigeStelle); + assertThat(result.getZustaendigeStelles()).containsExactly(zustaendigeStelle); } } @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 2445fe3b2f3f7119bc53e33031595a02e6b7c20c..512d0a840d9c9018c5eb0b3c81495b470636f8e1 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 @@ -27,6 +27,7 @@ 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 { @@ -217,12 +218,44 @@ class DFoerdermittelEngineBasedSemantikAdapterTest { @Nested class TestAddOrganisationsEinheitId { - @Test - void shouldHaveOrganisationsEinheitId() { - var formData = adapter.addOrganisationsEinheitId(DFoerdermittelFormDataTestFactory.create()); - assertThat(formData.getZustaendigeStelle()).isNotNull().extracting(ZustaendigeStelle::getOrganisationseinheitenId) - .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(ZustaendigeStelle::getOrganisationseinheitenId) + .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(ZustaendigeStelle::getOrganisationseinheitenId) + .containsExactly(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID, ORGANISATIONS_EINHEIT_ID); + } + + @DisplayName("should log error for existing zustaendige stelle") + @Test + void shouldLogErrorForExistingZustaendigeStelle() { + adapter.addOrganisationsEinheitId(DFoerdermittelFormDataTestFactory.create()); + + 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 47c563508627226dac6341fe8d6e4b36f9062b70..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.getZustaendigeStelle()).isNotNull(); + assertThat(data.getZustaendigeStelles()).isNotNull().isNotEmpty(); } @Test void shouldMapOrganistaionseinheitenId() { var data = engineAdapter.parseFormData(formData); - assertThat(data.getZustaendigeStelle().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 1e019f49a47345092a4c9c2b5e6196871c621417..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 @@ -37,7 +37,6 @@ import org.mockito.Spy; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; -import de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsZustaendigeStelleMapper; class FormSolutionsZustaendigeStelleMapperTest { @@ -53,7 +52,6 @@ class FormSolutionsZustaendigeStelleMapperTest { @BeforeEach void setup() { formData = FormDataTestFactory.createBuilder() - .zustaendigeStelle(null) .formData(Map.of( FormDataTestFactory.SIMPLE_VALUE_KEY, FormDataTestFactory.SIMPLE_VALUE, FormSolutionsZustaendigeStelleMapper.ZUSTAENDIGE_STELLE, ORGANISATIONSEINHEIT_ID)) @@ -64,7 +62,7 @@ class FormSolutionsZustaendigeStelleMapperTest { void shouldParseFormData() { var resultFormData = mapper.parseFormData(formData); - assertThat(resultFormData.getZustaendigeStelle().getOrganisationseinheitenId()).isEqualTo(ORGANISATIONSEINHEIT_ID); + assertThat(resultFormData.getZustaendigeStelles().getFirst().getOrganisationseinheitenId()).isEqualTo(ORGANISATIONSEINHEIT_ID); assertThat(resultFormData.getFormData()).doesNotContainKey(ZUSTAENDIGE_STELLE); } @@ -73,7 +71,7 @@ class FormSolutionsZustaendigeStelleMapperTest { void shouldNotChangeAnother() { var resultFormData = mapper.parseFormData(formData); - assertThat(resultFormData).usingRecursiveComparison().ignoringFields("zustaendigeStelle", "formData").isEqualTo(formData); + assertThat(resultFormData).usingRecursiveComparison().ignoringFields("zustaendigeStelles", "formData").isEqualTo(formData); assertThat(resultFormData.getFormData()) .containsAllEntriesOf(Map.of(FormDataTestFactory.SIMPLE_VALUE_KEY, FormDataTestFactory.SIMPLE_VALUE)); } 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 a4951086c82837ebc3c01ef5f19b8833882b0e3c..2825ced4320061e6c7c2c5f51b34cfa2034830b3 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 @@ -9,6 +9,8 @@ import java.nio.file.Files; import java.nio.file.Path; import java.util.List; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; @@ -23,6 +25,7 @@ import de.ozgcloud.common.test.TestUtils; import de.ozgcloud.eingang.Application; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; +import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; import de.ozgcloud.eingang.router.VorgangService; import de.ozgcloud.eingang.semantik.SemantikAdapter; import de.ozgcloud.eingang.semantik.enginebased.formsolutions.FormSolutionsEngineBasedAdapterITCase; @@ -47,27 +50,31 @@ public class MantelantragITCase { @Captor ArgumentCaptor<FormData> formDataCaptor; + private static final String VORGANG_ID_1 = "vorgangId1"; + + + @BeforeEach + void mock() { + doReturn(VORGANG_ID_1).when(vorgangService).createVorgang(any()); + } + + @DisplayName("should return first vorgangId") @Test - void zustaendigeStelleExists() { - var formData = prepareTestData(); - doReturn("test").when(vorgangService).createVorgang(any(FormData.class)); - semantikAdapter.processFormData(formData); + void shouldReturnFirstVorgangId() { + var result = semantikAdapter.processFormData(prepareTestData()); - verify(vorgangService).createVorgang(formDataCaptor.capture()); - FormData capturedFormData = formDataCaptor.getValue(); - assertThat(capturedFormData).isNotNull(); + assertThat(result).isEqualTo(VORGANG_ID_1); } + @DisplayName("should pass organisationseinheit id to create vorgang") @Test - void zustaendigeStelleIsUtopia() { - var formData = prepareTestData(); - doReturn("test").when(vorgangService).createVorgang(any(FormData.class)); - semantikAdapter.processFormData(formData); + void shouldPassOrganisationseinheitIdToCreateVorgang() { + semantikAdapter.processFormData(prepareTestData()); verify(vorgangService).createVorgang(formDataCaptor.capture()); - FormData capturedFormData = formDataCaptor.getValue(); - - assertThat(capturedFormData.getZustaendigeStelle().getOrganisationseinheitenId()).isEqualTo("123"); + assertThat(formDataCaptor.getValue().getZustaendigeStelles()) + .extracting(ZustaendigeStelle::getOrganisationseinheitenId) + .containsExactly("123"); } } diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragZustaendigeStelleMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragZustaendigeStelleMapperTest.java index ffc88cabe17fb7e087abab038e13dfff3b8b14d1..377ff70a5036a54bc7e362c198a8339febc48dc1 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragZustaendigeStelleMapperTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/formbased/mantelantrag/MantelantragZustaendigeStelleMapperTest.java @@ -181,6 +181,7 @@ class MantelantragZustaendigeStelleMapperTest { getOrganisationseinheitIDFieldName(10), "1111111" )); formData = FormDataTestFactory.createBuilder() + .clearZustaendigeStelles() .formData(fieldMap) .build(); } @@ -283,7 +284,7 @@ class MantelantragZustaendigeStelleMapperTest { private ZustaendigeStelle getAdaptedZustaendigeStelle() { var formDataResult = mapper.adaptFormDataWithPossibleException(formData); - return formDataResult.getZustaendigeStelle(); + return formDataResult.getZustaendigeStelles().getFirst(); } }