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 27d668debea6b1b69e56f327dcdea56493b4515d..44a034a849e5b5a34f20f4a369122aac82cf6d80 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 @@ -54,8 +54,11 @@ public class FormData { @Builder.Default private Map<String, Object> formData = Collections.emptyMap(); + private int numberOfAttachments; @Singular private List<IncomingFileGroup> attachments; + + private int numberOfRepresentations; @Singular private List<IncomingFile> representations; 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 9c684458339d32dae3862512e6be32f26ac3f21d..05bdcffff581a6e8ce7e4f56fe5d86cb53054bb0 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 @@ -65,10 +65,13 @@ public class FormDataTestFactory { SUBFORM_KEY, SUBFORM_VALUE, NESTED_LIST_WITH_STRINGS_KEY, NESTED_LIST_WITH_STRINGS, NESTED_LIST_WITH_OBJECTS_KEY, NESTED_LIST_WITH_OBJECTS)) + // TODO nach entfernen des zweiten Attachments den Wert auf 1 setzen + .numberOfAttachments(2) // TODO zweites Attachment aus der TestFactory entfernen und die entsprechenden // Tests anpassen .attachments(List.of(IncomingFileGroupTestFactory.create(), IncomingFileGroupTestFactory.createBuilder().name(ATTACHMENT_GROUP_2).build())) + .numberOfRepresentations(1) .representations(List.of(IncomingFileTestFactory.create())); } diff --git a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapper.java b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapper.java index 6f633b2998461a29dcf55bcc1a95c0d87699df74..4ecc509d8213d160b34c0af4e8bfc5c98afebbe3 100644 --- a/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapper.java +++ b/enterprise-adapter/src/main/java/de/ozgcloud/eingang/enterprise/entry/FormDataMapper.java @@ -12,6 +12,7 @@ import org.mapstruct.Mapping; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormHeader; +import de.ozgcloud.eingang.common.formdata.PostfachAddressIdentifier; import de.ozgcloud.eingang.common.formdata.ServiceKonto.PostfachAddress; import de.ozgcloud.eingang.common.formdata.StringBasedIdentifier; import de.ozgcloud.eingang.common.formdata.ZustaendigeStelle; @@ -25,8 +26,10 @@ public interface FormDataMapper { @Mapping(target = "antragsteller", ignore = true) @Mapping(target = "attachment", ignore = true) @Mapping(target = "attachments", ignore = true) + @Mapping(target = "numberOfAttachments", ignore = true) @Mapping(target = "representation", ignore = true) @Mapping(target = "representations", ignore = true) + @Mapping(target = "numberOfRepresentations", ignore = true) @Mapping(target = "id", ignore = true) @Mapping(target = "header", source = "control") @@ -77,12 +80,20 @@ public interface FormDataMapper { } default int toNumericType(String type) { - return switch (type) { - case "privat" -> 0; - case "unternehmen" -> 1; - case "behoerde" -> 2; - default -> -1; - }; + switch (type) { + case "privat": + return 0; + case "unternehmen": + return 1; + case "behoerde": + return 2; + default: + return -1; + } + } + + default PostfachAddressIdentifier map(String value) { + return StringBasedIdentifier.builder().postfachId(value).build(); } } diff --git a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleFormDataMapper.java b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleFormDataMapper.java index a3367f81967d01537c7862e9594c891c5ac3e2d2..40b324dbdd4cdb25229e037a426cb8f19dd9fd07 100644 --- a/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleFormDataMapper.java +++ b/formcycle-adapter/formcycle-adapter-impl/src/main/java/de/ozgcloud/eingang/formcycle/FormCycleFormDataMapper.java @@ -33,9 +33,11 @@ import de.ozgcloud.vorgang.common.grpc.GrpcFormDataMapper; public interface FormCycleFormDataMapper { @Mapping(target = "antragsteller", ignore = true) - @Mapping(target = "id", ignore = true) @Mapping(target = "attachment", ignore = true) @Mapping(target = "attachments", ignore = true) + @Mapping(target = "id", ignore = true) + @Mapping(target = "numberOfAttachments", ignore = true) + @Mapping(target = "numberOfRepresentations", ignore = true) @Mapping(target = "representation", ignore = true) @Mapping(target = "representations", ignore = true) @Mapping(target = "zustaendigeStelle.organisationseinheitenId", source = "header.organisationsEinheitId") 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 1147f2eac92f1b21a69be5315b79d17833b48f18..06206c9f99a6bc1d9442c5452979f90090faa60a 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 @@ -49,6 +49,7 @@ 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; import lombok.RequiredArgsConstructor; import lombok.extern.log4j.Log4j2; @@ -90,7 +91,7 @@ class FormDataController { private FormData addRepresentations(Optional<Collection<MultipartFile>> files, FormData mappedFormData) { Collection<IncomingFile> representations = buildIncomingFiles(files); - return mappedFormData.toBuilder().representations(representations).build(); + return mappedFormData.toBuilder().representations(representations).numberOfRepresentations(representations.size()).build(); } private Collection<IncomingFile> buildIncomingFiles(Optional<Collection<MultipartFile>> files) { @@ -100,7 +101,7 @@ class FormDataController { private FormData addFiles(FormCycleFormData inFormData, Optional<Collection<MultipartFile>> attachments, FormData mappedFormData) { var groups = new AttachmentGroupsBuilder(inFormData.getAttachmentGroupList(), attachments).buildGroups(); - return mappedFormData.toBuilder().attachments(groups).build(); + return mappedFormData.toBuilder().attachments(groups).numberOfAttachments(FilesMapperHelper.countAttachedFiles(groups)).build(); } private IncomingFile buildIncomingFile(MultipartFile multipartFile) { 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 c1fc281ebae3ea8d44fc70863c021b26450437c2..25a588403ce89dc7c6bfa1cd89a5972f0ef2a458 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 @@ -89,7 +89,7 @@ class FormDataControllerTest { static final String VORGANG_NUMMER = "VorgangNummer"; - private final FormData mappedFormData = FormDataTestFactory.create(); + private FormData mappedFormData = FormDataTestFactory.create(); @Captor private ArgumentCaptor<FormData> formDataCaptor; @@ -168,7 +168,7 @@ class FormDataControllerTest { @BeforeEach void init() { - var formData = FormDataTestFactory.createBuilder().clearRepresentations().build(); + var formData = FormDataTestFactory.createBuilder().clearRepresentations().numberOfRepresentations(0).build(); when(mapper.toFormData(any())).thenReturn(formData); when(htmlCleaner.clean(any())).thenReturn(formData); } @@ -180,6 +180,7 @@ class FormDataControllerTest { verify(semantikAdapter).processFormData(formDataCaptor.capture()); var formData = formDataCaptor.getValue(); assertThat(formData.getRepresentations()).hasSize(1); + assertThat(formData.getNumberOfRepresentations()).isEqualTo(1); } @Test @@ -206,7 +207,7 @@ class FormDataControllerTest { class Attachments { @BeforeEach void init() { - var formData = FormDataTestFactory.createBuilder().clearAttachments().build(); + var formData = FormDataTestFactory.createBuilder().clearAttachments().numberOfAttachments(0).build(); when(mapper.toFormData(any())).thenReturn(formData); when(htmlCleaner.clean(any())).thenReturn(formData); } @@ -219,6 +220,14 @@ class FormDataControllerTest { assertThat(formDataCaptor.getValue().getAttachments()).hasSize(1); } + @Test + void shouldSetNumberOfAttachments() { + doPostRequest(); + + verify(semantikAdapter).processFormData(formDataCaptor.capture()); + assertThat(formDataCaptor.getValue().getNumberOfAttachments()).isEqualTo(1); + } + } @SneakyThrows @@ -361,6 +370,6 @@ class FormDataControllerTest { private String getPostfachIdFormData(FormData formData) { return ((StringBasedIdentifier) formData.getHeader().getServiceKonto().getPostfachAddresses() - .getFirst().getIdentifier()).getPostfachId(); + .get(0).getIdentifier()).getPostfachId(); } } diff --git a/formsolutions-adapter/src/main/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapper.java b/formsolutions-adapter/src/main/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapper.java index 3996c20101b170aa632159011ac7d0647bff898c..1f7577426808fb799db0ff3292ad43898cf652c3 100644 --- a/formsolutions-adapter/src/main/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapper.java +++ b/formsolutions-adapter/src/main/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapper.java @@ -71,12 +71,14 @@ class FormSolutionsRequestMapper { .formData(buildFormDataMap(eingang)) .attachments(attachmentMapper.mapAttachments(eingang.getZip())) .representation(buildJsonFile(jsonFile)); + var numberOfRepresentations = 1; if (Objects.nonNull(eingang.getPdf())) { builder.representation(buildPdfFile(eingang.getPdf())); + numberOfRepresentations++; } - return builder.build(); + return builder.numberOfRepresentations(numberOfRepresentations).build(); } Map<String, Object> buildFormDataMap(FormSolutionsEingang eingang) { diff --git a/formsolutions-adapter/src/test/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapperTest.java b/formsolutions-adapter/src/test/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapperTest.java index 64673c04c7272bfa49113846bf17bb36e5fe8150..bbae0375f29ff23f9c5b93ffcf0843c16762689c 100644 --- a/formsolutions-adapter/src/test/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapperTest.java +++ b/formsolutions-adapter/src/test/java/de/ozgcloud/eingang/formsolutions/FormSolutionsRequestMapperTest.java @@ -134,21 +134,21 @@ class FormSolutionsRequestMapperTest { void shouldContainPanelIdentifier() { var eingang = mapper.mapEingang(simpleJsonFile); - assertThat(getPanels(eingang).getFirst()).containsEntry(IDENTIFIER_KEY, PANEL_ID); + assertThat(getPanels(eingang).get(0)).containsEntry(IDENTIFIER_KEY, PANEL_ID); } @Test void shouldContainPanelComponets() { var eingang = mapper.mapEingang(simpleJsonFile); - assertThat(getPanels(eingang).getFirst().get(COMPONENTS)).isNotNull(); + assertThat(getPanels(eingang).get(0).get(COMPONENTS)).isNotNull(); } @Test void shouldContainTextComponets() { var eingang = mapper.mapEingang(simpleJsonFile); - assertThat(getComponents(eingang).getFirst()) + assertThat(getComponents(eingang).get(0)) .containsEntry(IDENTIFIER_KEY, COMPONENT_ID) .containsEntry(STRING_VALUE, COMPONENT_VALUE); } @@ -168,14 +168,14 @@ class FormSolutionsRequestMapperTest { void shouldContainGroup() { var eingang = mapper.mapEingang(nestedComponenetJsonFile); - assertThat(getComponents(eingang).getFirst()).containsEntry(IDENTIFIER_KEY, OBJEKTGRUPPE_0); + assertThat(getComponents(eingang).get(0)).containsEntry(IDENTIFIER_KEY, OBJEKTGRUPPE_0); } @Test void shouldContainDateField() { var eingang = mapper.mapEingang(nestedComponenetJsonFile); - assertThat(getNestedComponents(eingang).getFirst()) + assertThat(getNestedComponents(eingang).get(0)) .containsEntry(IDENTIFIER_KEY, DATE_COMPONENT_ID) .containsEntry(STRING_VALUE, DATE_COMPONENT_VALUE); } @@ -184,16 +184,12 @@ class FormSolutionsRequestMapperTest { @SuppressWarnings("unchecked") private List<Map<String, Object>> getComponents(FormSolutionsEingang eingang) { - return (List<Map<String, Object>>) getPanels(eingang).getFirst().get(COMPONENTS); + return (List<Map<String, Object>>) getPanels(eingang).get(0).get(COMPONENTS); } @SuppressWarnings("unchecked") private List<Map<String, Object>> getNestedComponents(FormSolutionsEingang eingang) { - return (List<Map<String, Object>>) ((List<Map<String, Object>>) getPanels(eingang) - .getFirst() - .get(COMPONENTS)) - .getFirst() - .get(COMPONENTS); + return (List<Map<String, Object>>) ((List<Map<String, Object>>) getPanels(eingang).get(0).get(COMPONENTS)).get(0).get(COMPONENTS); } @SuppressWarnings("unchecked") @@ -254,6 +250,13 @@ class FormSolutionsRequestMapperTest { assertThat(result.getRepresentations()).hasSize(2); } + + @Test + void shouldAddNumberOfRepresentations() { + var result = mapper.map(jsonFile); + + assertThat(result.getNumberOfRepresentations()).isEqualTo(2); + } } } diff --git a/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/IntelliFormMapper.java b/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/IntelliFormMapper.java index 8ec4b78eb890c52cb73deb7638de95e39dd0dfdd..b073dd971016dbdf7b7930efc27309a1682eb65c 100644 --- a/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/IntelliFormMapper.java +++ b/intelliform-adapter/src/main/java/de/ozgcloud/eingang/intelliform/IntelliFormMapper.java @@ -65,18 +65,20 @@ class IntelliFormMapper { // Find ids of <file> attachments var attachmentFileIds = findAttachmentIds(document); + var attachments = attachmentFileIds.stream() + .map(id -> getIncomingFileById(id, incomingFileMap)) + .map(this::createSingularFileGroup) + .toList(); + var representations = getNamesWithout(incomingFileMap.keySet(), attachmentFileIds).stream() + .map(id -> getIncomingFileById(id, incomingFileMap)) + .toList(); return FormData.builder() // Put each <file> attachment in a separate file group - .attachments(attachmentFileIds.stream() - .map(id -> getIncomingFileById(id, incomingFileMap)) - .map(this::createSingularFileGroup) - .toList() - ) + .attachments(attachments) + .numberOfAttachments(attachments.size()) // If a deposit attachment is not referenced by <file> it is interpreted as a representation - .representations(getNamesWithout(incomingFileMap.keySet(), attachmentFileIds).stream() - .map(id -> getIncomingFileById(id, incomingFileMap)) - .toList() - ) + .representations(representations) + .numberOfRepresentations(representations.size()) .build(); } diff --git a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/IntelliFormMapperTest.java b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/IntelliFormMapperTest.java index 6f56380d5accd9f047942a21d6546a2ec9638ead..c394c2b2ee230d008e392252f11067af34032d74 100644 --- a/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/IntelliFormMapperTest.java +++ b/intelliform-adapter/src/test/java/de/ozgcloud/eingang/intelliform/IntelliFormMapperTest.java @@ -106,6 +106,14 @@ class IntelliFormMapperTest { .toList(); assertThat(incomingFileIds).contains(PNG_ATTACHMENT_ID); } + + @DisplayName("should return with number of representations") + @Test + void shouldReturnWithNumberOfRepresentations() { + var formData = doMapping(); + + assertThat(formData.getNumberOfRepresentations()).isEqualTo(2); + } } @DisplayName("with empty attachments") 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 965ee6f81f5bec350c14bfae7b4a324faf4ccfeb..74607f148396fb856dd86a4716f5f67f0d2f4019 100644 --- a/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java +++ b/router/src/main/java/de/ozgcloud/eingang/router/GrpcEingangMapper.java @@ -23,7 +23,7 @@ */ package de.ozgcloud.eingang.router; -import java.util.List; +import java.util.UUID; import org.mapstruct.CollectionMappingStrategy; import org.mapstruct.Mapper; @@ -32,6 +32,8 @@ 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,13 +54,15 @@ public interface GrpcEingangMapper { @Mapping(source = "antragsteller.data", target = "antragsteller.otherData") @Mapping(source = "attachments", target = "attachmentsList") - @Mapping(source = "attachments", target = "numberOfAttachments") @Mapping(source = "representations", target = "representationsList") - @Mapping(source = "representations", target = "numberOfRepresentations") GrpcEingang toEingang(FormData formData); - default int listToSize(List<?> list) { - return list.size(); + default ByteString byteArrayToByteString(byte[] byteArray) { + if (byteArray == null) { + return null; + } + + return ByteString.copyFrom(byteArray); } @Mapping(source = "files", target = "filesList") @@ -77,6 +81,10 @@ public interface GrpcEingangMapper { GrpcAntragsteller toAntragsteller(Antragsteller antragsteller); + default String uuidToString(UUID id) { + return id.toString(); + } + // FIXME map representations and attachments @Mapping(target = "attachment", ignore = true) @Mapping(target = "attachments", ignore = true) diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/FilesMapperHelper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/FilesMapperHelper.java index 5b74b88e7019d211662de352ad6327e62257fe7a..3e0ccb8a863a59546dd91ba4749b399bc5cfd952 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/FilesMapperHelper.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/FilesMapperHelper.java @@ -23,8 +23,10 @@ */ package de.ozgcloud.eingang.semantik.enginebased; +import java.util.Collection; import java.util.List; import java.util.Map; +import java.util.Objects; import java.util.Optional; import de.ozgcloud.eingang.common.formdata.FormData; @@ -53,6 +55,10 @@ public class FilesMapperHelper { return getMappedFiles(formData).map(mappedFiles -> (List<IncomingFile>) mappedFiles.get(REPRESENTATIONS)); } + public static int countAttachedFiles(Collection<IncomingFileGroup> fileGroups) { + return fileGroups.stream().filter(Objects::nonNull).mapToInt(group -> group.getFiles().size()).sum(); + } + public static FormData removeProcessedData(FormData formData) { return FormDataUtils.from(formData).remove(FIELD_NAME_MAPPED_FILES).build(); } diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAttachedFilesMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAttachedFilesMapper.java index aefaaa9778895bf73c5810d02c8679b74027e0e3..6daeceab9dfd7e9f397b46fa087792ae4dff7560 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAttachedFilesMapper.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAttachedFilesMapper.java @@ -35,9 +35,11 @@ class AfmAttachedFilesMapper implements AfmEngineBasedMapper { public FormData parseFormData(FormData formData) { var formDataBuilder = formData.toBuilder(); FilesMapperHelper.getAttachedFileGroups(formData) - .ifPresent(formDataBuilder::attachments); + .ifPresent(fileGroups -> formDataBuilder + .attachments(fileGroups) + .numberOfAttachments(FilesMapperHelper.countAttachedFiles(fileGroups))); FilesMapperHelper.getRepresentations(formData) - .ifPresent(formDataBuilder::representations); + .ifPresent(representations -> formDataBuilder.representations(representations).numberOfRepresentations(representations.size())); return FilesMapperHelper.removeProcessedData(formDataBuilder.build()); } diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsFilesMapper.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsFilesMapper.java index 2258394fac564f349a94b229fa8b610e631a168e..d63b1e4f5a502a5efce7f280b107422e0ee83a64 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsFilesMapper.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/enginebased/formsolutions/FormSolutionsFilesMapper.java @@ -54,7 +54,7 @@ class FormSolutionsFilesMapper implements FormSolutionsEngineBasedMapper { if (attachments.isEmpty()) { return formDataBuilder.build(); } - return formDataBuilder.attachments(attachments).build(); + return formDataBuilder.attachments(attachments).numberOfAttachments(FilesMapperHelper.countAttachedFiles(attachments)).build(); } List<IncomingFileGroup> readAttachments(FormData srcFormData) { 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 19a6f7ef707aaaeac2a5f7044ed3d4bf852e63ba..cfbf8d3481cd4679412ceceb84f886152467c30a 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 @@ -35,6 +35,7 @@ import org.junit.jupiter.api.Test; import de.ozgcloud.eingang.common.formdata.FormData; import de.ozgcloud.eingang.common.formdata.FormDataTestFactory; +import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; import de.ozgcloud.eingang.common.formdata.IncomingFileGroupTestFactory; import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; @@ -84,7 +85,7 @@ class FilesMapperHelperTest { } @Test - void shouldReturnRepresentations() { + void souldReturnRepresentations() { var incomingFileGroups = List.of(IncomingFileTestFactory.create()); Map<String, Object> mappedFilesMap = Map.of(FilesMapperHelper.FIELD_NAME_MAPPED_FILES, Map.of(FilesMapperHelper.REPRESENTATIONS, incomingFileGroups)); @@ -104,6 +105,48 @@ class FilesMapperHelperTest { } } + @Nested + class TestAttachmentCount { + + @Test + void shouldCountEmptyList() { + var counter = FilesMapperHelper.countAttachedFiles(List.of()); + + assertThat(counter).isZero(); + } + + @Test + void shouldCountNoAttachedFiles() { + var counter = FilesMapperHelper.countAttachedFiles(List.of(IncomingFileGroupTestFactory.createBuilder().clearFiles().build())); + + assertThat(counter).isZero(); + } + + @Test + void shouldCountOneAttachment() { + var fileGroup = List.of(IncomingFileGroupTestFactory.createBuilder().file(IncomingFileTestFactory.create()).build()); + + var counter = FilesMapperHelper.countAttachedFiles(fileGroup); + + assertThat(counter).isEqualTo(2); + } + + @Test + void shouldCountAllAttachments() { + var counter = FilesMapperHelper.countAttachedFiles(createFileGroupsWith4Files()); + + assertThat(counter).isEqualTo(4); + } + + private static List<IncomingFileGroup> createFileGroupsWith4Files() { + return List.of(IncomingFileGroupTestFactory.createBuilder() + .clearFiles() + .files(List.of(IncomingFileTestFactory.create(), IncomingFileTestFactory.create(), IncomingFileTestFactory.create())).build(), + IncomingFileGroupTestFactory.create()); + + } + } + @Nested class TestRemoveProcessedData { @@ -130,7 +173,9 @@ class FilesMapperHelperTest { assertThat(cleanedFormData.getHeader()).isEqualTo(formData.getHeader()); assertThat(cleanedFormData.getZustaendigeStelle()).isEqualTo(formData.getZustaendigeStelle()); assertThat(cleanedFormData.getAntragsteller()).isEqualTo(formData.getAntragsteller()); + assertThat(cleanedFormData.getNumberOfAttachments()).isEqualTo(formData.getNumberOfAttachments()); assertThat(cleanedFormData.getAttachments()).isEqualTo(formData.getAttachments()); + assertThat(cleanedFormData.getNumberOfRepresentations()).isEqualTo(formData.getNumberOfRepresentations()); assertThat(cleanedFormData.getRepresentations()).isEqualTo(formData.getRepresentations()); assertThat(cleanedFormData.getFormData()).containsAllEntriesOf(formData.getFormData()); } diff --git a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAttachedFilesMapperTest.java b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAttachedFilesMapperTest.java index 8da61c1b9b45fc394f7b679db1072f067fb7195e..2643740ae163291151e0573b6b9537514ce0b831 100644 --- a/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAttachedFilesMapperTest.java +++ b/semantik-adapter/src/test/java/de/ozgcloud/eingang/semantik/enginebased/afm/AfmAttachedFilesMapperTest.java @@ -34,6 +34,7 @@ import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; import de.ozgcloud.eingang.common.formdata.IncomingFileGroupTestFactory; import de.ozgcloud.eingang.common.formdata.IncomingFileTestFactory; import de.ozgcloud.eingang.semantik.enginebased.FilesMapperHelper; +import de.ozgcloud.eingang.semantik.enginebased.afm.AfmAttachedFilesMapper; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; @@ -46,13 +47,13 @@ class AfmAttachedFilesMapperTest { @InjectMocks private AfmAttachedFilesMapper mapper; - private final IncomingFileGroup attachmentWithMultipleFiles = IncomingFileGroupTestFactory.createBuilder() + private IncomingFileGroup attachmentWithMultipleFiles = IncomingFileGroupTestFactory.createBuilder() .name("anotherAttachment") .clearFiles() .files(List.of(IncomingFileTestFactory.create(), IncomingFileTestFactory.create())) .build(); - private final FormData formData = FormDataTestFactory.createBuilder() + private FormData formData = FormDataTestFactory.createBuilder() .clearAttachments() .formData(Map.of(FilesMapperHelper.FIELD_NAME_MAPPED_FILES, Map.of(FilesMapperHelper.ATTACHMENTS, List.of(IncomingFileGroupTestFactory.create(), attachmentWithMultipleFiles)))) @@ -70,6 +71,13 @@ class AfmAttachedFilesMapperTest { assertThat(parsedFormData.getAttachments().get(1).getFiles()).hasSize(2); } + @Test + void shouldSetNumberOfAttachments() { + var parsedFormData = parseFormData(); + + assertThat(parsedFormData.getNumberOfAttachments()).isEqualTo(3); + } + @Test void shouldMapRepresentations() { var parsedFormData = parseFormData(); @@ -77,6 +85,13 @@ class AfmAttachedFilesMapperTest { assertThat(parsedFormData.getRepresentations()).hasSize(1); } + @Test + void shouldSetNumberOfRepresentations() { + var parsedFormData = parseFormData(); + + assertThat(parsedFormData.getNumberOfRepresentations()).isEqualTo(1); + } + @Test void shouldRemoveFilesFromMap() { var parsedFormData = parseFormData(); 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 d7ea810f4687a488400fb334987dce12546f2ca9..47c563508627226dac6341fe8d6e4b36f9062b70 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 @@ -35,6 +35,7 @@ import java.util.Optional; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; 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.test.context.ActiveProfiles; @@ -49,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.semantik.SemantikAdapter; import lombok.SneakyThrows; @SpringBootTest @@ -58,15 +60,18 @@ public class FormSolutionsEngineBasedAdapterITCase { private static final String ZIP_CONTENT_TYPE = "application/zip"; private static final String FILE_NAME_ZIP_ATTACHMENT = "formsolutions/attachment-2files.zip"; + @MockBean + private SemantikAdapter semantikAdapter; + @SpyBean private FormSolutionsEngineBasedAdapter engineAdapter; - private final ObjectMapper objectMapper = new ObjectMapper(); + private ObjectMapper objectMapper = new ObjectMapper(); @Nested class TestEngineBasedAdapter { - private final FormData formData = prepareTestData(); + private FormData formData = prepareTestData(); @Test void shouldMap() { @@ -126,8 +131,8 @@ public class FormSolutionsEngineBasedAdapterITCase { void shouldMapAttachment() { var data = engineAdapter.parseFormData(formData); - assertThat(data.getAttachments()).hasSize(2); - assertThat(data.getAttachments().getFirst()).isNotNull(); + assertThat(data.getAttachments().get(0)).isNotNull(); + assertThat(data.getNumberOfAttachments()).isEqualTo(2); } } diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java index 79cfdc3eefff7301f9f4daff34e7603f861710e6..8a47353450db35399e0a2117c2e99296271d5a5c 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaMessageMapper.java @@ -22,6 +22,9 @@ interface XtaMessageMapper { @Mapping(target = "id", ignore = true) @Mapping(target = "zustaendigeStelle", ignore = true) @Mapping(target = "header", source = "metaData") + @Mapping(target = "numberOfAttachments", ignore = true) + // TODO: Eine Lösung, bei der fromData nicht zweimal gebaut wird wäre gut + @Mapping(target = "numberOfRepresentations", dependsOn = "representations", expression = "java(formData.build().getRepresentations().size())") @Mapping(target = "representations", source = "xdomeaMessageData") @Mapping(target = "representation", ignore = true) @Mapping(target = "attachment", ignore = true) diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormDataTestFactory.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormDataTestFactory.java index 374b4de0335bdfadae06528258db5cae4e782b4c..509880984a7ee0a50eb1fa424541121e7c58909e 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormDataTestFactory.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/FormDataTestFactory.java @@ -10,7 +10,8 @@ class FormDataTestFactory { static FormData.FormDataBuilder createBuilder() { return FormData.builder() - .header(FormHeaderTestFactory.create()); + .header(FormHeaderTestFactory.create()) + .numberOfRepresentations(1); } } 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 ca04025ae7166dec4834dd0d5a8f0152b1c460c3..568e96eaecc9c54303b2f276f96f03825ad2a7c7 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 @@ -71,6 +71,7 @@ class XtaITCase { verify(vorgangRemoteService).createVorgang(formDataCaptor.capture(), any(), any()); assertThat(formDataCaptor.getValue().getRepresentations()).hasSize(3); + assertThat(formDataCaptor.getValue().getNumberOfRepresentations()).isEqualTo(3); } @Test @@ -79,6 +80,7 @@ class XtaITCase { verify(vorgangRemoteService).createVorgang(formDataCaptor.capture(), any(), any()); assertThat(formDataCaptor.getValue().getAttachments()).isEmpty(); + assertThat(formDataCaptor.getValue().getNumberOfAttachments()).isEqualTo(0); } @Test diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java index 52eb46a971f9c52dd4c6289b44812a9e464695e9..d96b24823708bf07e7fa7d5252567fc9ebc52e5d 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaMessageMapperTest.java @@ -46,6 +46,13 @@ class XtaMessageMapperTest { assertThat(formData.getRepresentations()).containsExactly(xdomeaMessageData.metadataFile(), xdomeaMessageData.representations().getFirst()); } + @Test + void shouldSetNumberOfRepresentations() { + var formData = doMapping(); + + assertThat(formData.getNumberOfRepresentations()).isEqualTo(2); + } + @Test void shouldMapAttachments() { var formData = doMapping(); diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceITCase.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceITCase.java index bddfe81f7734a942b1f4e7a16545aa7c39e31516..dee42d141cdda5359f0409c13c2290927604d2e4 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceITCase.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceITCase.java @@ -84,6 +84,7 @@ class XtaServiceITCase { // Expect that there are 3 files (xdomea.xml, intelliform.xml and intelliform.pdf) assertThat(firstFormData.getRepresentations()).hasSize(3); + assertThat(firstFormData.getNumberOfRepresentations()).isEqualTo(3); } @DisplayName("should unzip correct number of attachments") @Test