From 6806a63e4566b892514415a5a52d7847e1b80fb1 Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Tue, 10 Sep 2024 12:52:35 +0200 Subject: [PATCH] OZG-6636 extract serviceKonto mapping to mapper class --- .../FormCycleServiceKontoMapper.java | 32 ++++++ .../eingang/formcycle/FormDataController.java | 31 +----- .../FormCycleFormDataTestFactory.java | 15 +-- .../FormCycleServiceKontoMapperTest.java | 83 ++++++++++++++ .../formcycle/FormDataControllerTest.java | 104 ++++++------------ 5 files changed, 160 insertions(+), 105 deletions(-) create mode 100644 formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapper.java create mode 100644 formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapperTest.java 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 000000000..7a994654a --- /dev/null +++ b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapper.java @@ -0,0 +1,32 @@ +package de.ozgcloud.eingang.formcycle; + +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Component; + +import de.ozgcloud.eingang.common.formdata.ServiceKonto; +import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; +import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; + +@Component +class FormCycleServiceKontoMapper { + + public ServiceKonto fromGrpc(FormCycleServiceKonto serviceKonto) { + return ServiceKonto.builder() + .type(serviceKonto.getType()) + .postfachAddress(buildPostfachAddress(serviceKonto)) + .trustLevel(StringUtils.trimToNull(serviceKonto.getTrustLevel())) + .build(); + } + + PostfachAddress buildPostfachAddress(FormCycleServiceKonto serviceKonto) { + if (!serviceKonto.hasAddress()) { + return null; + } + var address = serviceKonto.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/main/java/de/ozgcloud/eingang/formcycle/FormDataController.java b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormDataController.java index 0410813ad..128fc4e36 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 @@ -32,7 +32,6 @@ import java.util.Objects; import java.util.Optional; import java.util.UUID; -import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; @@ -45,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; @@ -67,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, @@ -99,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(); @@ -158,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(StringUtils.trimToNull(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 78691f91a..369bc8a16 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 000000000..dd44600b8 --- /dev/null +++ b/formcycle-adapter/formcycle-adapter-impl/src/test/java/de/ozgcloud/eingang/formcycle/FormCycleServiceKontoMapperTest.java @@ -0,0 +1,83 @@ +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.mockito.Spy; + +import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; +import de.ozgcloud.eingang.common.formdata.ServiceKontoTestFactory; +import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; + +class FormCycleServiceKontoMapperTest { + + @Spy + private FormCycleServiceKontoMapper mapper; + + @DisplayName("From grpc") + @Nested + class TestFromGrpc { + + @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(); + } + } + + @DisplayName("build postfacha address") + @Nested + class TestBuildPostfachAddress { + + @Test + void shouldMapPostkorbId() { + var postfachAddress = mapper.buildPostfachAddress(FormCycleServiceKontoTestFactory.create()); + + assertThat(((StringBasedIdentifier) postfachAddress.getIdentifier()).getPostfachId()) + .isEqualTo(FormCyclePostfachAddressTestFactory.POSTKORB_ID); + } + + @Test + void shouldNotMapEmptyPostkorbId() { + var postfachAddress = mapper.buildPostfachAddress(FormCycleServiceKonto.newBuilder().build()); + + assertThat(postfachAddress).isNull(); + } + + @Test + void shouldMapPostfachIdentifier() { + var postfachAddress = mapper.buildPostfachAddress(FormCycleServiceKontoTestFactory.create()); + + assertThat(getIdentifier(postfachAddress)).isEqualTo(FormCyclePostfachAddressTestFactory.POSTKORB_ID); + } + + private String getIdentifier(PostfachAddress postfachAddress) { + return ((StringBasedIdentifier) postfachAddress.getIdentifier()).getPostfachId(); + } + + @Test + void shouldMapPostfachAddressVersion() { + var postfachAddress = mapper.buildPostfachAddress(FormCycleServiceKontoTestFactory.create()); + + assertThat(postfachAddress.getVersion()).isEqualTo(FormCyclePostfachAddressTestFactory.VERSION); + } + } + } +} \ 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 2a6a232a9..4bce56df9 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 @@ -34,7 +34,6 @@ import java.io.ByteArrayOutputStream; import java.util.Collections; import java.util.Optional; -import org.apache.commons.lang3.StringUtils; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; @@ -56,9 +55,8 @@ 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.formdata.StringBasedIdentifier; import de.ozgcloud.eingang.common.vorgang.VorgangNummerSupplier; import de.ozgcloud.eingang.semantik.SemantikAdapter; import lombok.SneakyThrows; @@ -77,6 +75,8 @@ class FormDataControllerTest { private VorgangNummerSupplier vorgangNummerSupplier; @Mock private FormDataHtmlCleaner htmlCleaner; + @Mock + private FormCycleServiceKontoMapper serviceKontoMapper; private MockMvc mockMvc; @@ -136,7 +136,7 @@ class FormDataControllerTest { void shouldCallHtmlCleaner() { doPostRequest(); - verify(htmlCleaner).clean(any()); + verify(htmlCleaner).clean(mappedFormData); } @Test @@ -157,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 @@ -300,84 +301,45 @@ class FormDataControllerTest { } } - @DisplayName("ServiceKonto mapping") + @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()); - } - - @DisplayName("trustLevel") + @DisplayName("on existing") @Nested - class TestTrustLevel { + class TestOnExisting { - @Test - void shouldMap() { - var formData = controller.addServiceKonto(FormCycleFormDataTestFactory.create(), buildEmptyFormDataWithHeader()); + private final ServiceKonto serviceKonto = ServiceKontoTestFactory.create(); - assertThat(formData.getHeader().getServiceKonto().getTrustLevel()).isEqualTo(ServiceKontoTestFactory.TRUST_LEVEL); + @BeforeEach + void mock() { + when(serviceKontoMapper.fromGrpc(any())).thenReturn(serviceKonto); } @Test - void shouldMapAsNullIfEmpty() { - var serviceKontoWithEmptyTrustLevel = FormCycleServiceKontoTestFactory.createBuilder().setTrustLevel(StringUtils.EMPTY).build(); - var formCycleFormData = FormCycleFormDataTestFactory.createBuilder().setServiceKonto(serviceKontoWithEmptyTrustLevel).build(); - - var formData = controller.addServiceKonto(formCycleFormData, buildEmptyFormDataWithHeader()); + void shouldCallMapper() { + controller.addServiceKonto(FormCycleFormDataTestFactory.create(), buildEmptyFormDataWithHeader()); - assertThat(formData.getHeader().getServiceKonto().getTrustLevel()).isNull(); + verify(serviceKontoMapper).fromGrpc(FormCycleFormDataTestFactory.SERVICE_KONTO); } - } - - private String getServiceKontoType(FormData formData) { - return formData.getHeader().getServiceKonto().getType(); - } - - @Nested - class TestPostkorbIdMapping { @Test - void shouldMapPostkorbId() { + void shouldMapServiceKontoType() { var formData = controller.addServiceKonto(FormCycleFormDataTestFactory.create(), buildEmptyFormDataWithHeader()); - assertThat(getPostfachIdFormData(formData)).isEqualTo(FormCyclePostfachAddressTestFactory.POSTKORB_ID); - } - - @Test - void shouldNotMapEmptyPostkorbId() { - var postfachAddress = controller.buildPostfachAddress(FormCycleServiceKonto.newBuilder().build()); - - assertThat(postfachAddress).isNull(); - } - - @Test - void shouldMapPostfachIdentifier() { - var postfachAddress = controller.buildPostfachAddress(FormCycleServiceKontoTestFactory.create()); - - 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() { @@ -385,8 +347,8 @@ class FormDataControllerTest { } } - private String getPostfachIdFormData(FormData formData) { - return ((StringBasedIdentifier) formData.getHeader().getServiceKonto().getPostfachAddresses() - .get(0).getIdentifier()).getPostfachId(); - } -} +// private String getPostfachIdFormData(FormData formData) { +// return ((StringBasedIdentifier) formData.getHeader().getServiceKonto().getPostfachAddresses() +// .get(0).getIdentifier()).getPostfachId(); +// } +} \ No newline at end of file -- GitLab