diff --git a/common/pom.xml b/common/pom.xml index 7bcf1e69a7d60e3ba3f330eb38d46ddb401ff291..e66f9de5e71c82b7f7770f279a6bb569aa4e180e 100644 --- a/common/pom.xml +++ b/common/pom.xml @@ -31,7 +31,7 @@ <parent> <groupId>de.ozgcloud.eingang</groupId> <artifactId>eingang-manager</artifactId> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> <relativePath>../</relativePath> </parent> <artifactId>common</artifactId> diff --git a/enterprise-adapter/pom.xml b/enterprise-adapter/pom.xml index 2b493a100ac22855b3428759f89b1748c29dadce..c6e1b63eed24a645cabca8e115117a9598796829 100644 --- a/enterprise-adapter/pom.xml +++ b/enterprise-adapter/pom.xml @@ -4,7 +4,7 @@ <parent> <groupId>de.ozgcloud.eingang</groupId> <artifactId>eingang-manager</artifactId> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> </parent> <artifactId>enterprise-adapter</artifactId> <name>EM - Enterprise Interface Adapter</name> diff --git a/fim-adapter/pom.xml b/fim-adapter/pom.xml index e7dde98a9f4d4cb33a1b755810a51be5287675d5..5d295c8efd9de8a365adc7f2c8f60398e80a3783 100644 --- a/fim-adapter/pom.xml +++ b/fim-adapter/pom.xml @@ -4,7 +4,7 @@ <parent> <groupId>de.ozgcloud.eingang</groupId> <artifactId>eingang-manager</artifactId> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> </parent> <artifactId>fim-adapter</artifactId> <name>Eingangs Adapter - FIM</name> diff --git a/formcycle-adapter/formcycle-adapter-impl/pom.xml b/formcycle-adapter/formcycle-adapter-impl/pom.xml index 4f85d9512aabbbe2a758a5893be9762303ff656e..acaf6aa194af0cd2a4da1fa03b3613040b777d08 100644 --- a/formcycle-adapter/formcycle-adapter-impl/pom.xml +++ b/formcycle-adapter/formcycle-adapter-impl/pom.xml @@ -29,7 +29,7 @@ <parent> <groupId>de.ozgcloud.eingang</groupId> <artifactId>formcycle-adapter</artifactId> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> <relativePath>../</relativePath> </parent> 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 index 3aceb97490468096ade62e9803525e90f0cf8a03..5185c70c92b3dff61db99fa0458be3019195a840 100644 --- 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 @@ -12,11 +12,13 @@ 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; +import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory; @Mapper(collectionMappingStrategy = CollectionMappingStrategy.ADDER_PREFERRED, unmappedTargetPolicy = ReportingPolicy.WARN) interface FormCycleServiceKontoMapper { @Mapping(target = "postfachAddress", ignore = true) + @Mapping(target = "type", constant = ServiceKontoFactory.POSTFACH_TYPE_BAYERN_ID) @Mapping(target = "postfachAddresses", expression = "java(fromGrpcPostfachAddresses(serviceKonto))") ServiceKonto fromGrpc(FormCycleServiceKonto serviceKonto); 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 index b328284eb6b3ab4fdf010dd4240d4726ebd13209..562bd419be832ff41a59fd1eb2215ed32961d2bd 100644 --- 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 @@ -11,6 +11,7 @@ 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; +import de.ozgcloud.eingang.semantik.common.ServiceKontoFactory; class FormCycleServiceKontoMapperTest { @@ -20,6 +21,13 @@ class FormCycleServiceKontoMapperTest { @Nested class TestFromGrpcServiceKonto { + @Test + void shouldMapType() { + var result = mapper.fromGrpc(FormCycleServiceKontoTestFactory.create()); + + assertThat(result.getType()).isEqualTo(ServiceKontoFactory.POSTFACH_TYPE_BAYERN_ID); + } + @DisplayName("trustLevel") @Nested class TestTrustLevel { diff --git a/formcycle-adapter/formcycle-adapter-interface/pom.xml b/formcycle-adapter/formcycle-adapter-interface/pom.xml index d396e859955e6fe0fc0bead6994fb69e852e668f..212ea6ce2080c3141db16dcce08e4ad9e165081a 100644 --- a/formcycle-adapter/formcycle-adapter-interface/pom.xml +++ b/formcycle-adapter/formcycle-adapter-interface/pom.xml @@ -36,7 +36,7 @@ <groupId>de.ozgcloud.eingang</groupId> <artifactId>formcycle-adapter-interface</artifactId> <name>EM - Formcycle Adapter - Interface</name> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> <properties> <vorgang-manager.version>2.0.0</vorgang-manager.version> diff --git a/formcycle-adapter/pom.xml b/formcycle-adapter/pom.xml index 6c060d69a936ed7a12926cd27db9f4788e720fb4..805aff7e18bc5d23d3d8b6265b2bfabbb89d5a5e 100644 --- a/formcycle-adapter/pom.xml +++ b/formcycle-adapter/pom.xml @@ -29,7 +29,7 @@ <parent> <groupId>de.ozgcloud.eingang</groupId> <artifactId>eingang-manager</artifactId> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> </parent> <artifactId>formcycle-adapter</artifactId> diff --git a/formsolutions-adapter/pom.xml b/formsolutions-adapter/pom.xml index 325327a0b108097786653edf290990debcae1c97..7c4d05dfb88daea14a0591721c0c9c375b28c793 100644 --- a/formsolutions-adapter/pom.xml +++ b/formsolutions-adapter/pom.xml @@ -30,7 +30,7 @@ <parent> <groupId>de.ozgcloud.eingang</groupId> <artifactId>eingang-manager</artifactId> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> <relativePath>../</relativePath> </parent> diff --git a/forwarder/pom.xml b/forwarder/pom.xml index 39605a3df67fbdb757c543b6b89f4484b043dbb7..b5b7c038720faba316e17f03a5087190ac4f8381 100644 --- a/forwarder/pom.xml +++ b/forwarder/pom.xml @@ -29,7 +29,7 @@ <parent> <groupId>de.ozgcloud.eingang</groupId> <artifactId>eingang-manager</artifactId> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> <relativePath>../</relativePath> </parent> diff --git a/intelliform-adapter/pom.xml b/intelliform-adapter/pom.xml index a3dfe80bb8058225d880fe2b0fb834ad91f00ab9..204475fab82986bf4be8995be3ff2496db1eedcf 100644 --- a/intelliform-adapter/pom.xml +++ b/intelliform-adapter/pom.xml @@ -31,7 +31,7 @@ <parent> <groupId>de.ozgcloud.eingang</groupId> <artifactId>eingang-manager</artifactId> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> <relativePath>../</relativePath> </parent> diff --git a/pom.xml b/pom.xml index e8c8ec64c40f1795975863be8bc7a4fe76ef4549..2bc36cf0eb9b5acdfff4f9a2b30d9e965a587f0a 100644 --- a/pom.xml +++ b/pom.xml @@ -37,7 +37,7 @@ <groupId>de.ozgcloud.eingang</groupId> <artifactId>eingang-manager</artifactId> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> <packaging>pom</packaging> <name>OZG-Cloud Eingang Manager</name> diff --git a/router/pom.xml b/router/pom.xml index 2ace78948a637913a36b0f781609cfaaca7843fb..1f6e490664ce095a41d7c6c28b4f5bf5d27dbf59 100644 --- a/router/pom.xml +++ b/router/pom.xml @@ -29,7 +29,7 @@ <parent> <groupId>de.ozgcloud.eingang</groupId> <artifactId>eingang-manager</artifactId> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> <relativePath>../</relativePath> </parent> diff --git a/semantik-adapter/pom.xml b/semantik-adapter/pom.xml index 18c5fe1bb8ace2afd5e890daf9196ed782046a29..6f92d8bfcd6860171069b9c79339bb28e4095b8f 100644 --- a/semantik-adapter/pom.xml +++ b/semantik-adapter/pom.xml @@ -30,7 +30,7 @@ <parent> <groupId>de.ozgcloud.eingang</groupId> <artifactId>eingang-manager</artifactId> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> </parent> <artifactId>semantik-adapter</artifactId> diff --git a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactory.java b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactory.java index 0b7320fbe23a0a9820ccebfa9c82fd78347798f4..c8eeb923582f97ede8c3b9bee2726810a2ead349 100644 --- a/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactory.java +++ b/semantik-adapter/src/main/java/de/ozgcloud/eingang/semantik/common/ServiceKontoFactory.java @@ -23,7 +23,7 @@ public class ServiceKontoFactory { public static final int POSTFACH_ADDRESS_DEFAULT = 1; public static final String POSTFACH_TYPE_OSI = "OSI"; - public static final String POSTFACH_TYPE_BAYERN_ID = "BayernID"; + public static final String POSTFACH_TYPE_BAYERN_ID = "BAYERN_ID"; public static final String POSTFACH_VERSION = "1.0"; public static final String KEY_BAYERN_ID_POSTFACH_ID = "u:saml_legacypostkorbhandle"; public static final String KEY_BAYERN_ID_TRUST_LEVEL = "u:saml_eid_citizen_qaa_level"; diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml index c68b9d69be88de512c6cca216e756aad79d6f46f..b59bb1cc41fbfbba0098590a4986042bd510300e 100644 --- a/src/main/helm/templates/deployment.yaml +++ b/src/main/helm/templates/deployment.yaml @@ -79,7 +79,7 @@ spec: - name: ozgcloud_adapter_targetVorgangManagerName value: {{ (.Values.routing).targetVorgangManagerName}} - name: grpc_client_vorgang-manager-{{ (.Values.routing).targetVorgangManagerName}}_address - value: 'vorgang-manager.{{ coalesce (.Values.routing).targetNamespace .Release.Namespace }}:9090' + value: 'dns:///vorgang-manager.{{ coalesce (.Values.routing).targetNamespace .Release.Namespace }}:9090' - name: grpc_client_vorgang-manager-{{ (.Values.routing).targetVorgangManagerName}}_negotiationType value: {{ (.Values.routing).negotiationType | default "TLS" }} {{- end }} diff --git a/src/test/helm/deployment_routing_strategy_env_test.yaml b/src/test/helm/deployment_routing_strategy_env_test.yaml index 8ae56386a24a3f0f74e3bdb3395b2aed9f4d2be4..e70cff6f10669ad7574fb80dcbf96f3c11aee715 100644 --- a/src/test/helm/deployment_routing_strategy_env_test.yaml +++ b/src/test/helm/deployment_routing_strategy_env_test.yaml @@ -50,6 +50,12 @@ tests: content: name: grpc_client_vorgang-manager-vorgang-manager_negotiationType value: TLS + - contains: + path: spec.template.spec.containers[0].env + content: + name: grpc_client_vorgang-manager-vorgang-manager_address + value: dns:///vorgang-manager.sh-helm-test:9090 + - it: validate routing infos set: routing: diff --git a/src/test/helm/ingress_create_or_not.yaml b/src/test/helm/ingress_create_or_not_test.yaml similarity index 100% rename from src/test/helm/ingress_create_or_not.yaml rename to src/test/helm/ingress_create_or_not_test.yaml diff --git a/src/test/helm/ingress_nginx_tests.yaml b/src/test/helm/ingress_nginx_test.yaml similarity index 100% rename from src/test/helm/ingress_nginx_tests.yaml rename to src/test/helm/ingress_nginx_test.yaml diff --git a/xta-adapter/pom.xml b/xta-adapter/pom.xml index e96fb6c3dd46267839a27a0e6c9b19dea237b91d..85cfea860833d98a5430fcf0af9fb27166654202 100644 --- a/xta-adapter/pom.xml +++ b/xta-adapter/pom.xml @@ -4,7 +4,7 @@ <parent> <groupId>de.ozgcloud.eingang</groupId> <artifactId>eingang-manager</artifactId> - <version>2.13.0-SNAPSHOT</version> + <version>2.14.0-SNAPSHOT</version> </parent> <artifactId>xta-adapter</artifactId> <name>Eingangs Adapter - XTA</name> diff --git a/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml b/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml index 3835e3ec440eebbd71cdb1bb5c21bf366add83c6..761959137f507e67d20c246ec86bc7393c52a75d 100644 --- a/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml +++ b/xta-adapter/src/main/helm/templates/xta_adapter_cronjob.yaml @@ -81,7 +81,7 @@ spec: - name: ozgcloud_adapter_targetVorgangManagerName value: {{ (.Values.routing).targetVorgangManagerName}} - name: grpc_client_vorgang-manager-{{ (.Values.routing).targetVorgangManagerName }}_address - value: 'vorgang-manager.{{ coalesce (.Values.routing).targetNamespace .Release.Namespace }}:9090' + value: 'dns:///vorgang-manager.{{ coalesce (.Values.routing).targetNamespace .Release.Namespace }}:9090' - name: grpc_client_vorgang-manager-{{ (.Values.routing).targetVorgangManagerName }}_negotiationType value: {{ (.Values.routing).negotiationType | default "PLAINTEXT" }} {{- end }} diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaIncomingFilesMapper.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaIncomingFilesMapper.java index 8041810ed8fbc3222fd10c06a4e64a6a760e9bf4..891512d2f4b878594ee813dbe3cdf5d9c4bfdb4c 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaIncomingFilesMapper.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaIncomingFilesMapper.java @@ -26,10 +26,8 @@ package de.ozgcloud.eingang.xta; import java.util.Collection; import java.util.List; import java.util.Objects; -import java.util.function.Predicate; import java.util.stream.Stream; -import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; import org.springframework.stereotype.Component; import de.ozgcloud.eingang.common.formdata.IncomingFile; @@ -44,14 +42,11 @@ class XtaIncomingFilesMapper { private final ZipFileExtractor zipFileExtractor; - public static final String ZIP_CONTENT_TYPE = "application/zip"; - static final Predicate<IncomingFile> IS_ZIP_FILE = contentType -> ZIP_CONTENT_TYPE.equals(contentType.getContentType()); - public List<IncomingFile> toIncomingFiles(Collection<XtaFile> messageFiles) { if (Objects.nonNull(messageFiles)) { return messageFiles.stream() .map(this::toIncomingFile) - .flatMap(this::extractZip) + .flatMap(this::tryToExtractZip) .toList(); } return List.of(); @@ -66,16 +61,11 @@ class XtaIncomingFilesMapper { .build(); } - Stream<IncomingFile> extractZip(IncomingFile incomingFile) { - if (IS_ZIP_FILE.test(incomingFile)) { - try { - List<IncomingFile> extractedZips = zipFileExtractor.extractIncomingFilesSafely(incomingFile); - return extractedZips.stream(); - } catch (RuntimeException e) { - LOG.error("Cannot read source ZIP. Not extracting file", e); - return Stream.of(incomingFile); - } - } else { + Stream<IncomingFile> tryToExtractZip(IncomingFile incomingFile) { + try { + List<IncomingFile> extractedZips = zipFileExtractor.extractIncomingFilesSafely(incomingFile); + return extractedZips.stream(); + } catch (RuntimeException e) { return Stream.of(incomingFile); } } diff --git a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java index d5a8d537c84074c7a8bd5849fd744b320eeb3820..f8643d2fb5221c5e3585e4436c757a015cb7d3ee 100644 --- a/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java +++ b/xta-adapter/src/main/java/de/ozgcloud/eingang/xta/XtaService.java @@ -4,6 +4,7 @@ import static java.util.Collections.*; import java.util.Collection; import java.util.List; +import java.util.Optional; import java.util.Spliterators; import java.util.stream.Stream; import java.util.stream.StreamSupport; @@ -44,7 +45,10 @@ class XtaService { private XtaCurrentIdentifierService service; public Stream<FormData> getMessages() { - return createXtaMessageStream().filter(this::isSupportedMessageType).map(this::getFormData); + return createXtaMessageStream() + .filter(this::isSupportedMessageType) + .map(this::getFormDataIfNoRuntimeException) + .flatMap(Optional::stream); } Stream<XtaMessageMetaData> createXtaMessageStream() { @@ -66,7 +70,16 @@ class XtaService { return false; } - public FormData getFormData(@NonNull XtaMessageMetaData metaData) { + Optional<FormData> getFormDataIfNoRuntimeException(@NonNull XtaMessageMetaData metaData) { + try { + return Optional.of(getFormData(metaData)); + } catch (RuntimeException exception) { + LOG.error("Failed to process xta message (id: %s)".formatted(metaData.getMessageId()), exception); + return Optional.empty(); + } + } + + FormData getFormData(@NonNull XtaMessageMetaData metaData) { var msg = remoteService.getMessage(metaData.getMessageId()); var incomingFiles = xtaIncomingFilesMapper.toIncomingFiles(msg.getMessageFiles()); var representationsAttachmentsPair = getRepresentationsAttachmentsPair(metaData, incomingFiles); diff --git a/xta-adapter/src/test/helm/xta_adapter_cronjob_env_test.yaml b/xta-adapter/src/test/helm/xta_adapter_cronjob_env_test.yaml index 77547800e84d3f8f60fe508c57df9e5f7d0a0de6..e247e20d6703fa518cf1eb74616e5447f4fd8a2e 100644 --- a/xta-adapter/src/test/helm/xta_adapter_cronjob_env_test.yaml +++ b/xta-adapter/src/test/helm/xta_adapter_cronjob_env_test.yaml @@ -107,7 +107,7 @@ tests: path: spec.jobTemplate.spec.template.spec.containers[0].env content: name: grpc_client_vorgang-manager-vorgang-manager_address - value: 'vorgang-manager.helm-test:9090' + value: 'dns:///vorgang-manager.helm-test:9090' - contains: path: spec.jobTemplate.spec.template.spec.containers[0].env content: @@ -152,7 +152,7 @@ tests: path: spec.jobTemplate.spec.template.spec.containers[0].env content: name: grpc_client_vorgang-manager-vorgang-manager_address - value: 'vorgang-manager.helm-test:9090' + value: 'dns:///vorgang-manager.helm-test:9090' - contains: path: spec.jobTemplate.spec.template.spec.containers[0].env content: diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaIncomingFilesMapperTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaIncomingFilesMapperTest.java index 1ae7d692986e14c57e983b2af836c8b637c33c92..8adbed4598d7224e121e0d723c6c29baf0456361 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaIncomingFilesMapperTest.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaIncomingFilesMapperTest.java @@ -27,10 +27,8 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; import java.util.List; -import java.util.UUID; import java.util.stream.Stream; -import de.ozgcloud.eingang.common.formdata.IncomingFileGroup; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -49,8 +47,6 @@ class XtaIncomingFilesMapperTest { @Mock private ZipFileExtractor extractor; - private static final String ZIP_CONTENT_TYPE = "application/zip"; - @Nested class TestToIncomingFiles { @@ -59,12 +55,12 @@ class XtaIncomingFilesMapperTest { var xtaFile = XtaFileTestFactory.create(); var incomingFile = IncomingFileTestFactory.create(); when(mapper.toIncomingFile(xtaFile)).thenReturn(incomingFile); - when(mapper.extractZip(incomingFile)).thenAnswer(x -> Stream.of(incomingFile)); + when(mapper.tryToExtractZip(incomingFile)).thenAnswer(x -> Stream.of(incomingFile)); mapper.toIncomingFiles(List.of(xtaFile, xtaFile)); inOrder(mapper).verify(mapper, calls(2)).toIncomingFile(xtaFile); - inOrder(mapper).verify(mapper, calls(2)).extractZip(incomingFile); + inOrder(mapper).verify(mapper, calls(2)).tryToExtractZip(incomingFile); } @Test @@ -107,7 +103,7 @@ class XtaIncomingFilesMapperTest { } @Nested - class TestExtractZip { + class TestTryToExtractZip { @Mock IncomingFile outFile1; @@ -115,40 +111,29 @@ class XtaIncomingFilesMapperTest { @Mock IncomingFile outFile2; + private final IncomingFile zipFile = IncomingFileTestFactory.createBuilder() + .name("attachments.zip") + .build(); @Test void shouldExtractZipFiles() { var expectedExtractedFiles = List.of(outFile1, outFile2); - var zipFile = createTestIncomingFile(); when(extractor.extractIncomingFilesSafely(zipFile)).thenReturn(expectedExtractedFiles); - var extractedFiles = mapper.extractZip(zipFile).toList(); + var extractedFiles = mapper.tryToExtractZip(zipFile).toList(); assertThat(extractedFiles).isEqualTo(expectedExtractedFiles); } - IncomingFile createTestIncomingFile() { - return IncomingFileTestFactory.createBuilder() - .name("attachments.zip") - .contentType(ZIP_CONTENT_TYPE) - .build(); - } - @Test void shouldIgnoreNonZipFiles() { + when(extractor.extractIncomingFilesSafely(zipFile)).thenThrow(new RuntimeException()); var incomingFile = IncomingFileTestFactory.create(); - var extractedFiles = mapper.extractZip(incomingFile).toList(); + var extractedFiles = mapper.tryToExtractZip(incomingFile).toList(); assertThat(extractedFiles).containsExactly(incomingFile); } } - @Test - void testIsZipFilePredicate() { - assertThat(XtaIncomingFilesMapper.IS_ZIP_FILE.test(IncomingFileTestFactory.create())).isFalse(); - assertThat(XtaIncomingFilesMapper.IS_ZIP_FILE.test(IncomingFileTestFactory.createBuilder().contentType(ZIP_CONTENT_TYPE).build())) - .isTrue(); - } - } diff --git a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java index 374d71632023fb10b42f1698b4b7c44d1e462445..2d73c58212d230db5235b25e502bbb7f5ab08949 100644 --- a/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java +++ b/xta-adapter/src/test/java/de/ozgcloud/eingang/xta/XtaServiceTest.java @@ -6,6 +6,7 @@ import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.util.List; +import java.util.Optional; import java.util.stream.Stream; import org.junit.jupiter.api.BeforeEach; @@ -49,52 +50,93 @@ class XtaServiceTest { @Mock private XtaCurrentIdentifierService currentIdentifierService; + @Mock + private FormData formData; + + @Mock + private FormData formData2; + @Nested class TestGetMessagesAsFormData { private final XtaMessageMetaData messageMetaData = XtaMessageMetaDataTestFactory.create(); private final XtaMessage message = XtaMessageTestFactory.create(); - @BeforeEach - void setup() { - doReturn(Stream.of(messageMetaData)).when(service).createXtaMessageStream(); - } + @DisplayName("with one message") + @Nested + class TestWithOneMessage { + @BeforeEach + void setup() { + doReturn(Stream.of(messageMetaData)).when(service).createXtaMessageStream(); + } - @Test - void shouldCallCreateStream() { - service.getMessages(); + @Test + void shouldCallCreateStream() { + service.getMessages(); - verify(service).createXtaMessageStream(); - } + verify(service).createXtaMessageStream(); + } - @Test - void shouldCallFilterByMessageType() { - setupMocks(); + @Test + void shouldCallFilterByMessageType() { + setupMocks(); - service.getMessages().toList(); + service.getMessages().toList(); - verify(service).isSupportedMessageType(messageMetaData); - } + verify(service).isSupportedMessageType(messageMetaData); + } - @Test - void shouldCallGetFormData() { - setupMocks(); - doReturn(true).when(service).isSupportedMessageType(messageMetaData); + @Test + void shouldCallGetFormDataIfNoRuntimeException() { + setupMocks(); + doReturn(true).when(service).isSupportedMessageType(messageMetaData); - service.getMessages().toList(); + service.getMessages().toList(); - verify(service).getFormData(messageMetaData); + verify(service).getFormData(messageMetaData); + } + + @Test + void shouldNotCallGetFormDataIfNoRuntimeException() { + doReturn(false).when(service).isSupportedMessageType(messageMetaData); + + service.getMessages().toList(); + + verify(service, never()).getFormDataIfNoRuntimeException(any()); + } } - @Test - void shouldNotCallGetFormData() { - doReturn(false).when(service).isSupportedMessageType(messageMetaData); + @DisplayName("with multiple messages") + @Nested + class TestWithMultipleMessages { + private final XtaMessageMetaData messageMetaData2 = XtaMessageMetaDataTestFactory.createBuilder() + .messageId(XtaMessageId.from("messageId2")) + .build(); + private final XtaMessageMetaData messageMetaData3 = XtaMessageMetaDataTestFactory.createBuilder() + .messageId(XtaMessageId.from("messageId3")) + .build(); + + @BeforeEach + void setup() { + doReturn(Stream.of(messageMetaData, messageMetaData2, messageMetaData3)).when(service).createXtaMessageStream(); + } - service.getMessages().toList(); + @DisplayName("should return stream of messages") + @Test + void shouldReturnStreamOfMessages() { + doReturn(true).when(service).isSupportedMessageType(messageMetaData); + doReturn(false).when(service).isSupportedMessageType(messageMetaData3); + doReturn(true).when(service).isSupportedMessageType(messageMetaData2); + doReturn(Optional.of(formData)).when(service).getFormDataIfNoRuntimeException(messageMetaData); + doReturn(Optional.of(formData2)).when(service).getFormDataIfNoRuntimeException(messageMetaData2); - verify(service, never()).getFormData(any()); + var result = service.getMessages().toList(); + + assertThat(result).containsExactly(formData, formData2); + } } + private void setupMocks() { var testFormData = FormDataTestFactory.create(); when(mapper.toFormData(any(), any(), eq(vorgangNummerSupplier))).thenReturn(testFormData); @@ -129,6 +171,53 @@ class XtaServiceTest { } } + @DisplayName("get form data if no runtime exception") + @Nested + class TestGetFormDataIfNoRuntimeException { + + @Mock + XtaMessageMetaData messageMetaData; + + @Mock + FormData formData; + + @DisplayName("should call get formdata") + @Test + void shouldCallGetFormdata() { + service.getFormDataIfNoRuntimeException(messageMetaData); + + verify(service).getFormData(messageMetaData); + } + + @DisplayName("with exception") + @Nested + class TestWithException { + @DisplayName("should return empty") + @Test + void shouldReturnEmpty() { + doThrow(new RuntimeException("test-error")).when(service).getFormData(any()); + + var result = service.getFormDataIfNoRuntimeException(messageMetaData); + + assertThat(result).isEmpty(); + } + } + + @DisplayName("without exception") + @Nested + class TestWithoutException { + @DisplayName("should return") + @Test + void shouldReturn() { + doReturn(formData).when(service).getFormData(any()); + + var result = service.getFormDataIfNoRuntimeException(messageMetaData); + + assertThat(result).contains(formData); + } + } + } + @Nested class TestGetFormData {