diff --git a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormHeaderTestFactory.java b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormHeaderTestFactory.java index c243a89641e1ca5589188a680ed0ace8536fb747..0a371946028f0b2b9bf8b5b99af163d4d540d687 100644 --- a/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormHeaderTestFactory.java +++ b/common/src/test/java/de/ozgcloud/eingang/common/formdata/FormHeaderTestFactory.java @@ -40,6 +40,8 @@ public class FormHeaderTestFactory { public static final String CREATED_AT_STR = "2024-04-01T01:00:30Z"; public static final ZonedDateTime CREATED_AT = ZonedDateTime.parse(CREATED_AT_STR); + public static final ServiceKonto SERVICE_KONTO = ServiceKontoTestFactory.create(); + public static FormHeader create() { return createBuilder().build(); } @@ -53,7 +55,7 @@ public class FormHeaderTestFactory { .formId(FORM_ID) .formName(FORM_NAME) .sender(SENDER) - .serviceKonto(ServiceKontoTestFactory.create()); + .serviceKonto(SERVICE_KONTO); } } diff --git a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapper.java b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapper.java new file mode 100644 index 0000000000000000000000000000000000000000..3aceb97490468096ade62e9803525e90f0cf8a03 --- /dev/null +++ b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapper.java @@ -0,0 +1,38 @@ +package de.ozgcloud.eingang.formcycle; + +import java.util.Collections; +import java.util.List; + +import org.apache.commons.lang3.StringUtils; +import org.mapstruct.CollectionMappingStrategy; +import org.mapstruct.Mapper; +import org.mapstruct.Mapping; +import org.mapstruct.ReportingPolicy; + +import de.ozgcloud.eingang.common.formdata.ServiceKonto; +import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; +import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; + +@Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, unmappedTargetPolicy = ReportingPolicy.WARN) +interface FormCycleServiceKontoMapper { + + @Mapping(target = "postfachAddress", ignore = true) + @Mapping(target = "postfachAddresses", expression = "java(fromGrpcPostfachAddresses(serviceKonto))") + ServiceKonto fromGrpc(FormCycleServiceKonto serviceKonto); + + default String fromString(String str) { + return StringUtils.trimToNull(str); + } + + default List<PostfachAddress> fromGrpcPostfachAddresses(FormCycleServiceKonto serviceKonto) { + return serviceKonto.hasAddress() ? List.of(fromGrpc(serviceKonto.getAddress())) : Collections.emptyList(); + } + + @Mapping(target = "type", ignore = true) + @Mapping(target = "identifier", expression = "java(buildIdentifier(postfachAddress.getIdentifier()))") + PostfachAddress fromGrpc(FormCyclePostfachAddress postfachAddress); + + default StringBasedIdentifier buildIdentifier(String identifier) { + return StringBasedIdentifier.builder().postfachId(identifier).build(); + } +} \ No newline at end of file diff --git a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataController.java b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataController.java index 4e6fbc510208c4bc5154d7b6e98327c938cc2af4..128fc4e36b078af117bafc7a7747b984888b4f3c 100644 --- a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataController.java +++ b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataController.java @@ -44,9 +44,6 @@ import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.IncomingFile; import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; -import de.ozgcloud.eingang.common.formdata.ServiceKonto; -import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; -import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier; import de.ozgcloud.eingang.semantik.SemantikAdapter; import de.ozgcloud.eingang.semantik.enginebased.FilesMapperHelper; @@ -66,6 +63,7 @@ class FormDataController { private final SemantikAdapter semantikAdapter; private final VorgangNummerSupplier vorgangNummerSupplier; private final FormDataHtmlCleaner formDataHtmlCleaner; + private final FormCycleServiceKontoMapper serviceKontoMapper; @PostMapping(consumes = "multipart/form-data", produces = HTTP_TYPE_PROTOBUF) public FormCycleConfirmationResponse receiveFormData(@RequestPart FormCycleFormData formData, @@ -98,7 +96,7 @@ class FormDataController { return files.orElseGet(Collections::emptyList).stream().map(this::buildIncomingFile).toList(); } - private FormData addFiles(FormCycleFormData inFormData, Optional<Collection<MultipartFile>> attachments, FormData mappedFormData) { + FormData addFiles(FormCycleFormData inFormData, Optional<Collection<MultipartFile>> attachments, FormData mappedFormData) { var groups = new AttachmentGroupsBuilder(inFormData.getAttachmentGroupList(), attachments).buildGroups(); return mappedFormData.toBuilder().attachments(groups).numberOfAttachments(FilesMapperHelper.countAttachedFiles(groups)).build(); @@ -157,28 +155,8 @@ class FormDataController { FormData addServiceKonto(FormCycleFormData formData, FormData mappedFormData) { if (formData.hasServiceKonto()) { - mappedFormData.getHeader().setServiceKonto(buildServiceKonto(formData.getServiceKonto())); + mappedFormData.getHeader().setServiceKonto(serviceKontoMapper.fromGrpc(formData.getServiceKonto())); } return mappedFormData; } - - ServiceKonto buildServiceKonto(FormCycleServiceKonto formCycleServiceKonto) { - return ServiceKonto.builder() - .type(formCycleServiceKonto.getType()) - .postfachAddress(buildPostfachAddress(formCycleServiceKonto)) - .trustLevel(formCycleServiceKonto.getTrustLevel()) - .build(); - } - - PostfachAddress buildPostfachAddress(FormCycleServiceKonto formCycleServiceKonto) { - if (!formCycleServiceKonto.hasAddress()) { - return null; - } - var address = formCycleServiceKonto.getAddress(); - return PostfachAddress.builder().identifier(buildPostfachId(address.getIdentifier())).version(address.getVersion()).build(); - } - - private StringBasedIdentifier buildPostfachId(String identifier) { - return StringBasedIdentifier.builder().postfachId(identifier).build(); - } -} +} \ No newline at end of file diff --git a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleFormDataTestFactory.java b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleFormDataTestFactory.java index 78691f91ad65261b60e70063a6be1fc8b4a2bd5c..369bc8a1651603190ff0daee48e0dd4a1625e340 100644 --- a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleFormDataTestFactory.java +++ b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleFormDataTestFactory.java @@ -28,16 +28,18 @@ import de.ozgcloud.eingang.formcycle.FormCycleFormData.Builder; import de.ozgcloud.vorgang.common.grpc.GrpcFormDataTestFactory; import de.ozgcloud.vorgang.vorgang.GrpcFormData; -class FormCycleFormDataTestFactory { +public class FormCycleFormDataTestFactory { - static FormCycleFormData create() { + public static final FormCycleServiceKonto SERVICE_KONTO = FormCycleServiceKontoTestFactory.create(); + + public static FormCycleFormData create() { return createBuilder().build(); } - static Builder createBuilder() { + public static Builder createBuilder() { return FormCycleFormData.newBuilder() .setHeader(FormCycleFormHeaderTestFactory.create()) - .setServiceKonto(FormCycleServiceKontoTestFactory.create()) + .setServiceKonto(SERVICE_KONTO) .setFormData(GrpcFormDataTestFactory.create()) .addAttachmentGroup(FormCycleAttachmentGroup.newBuilder() .setName(IncomingFileGroupTestFactory.NAME) @@ -45,8 +47,7 @@ class FormCycleFormDataTestFactory { .build()); } - static FormCycleFormData withFormData(GrpcFormData formData) { + public static FormCycleFormData withFormData(GrpcFormData formData) { return createBuilder().clearFormData().setFormData(formData).build(); } - -} +} \ No newline at end of file diff --git a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapperTest.java b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapperTest.java new file mode 100644 index 0000000000000000000000000000000000000000..b328284eb6b3ab4fdf010dd4240d4726ebd13209 --- /dev/null +++ b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapperTest.java @@ -0,0 +1,86 @@ +package de.ozgcloud.eingang.formcycle; + +import static org.assertj.core.api.Assertions.*; + +import org.apache.commons.lang3.StringUtils; +import org.junit.jupiter.api.DisplayName; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; +import org.mapstruct.factory.Mappers; + +import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; +import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory; +import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; + +class FormCycleServiceKontoMapperTest { + + private final FormCycleServiceKontoMapper mapper = Mappers.getMapper(FormCycleServiceKontoMapper.class); + + @DisplayName("From grpc serviceKonto") + @Nested + class TestFromGrpcServiceKonto { + + @DisplayName("trustLevel") + @Nested + class TestTrustLevel { + + @Test + void shouldMap() { + var serviceKonto = mapper.fromGrpc(FormCycleServiceKontoTestFactory.create()); + + assertThat(serviceKonto.getTrustLevel()).isEqualTo(ServiceKontoTestFactory.TRUST_LEVEL); + } + + @Test + void shouldMapAsNullIfEmpty() { + var serviceKontoWithEmptyTrustLevel = FormCycleServiceKontoTestFactory.createBuilder().setTrustLevel(StringUtils.EMPTY).build(); + + var serviceKonto = mapper.fromGrpc(serviceKontoWithEmptyTrustLevel); + + assertThat(serviceKonto.getTrustLevel()).isNull(); + } + } + + @Test + void shouldNotPostfachAddressIfNotExists() { + var serviceKonto = mapper.fromGrpc(FormCycleServiceKontoTestFactory.createBuilder().clearAddress().build()); + + assertThat(serviceKonto.getPostfachAddresses()).isEmpty(); + } + + @DisplayName("postfachAddress") + @Nested + class TestPostfachAddress { + + @Test + void shouldMapPostkorbId() { + var postfachAddress = mapPostfachAddressFromGrpc(); + + assertThat(((StringBasedIdentifier) postfachAddress.getIdentifier()).getPostfachId()) + .isEqualTo(FormCyclePostfachAddressTestFactory.POSTKORB_ID); + } + + @Test + void shouldMapIdentifier() { + var postfachAddress = mapPostfachAddressFromGrpc(); + + assertThat(getIdentifier(postfachAddress)).isEqualTo(FormCyclePostfachAddressTestFactory.POSTKORB_ID); + } + + private String getIdentifier(PostfachAddress postfachAddress) { + return ((StringBasedIdentifier) postfachAddress.getIdentifier()).getPostfachId(); + } + + @Test + void shouldMapVersion() { + var postfachAddress = mapPostfachAddressFromGrpc(); + + assertThat(postfachAddress.getVersion()).isEqualTo(FormCyclePostfachAddressTestFactory.VERSION); + } + + private PostfachAddress mapPostfachAddressFromGrpc() { + return mapper.fromGrpc(FormCycleServiceKontoTestFactory.create()).getPostfachAddresses().get(0); + } + } + } +} \ No newline at end of file diff --git a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataControllerTest.java b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataControllerTest.java index 06704947aea190ae8c3ee084a492c3b6d808e479..4f753916fd0158272354fe94c32c9a19f006f26c 100644 --- a/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataControllerTest.java +++ b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormDataControllerTest.java @@ -35,6 +35,7 @@ import java.util.Collections; import java.util.Optional; 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; @@ -54,10 +55,9 @@ import de.ozgcloud.eingang.common.formdata.FormHeader; import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory; import de.ozgcloud.eingang.common.formdata.IncomingFileGroupTestFactory; import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; -import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; +import de.ozgcloud.eingang.common.formdata.ServiceKonto; import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory; import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier; -import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; import de.ozgcloud.eingang.semantik.SemantikAdapter; import lombok.SneakyThrows; @@ -75,6 +75,8 @@ class FormDataControllerTest { private VorgangNummerSupplier vorgangNummerSupplier; @Mock private FormDataHtmlCleaner htmlCleaner; + @Mock + private FormCycleServiceKontoMapper serviceKontoMapper; private MockMvc mockMvc; @@ -134,7 +136,7 @@ class FormDataControllerTest { void shouldCallHtmlCleaner() { doPostRequest(); - verify(htmlCleaner).clean(any()); + verify(htmlCleaner).clean(mappedFormData); } @Test @@ -155,11 +157,12 @@ class FormDataControllerTest { } @Test - void shouldMapPostkorbId() { + void shouldCallAddServiceKonto() { + doReturn(mappedFormData).when(controller).addFiles(any(), any(), any()); + doPostRequest(); - verify(semantikAdapter).processFormData(formDataCaptor.capture()); - assertThat(getPostfachIdFormData(formDataCaptor.getValue())).isEqualTo(FormCyclePostfachAddressTestFactory.POSTKORB_ID); + verify(controller).addServiceKonto(notNull(), eq(mappedFormData)); } @Nested @@ -298,77 +301,49 @@ class FormDataControllerTest { } } + @DisplayName("Add serviceKonto") @Nested class TestServiceKontoMapping { - @Test - void shouldMapServiceKontoType() { - var formData = controller.addServiceKonto(FormCycleFormDataTestFactory.create(), buildEmptyFormDataWithHeader()); - - assertThat(getServiceKontoType(formData)).isEqualTo(FormCycleServiceKontoTestFactory.TYPE); - } - - @Test - void shouldNotMapEmptyServiceKonto() { - controller.addServiceKonto(FormCycleFormData.newBuilder().build(), buildEmptyFormDataWithHeader()); - - verify(controller, never()).buildServiceKonto(any()); - } - - @Test - void shouldMapTrustLevel() { - var formData = controller.addServiceKonto(FormCycleFormDataTestFactory.create(), buildEmptyFormDataWithHeader()); - - assertThat(formData.getHeader().getServiceKonto().getTrustLevel()).isEqualTo(ServiceKontoTestFactory.TRUST_LEVEL); - } - - String getServiceKontoType(FormData formData) { - return formData.getHeader().getServiceKonto().getType(); - } - + @DisplayName("on existing") @Nested - class TestPostkorbIdMapping { + class TestOnExisting { - @Test - void shouldMapPostkorbId() { - var formData = controller.addServiceKonto(FormCycleFormDataTestFactory.create(), buildEmptyFormDataWithHeader()); + private final ServiceKonto serviceKonto = ServiceKontoTestFactory.create(); - assertThat(getPostfachIdFormData(formData)).isEqualTo(FormCyclePostfachAddressTestFactory.POSTKORB_ID); + @BeforeEach + void mock() { + when(serviceKontoMapper.fromGrpc(any(FormCycleServiceKonto.class))).thenReturn(serviceKonto); } @Test - void shouldNotMapEmptyPostkorbId() { - var postfachAddress = controller.buildPostfachAddress(FormCycleServiceKonto.newBuilder().build()); + void shouldCallMapper() { + controller.addServiceKonto(FormCycleFormDataTestFactory.create(), buildEmptyFormDataWithHeader()); - assertThat(postfachAddress).isNull(); + verify(serviceKontoMapper).fromGrpc(FormCycleFormDataTestFactory.SERVICE_KONTO); } @Test - void shouldMapPostfachIdentifier() { - var postfachAddress = controller.buildPostfachAddress(FormCycleServiceKontoTestFactory.create()); + void shouldMapServiceKontoType() { + var formData = controller.addServiceKonto(FormCycleFormDataTestFactory.create(), buildEmptyFormDataWithHeader()); - assertThat(getIdentifier(postfachAddress)).isEqualTo(FormCyclePostfachAddressTestFactory.POSTKORB_ID); + assertThat(getServiceKontoType(formData)).isEqualTo(ServiceKontoTestFactory.TYPE); } + } - private String getIdentifier(PostfachAddress postfachAddress) { - return ((StringBasedIdentifier) postfachAddress.getIdentifier()).getPostfachId(); - } + @Test + void shouldBeNullIfNotExists() { + var formData = controller.addServiceKonto(FormCycleFormData.newBuilder().build(), buildEmptyFormDataWithHeader()); - @Test - void shouldMapPostfachAddressVersion() { - var postfachAddress = controller.buildPostfachAddress(FormCycleServiceKontoTestFactory.create()); + assertThat(formData.getHeader().getServiceKonto()).isNull(); + } - assertThat(postfachAddress.getVersion()).isEqualTo(FormCyclePostfachAddressTestFactory.VERSION); - } + private String getServiceKontoType(FormData formData) { + return formData.getHeader().getServiceKonto().getType(); } private FormData buildEmptyFormDataWithHeader() { return FormData.builder().header(FormHeader.builder().build()).build(); } } - - private String getPostfachIdFormData(FormData formData) { - return ((StringBasedIdentifier) formData.getHeader().getServiceKonto().getPostfachAddresses() - .get(0).getIdentifier()).getPostfachId(); - } -} +} \ No newline at end of file diff --git a/formsolutions-adapter/src/test/java/de/ozgcloud/eingang/formsolutions/SendFormEndpointITCase.java b/formsolutions-adapter/src/test/java/de/ozgcloud/eingang/formsolutions/SendFormEndpointITCase.java index 86ab1dac41cdd74d3173b50c733a8d339ee47bdd..02b27c1a4f34a300244bc68e25ab3fcee78217f6 100644 --- a/formsolutions-adapter/src/test/java/de/ozgcloud/eingang/formsolutions/SendFormEndpointITCase.java +++ b/formsolutions-adapter/src/test/java/de/ozgcloud/eingang/formsolutions/SendFormEndpointITCase.java @@ -5,7 +5,6 @@ import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.nio.file.Files; -import java.util.List; import java.util.Optional; import org.junit.jupiter.api.BeforeEach; @@ -24,10 +23,9 @@ import org.springframework.core.io.Resource; import org.springframework.test.context.ActiveProfiles; import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; +import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; import de.ozgcloud.eingang.router.VorgangRemoteService; -import de.ozgcloud.vorgang.common.GrpcObject; -import de.ozgcloud.vorgang.vorgang.GrpcEingang; -import de.ozgcloud.vorgang.vorgang.GrpcPostfachAddress; import lombok.SneakyThrows; @ActiveProfiles({ "local", "itcase" }) @@ -37,6 +35,7 @@ class SendFormEndpointITCase { private final static String FILE_BASE_PATH = "classpath:formular/"; private final static String FORMULAR_JSON = "RequestJsonContent.json"; + private final static String FORMULAR_POSTFACH_ID = "51522620-03d2-4507-b1f0-08d86920efed"; @Autowired private ApplicationContext applicationContext; @@ -49,8 +48,6 @@ class SendFormEndpointITCase { @Captor private ArgumentCaptor<FormData> formDataCaptor; @Captor - private ArgumentCaptor<GrpcEingang> grpcEingangCaptor; - @Captor private ArgumentCaptor<Optional<String>> organisationsEinheitIdCaptor; @DisplayName("Receive form") @@ -75,7 +72,7 @@ class SendFormEndpointITCase { void shouldCallRemoteService() { callEndpoint(); - verify(vorgangRemoteService).createVorgang(any(FormData.class), any(GrpcEingang.class), any()); + verify(vorgangRemoteService).createVorgang(any(FormData.class), any()); } @DisplayName("service konto") @@ -86,21 +83,21 @@ class SendFormEndpointITCase { void shouldExist() { callEndpoint(); - assertThat(grpcEingangCaptor.getValue().getHeader().getServiceKonto()).isNotNull(); + assertThat(formDataCaptor.getValue().getHeader().getServiceKonto()).isNotNull(); } @Test void shouldContainsType() { callEndpoint(); - assertThat(grpcEingangCaptor.getValue().getHeader().getServiceKonto().getType()).isEqualTo("OSI"); + assertThat(formDataCaptor.getValue().getHeader().getServiceKonto().getType()).isEqualTo("OSI"); } @Test void shouldContainsPostfachAddress() { callEndpoint(); - assertThat(grpcEingangCaptor.getValue().getHeader().getServiceKonto().getPostfachAddressesList()).hasSize(1); + assertThat(formDataCaptor.getValue().getHeader().getServiceKonto().getPostfachAddresses()).hasSize(1); } @Nested @@ -124,15 +121,12 @@ class SendFormEndpointITCase { void shouldContainsIdentifier() { callEndpoint(); - assertThat(getPostfachAddress().getIdentifier()).isInstanceOf(GrpcObject.class); - assertThat(getPostfachAddress().getIdentifier().getPropertyList()).hasSize(1); - assertThat(getPostfachAddress().getIdentifier().getPropertyList().get(0).getName()).isEqualTo("postfachId"); - assertThat(getPostfachAddress().getIdentifier().getPropertyList().get(0).getValue(0)) - .isEqualTo("51522620-03d2-4507-b1f0-08d86920efed"); + assertThat(getPostfachAddress().getIdentifier()).isInstanceOf(StringBasedIdentifier.class); + assertThat(((StringBasedIdentifier) getPostfachAddress().getIdentifier()).getPostfachId()).isEqualTo(FORMULAR_POSTFACH_ID); } - private GrpcPostfachAddress getPostfachAddress() { - List<GrpcPostfachAddress> addresses = grpcEingangCaptor.getValue().getHeader().getServiceKonto().getPostfachAddressesList(); + private PostfachAddress getPostfachAddress() { + var addresses = formDataCaptor.getValue().getHeader().getServiceKonto().getPostfachAddresses(); assertThat(addresses).isNotEmpty(); return addresses.get(0); } @@ -142,7 +136,7 @@ class SendFormEndpointITCase { private void callEndpoint() { endpoint.receiveForm(request); - verify(vorgangRemoteService).createVorgang(formDataCaptor.capture(), grpcEingangCaptor.capture(), organisationsEinheitIdCaptor.capture()); + verify(vorgangRemoteService).createVorgang(formDataCaptor.capture(), organisationsEinheitIdCaptor.capture()); } private Resource getResource(String fileName) { diff --git a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/FormDataEndpointITCase.java b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/FormDataEndpointITCase.java index e4cee2e206dd7ff302abd447139793521e1821f1..70c45a24ceb90e3f8a7f2e44ac7995823e3c8d22 100644 --- a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/FormDataEndpointITCase.java +++ b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/FormDataEndpointITCase.java @@ -35,7 +35,7 @@ import java.io.StringReader; import java.io.StringWriter; import java.util.Collection; import java.util.List; -import java.util.Optional; +import java.util.UUID; import javax.xml.namespace.QName; import javax.xml.transform.Source; @@ -51,9 +51,11 @@ import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.ArgumentCaptor; import org.mockito.Captor; +import org.mockito.Mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.context.ApplicationContext; import org.springframework.core.io.Resource; import org.springframework.oxm.jaxb.Jaxb2Marshaller; @@ -64,12 +66,17 @@ import org.springframework.ws.test.server.ResponseMatchers; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.PostfachAddressTestFactory; +import de.ozgcloud.eingang.router.ManagableStub; +import de.ozgcloud.eingang.router.VorgangManagerServerResolver; import de.ozgcloud.eingang.router.VorgangRemoteService; +import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc.BinaryFileServiceStub; import de.ozgcloud.vorgang.vorgang.GrpcAntragsteller; import de.ozgcloud.vorgang.vorgang.GrpcEingang; import de.ozgcloud.vorgang.vorgang.GrpcFormData; import de.ozgcloud.vorgang.vorgang.GrpcIncomingFile; import de.ozgcloud.vorgang.vorgang.GrpcIncomingFileGroup; +import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; +import io.grpc.Channel; import lombok.SneakyThrows; @SpringBootTest @@ -86,20 +93,34 @@ class FormDataEndpointITCase { @Autowired private ApplicationContext applicationContext; - @MockBean + @SpyBean private VorgangRemoteService vorgangRemoteService; + @MockBean + private VorgangManagerServerResolver resolver; + + @Mock + private ManagableStub<VorgangServiceBlockingStub> vorgangManageableServiceStub; + @Mock + private VorgangServiceBlockingStub vorgangServiceStub; + @Mock + private ManagableStub<BinaryFileServiceStub> binaryFileManageableServiceStub; + @Mock + private BinaryFileServiceStub binaryFileServiceStub; + + @Mock + private Channel channel; @Captor private ArgumentCaptor<FormData> formDataCaptor; @Captor private ArgumentCaptor<GrpcEingang> grpcEingangCaptor; - @Captor - private ArgumentCaptor<Optional<String>> organisationsEinheitIdCaptor; private MockWebServiceClient mockClient; private DepositData depositData; + private final String vorgangId = UUID.randomUUID().toString(); + @BeforeAll static void setupMarshaller() { marshaller = new Jaxb2Marshaller(); @@ -109,6 +130,16 @@ class FormDataEndpointITCase { @BeforeEach void initTest() { mockClient = MockWebServiceClient.createClient(applicationContext); + + when(resolver.resolveVorgangServiceBlockingStubByOrganisationseinheitenId(any())).thenReturn(vorgangManageableServiceStub); + when(vorgangManageableServiceStub.get()).thenReturn(vorgangServiceStub); + when(vorgangServiceStub.getChannel()).thenReturn(channel); + when(channel.authority()).thenReturn("authorityDummy"); + + when(resolver.resolveBinaryFileServiceStubByOrganisationsEinheitId(any())).thenReturn(binaryFileManageableServiceStub); + when(binaryFileManageableServiceStub.get()).thenReturn(binaryFileServiceStub); + + doReturn(vorgangId).when(vorgangRemoteService).createVorgang(any(), any(), any(), any()); } @DisplayName("send antrag with many attachments") @@ -154,8 +185,7 @@ class FormDataEndpointITCase { assertThat(representationVendorIds).containsExactly( XML_ATTACHMENT_ID, XML_ROHFORM_ATTACHMENT_ID, - XML_ORIGINALFORM_ATTACHMENT_ID - ); + XML_ORIGINALFORM_ATTACHMENT_ID); } @DisplayName("should have attachments") @@ -182,8 +212,7 @@ class FormDataEndpointITCase { PDF2_ATTACHMENT_ID, ODT_ATTACHMENT_ID, JPG_ATTACHMENT_ID, - PNG_ATTACHMENT_ID - ); + PNG_ATTACHMENT_ID); } @DisplayName("should have organisationseinheitenID") @@ -191,9 +220,6 @@ class FormDataEndpointITCase { void shouldHaveOrganisationseinheitenId() { sendDepositAndCaptureCreateVorgang(); - var oeid = organisationsEinheitIdCaptor.getValue(); - assertThat(oeid).hasValue(ORGANISATIONSEINHEITEN_ID); - var eingang = grpcEingangCaptor.getValue(); assertThat(eingang.getZustaendigeStelle().getOrganisationseinheitenId()).isEqualTo(ORGANISATIONSEINHEITEN_ID); } @@ -211,8 +237,7 @@ class FormDataEndpointITCase { withEmptyName(createPdf()), createPdf(), withEmptyName(createPng()), - createPng() - )); + createPng())); } private Attachment withEmptyName(Attachment attachment) { @@ -264,7 +289,7 @@ class FormDataEndpointITCase { .andExpect(ResponseMatchers.noFault()) .andExpect(ResponseMatchers.payload(getResource(RESPONSE))); - verify(vorgangRemoteService).createVorgang(formDataCaptor.capture(), grpcEingangCaptor.capture(), organisationsEinheitIdCaptor.capture()); + verify(vorgangRemoteService).createVorgang(formDataCaptor.capture(), grpcEingangCaptor.capture(), any(), any()); } @SneakyThrows @@ -290,7 +315,7 @@ class FormDataEndpointITCase { void shouldSendRequest() { sendRequest(); - verify(vorgangRemoteService).createVorgang(any(FormData.class), any(GrpcEingang.class), any()); + verify(vorgangRemoteService).createVorgang(any(FormData.class), any(GrpcEingang.class), any(), any()); } @Nested @@ -318,7 +343,7 @@ class FormDataEndpointITCase { void validateOrganisationsEinheitId() { sendRequest(); - assertThat(organisationsEinheitIdCaptor.getValue()).isPresent().hasValue("10363455"); + assertThat(grpcEingangCaptor.getValue().getZustaendigeStelle().getOrganisationseinheitenId()).isEqualTo("10363455"); } @Test @@ -473,7 +498,7 @@ class FormDataEndpointITCase { void shouldHaveOrgaId() { sendWebserviceRequest(SOAP_REQUEST_OTHER_NAME); - verify(vorgangRemoteService).createVorgang(any(), grpcEingangCaptor.capture(), any()); + verify(vorgangRemoteService).createVorgang(any(), grpcEingangCaptor.capture(), any(), any()); assertThat(grpcEingangCaptor.getValue().getZustaendigeStelle().getOrganisationseinheitenId()).isEqualTo("0815"); } @@ -549,7 +574,7 @@ class FormDataEndpointITCase { private GrpcFormData requestFormData() { sendWebserviceRequest(REQUEST_XML_NAME); - verify(vorgangRemoteService).createVorgang(any(), grpcEingangCaptor.capture(), any()); + verify(vorgangRemoteService).createVorgang(any(), grpcEingangCaptor.capture(), any(), any()); return grpcEingangCaptor.getValue().getFormData(); } } @@ -560,7 +585,7 @@ class FormDataEndpointITCase { .andExpect(ResponseMatchers.noFault()) .andExpect(ResponseMatchers.payload(getResource(RESPONSE))); - verify(vorgangRemoteService).createVorgang(formDataCaptor.capture(), grpcEingangCaptor.capture(), organisationsEinheitIdCaptor.capture()); + verify(vorgangRemoteService).createVorgang(formDataCaptor.capture(), grpcEingangCaptor.capture(), any(), any()); return response; } 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 e359c1c58d2b85fc2326c74ac848ef4287f5d972..2a50225927053555819bbd1ac937ed0598088dd4 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangRemoteService.java @@ -31,7 +31,6 @@ import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; import org.apache.commons.io.IOUtils; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.google.protobuf.ByteString; @@ -55,25 +54,28 @@ import de.ozgcloud.vorgang.vorgang.GrpcIncomingFileGroup; import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; import io.grpc.stub.CallStreamObserver; import io.grpc.stub.StreamObserver; +import lombok.AllArgsConstructor; import lombok.Getter; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @Log4j2 +@AllArgsConstructor @Service public class VorgangRemoteService { - @Autowired - private VorgangManagerServerResolver vorgangManagerServerResolver; + private final VorgangManagerServerResolver vorgangManagerServerResolver; - public String createVorgang(FormData formData, GrpcEingang eingang, Optional<String> organisationsEinheitenId) { + private final GrpcEingangMapper grpcEingangMapper; + + public String createVorgang(FormData formData, Optional<String> organisationsEinheitenId) { var vorgangServiceStub = getVorgangServiceStub(organisationsEinheitenId); var binaryFileServiceStub = getBinaryFileServiceStub(organisationsEinheitenId); logConnection(organisationsEinheitenId, vorgangServiceStub.get()); try { - return createVorgang(formData, eingang, vorgangServiceStub.get(), binaryFileServiceStub.get()); + return createVorgang(formData, grpcEingangMapper.toEingang(formData), 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 9d617ae52e65f0b17720abb50d13aac388ff430e..de97243af9a356da303522e4555b1509b540dc16 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/VorgangService.java @@ -23,27 +23,46 @@ */ package de.ozgcloud.eingang.router; +import java.util.List; import java.util.Optional; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.common.formdata.FormHeader; +import de.ozgcloud.eingang.common.formdata.ServiceKonto; import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; +import lombok.AllArgsConstructor; +@AllArgsConstructor @Service public class VorgangService { - @Autowired - private VorgangRemoteService remoteService; - - @Autowired - private GrpcEingangMapper grpcEingangMapper; + private final VorgangRemoteService remoteService; public String createVorgang(FormData formData) { - var eingang = grpcEingangMapper.toEingang(formData); - var organisationsEinheitenId = Optional.ofNullable(formData.getZustaendigeStelle()).map(ZustaendigeStelle::getOrganisationseinheitenId); + var preparedFormData = preserveConsistency(formData); + + return remoteService.createVorgang(preparedFormData, getOrganisationsEinheitId(preparedFormData)); + } + + private Optional<String> getOrganisationsEinheitId(FormData formData) { + return Optional.ofNullable(formData.getZustaendigeStelle()).map(ZustaendigeStelle::getOrganisationseinheitenId); + } + + FormData preserveConsistency(FormData formData) { + if (hasNoPostfachAddress(formData)) { + return clearServiceKonto(formData); + } + return formData; + } + + private boolean hasNoPostfachAddress(FormData formData) { + return Optional.ofNullable(formData.getHeader()).map(FormHeader::getServiceKonto).map(ServiceKonto::getPostfachAddresses).map(List::isEmpty) + .orElse(true); + } - return remoteService.createVorgang(formData, eingang, organisationsEinheitenId); + private FormData clearServiceKonto(FormData formData) { + return formData.toBuilder().header(formData.getHeader().toBuilder().serviceKonto(null).build()).build(); } } \ 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 465b61fcdbe88fc611f3990c2a6ec00d5073ab96..993c973ca2f71c645734db5ab5039151b9a0543f 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/VorgangRemoteServiceTest.java @@ -79,6 +79,8 @@ class VorgangRemoteServiceTest { private VorgangRemoteService remoteService; @Mock private VorgangManagerServerResolver resolver; + @Mock + private GrpcEingangMapper eingangMapper; private VorgangCreator vorgangCreator; @@ -115,6 +117,8 @@ class VorgangRemoteServiceTest { when(resolver.resolveBinaryFileServiceStubByOrganisationsEinheitId(any())).thenReturn(managableBinaryFileServiceStub); when(managableBinaryFileServiceStub.get()).thenReturn(binaryFileServiceStub); + when(eingangMapper.toEingang(any())).thenReturn(eingang); + doNothing().when(remoteService).logConnection(any(), any()); doNothing().when(remoteService).finishStubConnections(any()); } @@ -151,6 +155,13 @@ class VorgangRemoteServiceTest { verify(remoteService).createVorgang(formData, eingang, vorgangServiceStub, binaryFileServiceStub); } + @Test + void shouldCallEingangMapper() { + createVorgang(); + + verify(eingangMapper).toEingang(formData); + } + @Test void shouldFinishStubConnection() { createVorgang(); @@ -192,7 +203,7 @@ class VorgangRemoteServiceTest { @SneakyThrows private String createVorgang() { - return remoteService.createVorgang(formData, eingang, organisationsEinheitId); + return remoteService.createVorgang(formData, organisationsEinheitId); } } 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 09a272ead29a6ef327ceb514b4305870459a0b8b..2db3d04b7e3ad7bdb2240c7a1a66d8b39cbb4ca8 100644 --- a/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java +++ b/router/src/test/java/de/ozgcloud/eingang/router/VorgangServiceTest.java @@ -23,24 +23,31 @@ */ package de.ozgcloud.eingang.router; -import static org.mockito.ArgumentMatchers.*; +import static org.assertj.core.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.*; 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; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; +import org.mockito.Spy; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; +import de.ozgcloud.eingang.common.formdata.FormHeader; +import de.ozgcloud.eingang.common.formdata.FormHeaderTestFactory; +import de.ozgcloud.eingang.common.formdata.ServiceKonto; +import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory; import de.ozgcloud.eingang.common.formdata.ZustaendigeStelleTestFactory; -import de.ozgcloud.vorgang.vorgang.GrpcEingang; class VorgangServiceTest { + @Spy @InjectMocks private VorgangService service; @Mock @@ -48,26 +55,68 @@ class VorgangServiceTest { @Mock private VorgangRemoteService remoteService; + @DisplayName("Create vorgang") @Nested class TestCreateVorgang { - private FormData formData = FormDataTestFactory.create(); - private GrpcEingang eingang = GrpcEingang.newBuilder().build(); + private final FormData formData = FormDataTestFactory.create(); + private final FormData preservedFormData = FormDataTestFactory.create(); @BeforeEach void mockEingangMapper() { - when(eingangMapper.toEingang(any())).thenReturn(eingang); + doReturn(preservedFormData).when(service).preserveConsistency(formData); + } + + @Test + void shouldPreserverConsistency() { + callCreateVorgang(); + + verify(service).preserveConsistency(formData); } @Test void shouldCallRemoteService() { - callCreateVorgangNew(); + callCreateVorgang(); - verify(remoteService).createVorgang(formData, eingang, Optional.ofNullable(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)); + verify(remoteService).createVorgang(preservedFormData, Optional.ofNullable(ZustaendigeStelleTestFactory.ORGANISATIONSEINHEIT_ID)); } - private void callCreateVorgangNew() { + private void callCreateVorgang() { service.createVorgang(formData); } } + + @DisplayName("Preserve consistency") + @Nested + class TestPreserveConsistency { + + private final ServiceKonto serviceKonto = ServiceKontoTestFactory.createBuilder().clearPostfachAddresses().build(); + private final FormHeader header = FormHeaderTestFactory.createBuilder().serviceKonto(serviceKonto).build(); + private final FormData formData = FormDataTestFactory.createBuilder().header(header).build(); + + @DisplayName("should set serviceKonto to null if no postfachAddress exists") + @Test + void shouldSetServiceKontoToNull() { + var consistentFormData = service.preserveConsistency(formData); + + assertThat(consistentFormData.getHeader().getServiceKonto()).isNull(); + } + + @DisplayName("should keep serviceKonto if postfachAddress eixsts") + @Test + void shouldKeepServiceKonto() { + var consistentFormData = service.preserveConsistency(FormDataTestFactory.create()); + + assertThat(consistentFormData.getHeader().getServiceKonto()).isEqualTo(FormHeaderTestFactory.SERVICE_KONTO); + } + + @DisplayName("should proceed without exception on missing serviceKonto") + @Test + void shouldProceedWithoutException() { + var formDataWithoutServiceKonto = FormDataTestFactory.createBuilder() + .header(FormHeaderTestFactory.createBuilder().serviceKonto(null).build()).build(); + + assertDoesNotThrow(() -> service.preserveConsistency(formDataWithoutServiceKonto)); + } + } } \ No newline at end of file diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java index 6b3bcd60c522a6ceb8a602486baa69b51a269c8c..8ab2ef0721098071ed195be0f18fcdd6a6e8f456 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaITCase.java @@ -1,6 +1,7 @@ package de.ozgcloud.eingang.xta; import static org.assertj.core.api.Assertions.*; +import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.lang.annotation.ElementType; @@ -8,7 +9,6 @@ import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; import java.util.List; -import java.util.Optional; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; @@ -18,16 +18,23 @@ import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; import org.mockito.ArgumentCaptor; import org.mockito.Captor; +import org.mockito.Mock; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.mock.mockito.MockBean; +import org.springframework.boot.test.mock.mockito.SpyBean; import org.springframework.context.annotation.Bean; import org.springframework.test.context.ActiveProfiles; import de.ozgcloud.eingang.Application; import de.ozgcloud.eingang.common.formdata.FormData; +import de.ozgcloud.eingang.router.ManagableStub; +import de.ozgcloud.eingang.router.VorgangManagerServerResolver; import de.ozgcloud.eingang.router.VorgangRemoteService; +import de.ozgcloud.vorgang.grpc.binaryFile.BinaryFileServiceGrpc.BinaryFileServiceStub; import de.ozgcloud.vorgang.vorgang.GrpcEingang; +import de.ozgcloud.vorgang.vorgang.VorgangServiceGrpc.VorgangServiceBlockingStub; +import io.grpc.Channel; @SpringBootTest(classes = { Application.class, @@ -36,8 +43,22 @@ import de.ozgcloud.vorgang.vorgang.GrpcEingang; @ActiveProfiles({ "itcase" }) class XtaITCase { - @MockBean + @SpyBean private VorgangRemoteService vorgangRemoteService; + @MockBean + private VorgangManagerServerResolver resolver; + + @Mock + private ManagableStub<VorgangServiceBlockingStub> vorgangManageableServiceStub; + @Mock + private VorgangServiceBlockingStub vorgangServiceStub; + @Mock + private ManagableStub<BinaryFileServiceStub> binaryFileManageableServiceStub; + @Mock + private BinaryFileServiceStub binaryFileServiceStub; + + @Mock + private Channel channel; @MockBean private XtaRemoteService xtaRemoteService; @@ -48,18 +69,26 @@ class XtaITCase { @Captor private ArgumentCaptor<GrpcEingang> eingangArgumentCaptor; - @Captor - private ArgumentCaptor<Optional<String>> organisationseinheitenIdArgumentCaptor; - @Autowired private XtaRunner runner; + @BeforeEach + void initTest() { + when(resolver.resolveVorgangServiceBlockingStubByOrganisationseinheitenId(any())).thenReturn(vorgangManageableServiceStub); + when(vorgangManageableServiceStub.get()).thenReturn(vorgangServiceStub); + when(vorgangServiceStub.getChannel()).thenReturn(channel); + when(channel.authority()).thenReturn("authorityDummy"); + + when(resolver.resolveBinaryFileServiceStubByOrganisationsEinheitId(any())).thenReturn(binaryFileManageableServiceStub); + when(binaryFileManageableServiceStub.get()).thenReturn(binaryFileServiceStub); + } + @DisplayName("run get xta messages") @Nested class TestRunGetXtaMessages { @BeforeEach void setup() { - when(vorgangRemoteService.createVorgang(any(), any(), any())).thenReturn("vorgangId(unused)"); + doReturn("vorgangId(unused)").when(vorgangRemoteService).createVorgang(any(), any(), any(), any()); } @DisplayName("should have three representations with pdf") @@ -190,12 +219,9 @@ class XtaITCase { verify(vorgangRemoteService, times(1)) .createVorgang( formDataArgumentCaptor.capture(), - eingangArgumentCaptor.capture(), - organisationseinheitenIdArgumentCaptor.capture() - ); + eingangArgumentCaptor.capture(), any(), any()); assertThat(formDataArgumentCaptor.getValue()).isNotNull(); - assertThat(eingangArgumentCaptor.getValue()).isNotNull(); return eingangArgumentCaptor.getValue(); } @@ -203,8 +229,7 @@ class XtaITCase { private void mockNachrichtenBroker(String zipFileName) { when(xtaRemoteService.getMessage(any(XtaMessageId.class))).thenReturn( - XtaResponseTestFactory.createGetMessageResponse(zipFileName) - ); + XtaResponseTestFactory.createGetMessageResponse(zipFileName)); when(xtaRemoteService.getMessagesMetadata()) .thenReturn(XtaResponseTestFactory.createGetStatusListResponse(List.of(zipFileName))); when(xtaRemoteService.getNextMessagesMetadata(any()))