From b639c88578d2bbd9395378c9e5951eddc82ea17a Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Tue, 13 Aug 2024 15:17:28 +0200 Subject: [PATCH] =?UTF-8?q?WIP:=20OZG-6275=20Auf=20NachrichtId=20umgestell?= =?UTF-8?q?t,=20upload=20von=20Antwortanh=C3=A4ngen=20deaktiviert?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/docker/docker-compose.yaml | 2 +- .../transfer/ElsterTransferRemoteService.java | 32 +++++++++++-------- .../muk/MukPostfachRemoteServiceITCase.java | 2 ++ .../muk/PostfachNachrichtTestFactory.java | 4 +-- .../transfer/AntwortDetailsTestFactory.java | 2 +- .../ElsterTransferRemoteServiceTest.java | 19 +++++++---- .../MukPostfachMessageMapperTest.java | 4 +-- 7 files changed, 39 insertions(+), 26 deletions(-) diff --git a/src/main/docker/docker-compose.yaml b/src/main/docker/docker-compose.yaml index 2e816b3..48b6f85 100644 --- a/src/main/docker/docker-compose.yaml +++ b/src/main/docker/docker-compose.yaml @@ -13,4 +13,4 @@ services: ETR_NETZ: "e4k" ETR_EINSTELLUNGEN_ELSTERZERTIFIKAT_PASSWORT: "-siehe-keepass-" ETR_EINSTELLUNGEN_ELSTERZERTIFIKAT_DATEIPFAD: "/opt/ELSTER-Transfer/elster-org-cert.pfx" - ETR_ACCESS_ALLOWFROM: '\d+.\d+\.\d+\.\d+;\d*|::1;\d*|0:0:0:0:0:0:0:1;\d*' + ETR_ACCESS_ALLOWFROM: '.*' diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteService.java index 354bc43..844d00d 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteService.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteService.java @@ -37,6 +37,7 @@ import java.util.Optional; import java.util.Set; import java.util.stream.Stream; +import org.bson.types.ObjectId; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; @@ -181,26 +182,32 @@ public class ElsterTransferRemoteService { nachrichtBuilder .referencedNachricht(nachrichtId.toHexString()) .replyOption(PostfachNachricht.ReplyOption.POSSIBLE); - - if (Objects.nonNull(antwortDetails.getAnhaenge())) { - nachrichtBuilder.attachments(antwortDetails.getAnhaenge().stream() - .filter(Objects::nonNull) - .map(downloadAnhangDetails -> this.downloadAnhang(downloadAnhangDetails, nachrichtId.toHexString())) - .filter(Optional::isPresent) - .map(Optional::get) - .toList()); - } + // TODO update to new API as soon the new api is available. + //addAttachments(nachrichtBuilder, antwortDetails, nachrichtId); } return nachrichtBuilder.build(); } - Optional<String> downloadAnhang(DownloadAnhangDetails downloadAnhangDetails, String nachrichtId) { - Optional<String> fileIdOptional = Optional.empty(); + private void addAttachments(final PostfachNachricht.PostfachNachrichtBuilder nachrichtBuilder, final AntwortDetails antwortDetails, final ObjectId nachrichtId) { + if (Objects.nonNull(antwortDetails.getAnhaenge())) { + nachrichtBuilder.attachments(antwortDetails.getAnhaenge().stream() + .filter(Objects::nonNull) + .map(downloadAnhangDetails -> saveAnhang(downloadAnhang(downloadAnhangDetails), downloadAnhangDetails, nachrichtId.toHexString())) + .filter(Optional::isPresent) + .map(Optional::get) + .toList()); + } + } + + byte[] downloadAnhang(DownloadAnhangDetails downloadAnhangDetails) { var url = postfachProperties.getServer() + downloadAnhangDetails.getDownloadUrl(); - var data = (byte[]) restClient.getForObject(url, byte[].class); + return restClient.getForObject(url, byte[].class); + } + Optional<String> saveAnhang(byte[] data, DownloadAnhangDetails downloadAnhangDetails, String nachrichtId) { + Optional<String> fileIdOptional = Optional.empty(); if (Objects.nonNull(data)) { try (var dataIn = new ByteArrayInputStream(data)) { fileIdOptional = storeToOzgCloud(downloadAnhangDetails, nachrichtId, dataIn); @@ -235,7 +242,6 @@ public class ElsterTransferRemoteService { .fileName(downloadAnhangDetails.getDatei()) .fieldName(POSTFACH) .contentType(downloadAnhangDetails.getMimeType()).build(); - //.nachrichtReferenz(nachrichtId).build(); } } diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/MukPostfachRemoteServiceITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/MukPostfachRemoteServiceITCase.java index 2f51fc0..a42340e 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/MukPostfachRemoteServiceITCase.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/MukPostfachRemoteServiceITCase.java @@ -29,6 +29,7 @@ import static org.assertj.core.api.Assertions.*; import org.junit.jupiter.api.AfterAll; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; @@ -140,6 +141,7 @@ public class MukPostfachRemoteServiceITCase { } @Test + @Disabled("Needs to be reimplemented when the new File API is available") void shouldDownloadAntwort() { var antworten = mukPostfachRemoteService.getAllMessages().toList(); diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/PostfachNachrichtTestFactory.java b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/PostfachNachrichtTestFactory.java index a4e0f80..1cda11a 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/PostfachNachrichtTestFactory.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/PostfachNachrichtTestFactory.java @@ -57,7 +57,7 @@ public class PostfachNachrichtTestFactory { public static final int POSTFACH_TYPE = 1; public static final String SUBJECT = LoremIpsum.getInstance().getTitle(1); public static final String MESSAGE_ID = UUID.randomUUID().toString(); - public static final String VORGANG_ID = new ObjectId().toHexString(); + public static final String NACHRICHT_ID = new ObjectId().toHexString(); public static PostfachNachricht create() { return createBuilder().build(); @@ -68,7 +68,7 @@ public class PostfachNachrichtTestFactory { .id(ID) .postfachAddress(postfachAddress()) .messageId(MESSAGE_ID) - .vorgangId(VORGANG_ID) + .vorgangId(NACHRICHT_ID) .direction(DIRECTION) .createdAt(CREATED_AT) .createdBy(CREATED_BY) diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/AntwortDetailsTestFactory.java b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/AntwortDetailsTestFactory.java index 90dfc7f..44dcc3f 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/AntwortDetailsTestFactory.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/AntwortDetailsTestFactory.java @@ -37,7 +37,7 @@ public class AntwortDetailsTestFactory { public static final String DATEI_BEZEICHNUNG = "test daten"; public static final URI DOWNLOAD_URI = URI.create("/download"); public static final String TEXT_CSV = "text/csv"; - public static final UUID ZUORDNUNG = ObjectIdToUUIDConverter.toUUID(VORGANG_ID); + public static final UUID ZUORDNUNG = ObjectIdToUUIDConverter.toUUID(NACHRICHT_ID); static AntwortDetails create() { var antwortDetails = new AntwortDetails(); diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteServiceTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteServiceTest.java index 3f6d7c4..a6cd786 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteServiceTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/ElsterTransferRemoteServiceTest.java @@ -36,6 +36,7 @@ import java.util.UUID; import org.bson.types.ObjectId; import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; @@ -260,6 +261,7 @@ class ElsterTransferRemoteServiceTest { @Nested class TestLoadingAntwort { + byte[] data = "test data".getBytes(); @Test void shouldLoadAntwort() { var antwort = elsterTransferService.getAntwort(AntwortDetailsTestFactory.create()); @@ -268,15 +270,17 @@ class ElsterTransferRemoteServiceTest { } @Test + @Disabled("Needs to be reimplemented when the new File API is available") void shouldCallDownloadAntwort() { setupForAttachments(); elsterTransferService.getAntwort(AntwortDetailsTestFactory.create()); - verify(elsterTransferService).downloadAnhang(any(), anyString()); + verify(elsterTransferService).downloadAnhang(any()); } @Test + @Disabled("Needs to be reimplemented when the new File API is available") void shouldCallStoreToOzgCloud() throws IOException { setupForAttachments(); @@ -293,8 +297,6 @@ class ElsterTransferRemoteServiceTest { @Test void shouldHandleAttachmentSaveError() { - when(postfachProperties.getServer()).thenReturn("http://localhost"); - when(restClient.getForObject(matches(postfachProperties.getServer() + DOWNLOAD_URI), any())).thenReturn("Test,Data".getBytes()); when(attachmentService.store(any(), any())).thenReturn(null); DownloadAnhangDetails downloadAnhangDetails = new DownloadAnhangDetails(); @@ -303,7 +305,7 @@ class ElsterTransferRemoteServiceTest { downloadAnhangDetails.setDateiBezeichnung(OzgCloudFileTestFactory.NAME); downloadAnhangDetails.setDatei(""); - var res = elsterTransferService.downloadAnhang(downloadAnhangDetails, ObjectId.get().toHexString()); + var res = elsterTransferService.saveAnhang(data, downloadAnhangDetails, ObjectId.get().toHexString()); assertThat(res).isNotPresent(); @@ -319,13 +321,14 @@ class ElsterTransferRemoteServiceTest { } @Test + @Disabled("Needs to be reimplemented when the new File API is available") void shouldHaveVorgangId() { when(restClient.getForObject(matches(postfachProperties.getServer() + DOWNLOAD_URI), any())).thenReturn("Test,Data".getBytes()); when(attachmentService.store(any(), any())).thenReturn(OzgCloudFileId.from(new ObjectId().toHexString())); var antwort = elsterTransferService.getAntwort(AntwortDetailsTestFactory.create()); - assertThat(antwort.getVorgangId()).isEqualTo(VORGANG_ID); + assertThat(antwort.getVorgangId()).isEqualTo(NACHRICHT_ID); } @Test @@ -370,6 +373,7 @@ class ElsterTransferRemoteServiceTest { @Nested class TestExceptionHandling { + byte[] data = "test data".getBytes(); @Test void shouldThrowTechnicalExceptionOnUpload() throws IOException { doThrow(IOException.class).when(elsterTransferService).uploadFile(any()); @@ -381,11 +385,11 @@ class ElsterTransferRemoteServiceTest { @Test void shouldThrowTechnicalExceptionOnStore() throws IOException { var downloadAnhangDetails = AntwortDetailsTestFactory.createDownloadAnhangDetails(); - when(restClient.getForObject(eq("null" + downloadAnhangDetails.getDownloadUrl()), any())).thenReturn("data".getBytes()); + doThrow(IOException.class).when(elsterTransferService).storeToOzgCloud(any(), any(), any()); assertThatExceptionOfType(TechnicalException.class).isThrownBy( - () -> elsterTransferService.downloadAnhang(downloadAnhangDetails, VORGANG_ID) + () -> elsterTransferService.saveAnhang(data, downloadAnhangDetails, NACHRICHT_ID) ); } } @@ -418,6 +422,7 @@ class ElsterTransferRemoteServiceTest { } @Test + @Disabled("Needs to be reimplemented when the new File API is available") void shouldHaveVorgangId() { var file = ElsterTransferRemoteService.createOzgCloudUploadFile(downloadAnhangDetails, vorgangId); diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/MukPostfachMessageMapperTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/MukPostfachMessageMapperTest.java index 9f68f9e..a83eac8 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/MukPostfachMessageMapperTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/muk/transfer/MukPostfachMessageMapperTest.java @@ -64,14 +64,14 @@ class MukPostfachMessageMapperTest { void shouldMapVorgangIdToEmpfaengerreferenz() { var result = map(); - assertThat(result.getEmpfaengerreferenz()).isEqualTo(VORGANG_ID); + assertThat(result.getEmpfaengerreferenz()).isEqualTo(NACHRICHT_ID); } @Test void shouldMapVorgangIdToGeschaeftszeichen() { var result = map(); - assertThat(result.getEmpfaengerreferenz()).isEqualTo(VORGANG_ID); + assertThat(result.getEmpfaengerreferenz()).isEqualTo(NACHRICHT_ID); } @Test -- GitLab