diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/AttachmentService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/AttachmentService.java index 6426921e9b447b0e4f75ea249233684fd69c4df8..5a259d19982ae9ed73df9280e9c76b1bca7cbc6e 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/AttachmentService.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/muk/transfer/AttachmentService.java @@ -48,8 +48,7 @@ public class AttachmentService { ozgCloudFileService.writeFileDataToStream(fileId, outputStream); } - public String store(OzgCloudUploadFile attachment, BufferedInputStream dataStream) { - var fileId = ozgCloudFileService.uploadFile(attachment, dataStream); - return fileId.toString(); + public OzgCloudFileId store(OzgCloudUploadFile attachment, BufferedInputStream dataStream) { + return ozgCloudFileService.uploadFile(attachment, dataStream); } } 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 dadd92123ee5b7635c0b481f19524104a7b7c2d8..701a666aec82e76bc8b46e38c516fc9dedcf9c31 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 @@ -41,6 +41,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; import de.ozgcloud.apilib.file.OzgCloudFile; +import de.ozgcloud.apilib.file.OzgCloudFileId; import de.ozgcloud.apilib.file.OzgCloudUploadFile; import de.ozgcloud.common.binaryfile.TempFileUtils; import de.ozgcloud.common.errorhandling.TechnicalException; @@ -63,6 +64,7 @@ import lombok.extern.log4j.Log4j2; @RequiredArgsConstructor @ConditionalOnProperty(prefix = MukPostfachProperties.PREFIX, name = { "server" }) public class ElsterTransferRemoteService { + public static final String POSTFACH = "postfach"; private final ElsterRestClient restClient; private final MukPostfachProperties postfachProperties; private final MukPostfachMessageMapper mapper; @@ -212,16 +214,25 @@ public class ElsterTransferRemoteService { } Optional<String> storeToOzgCloud(DownloadAnhangDetails downloadAnhangDetails, String vorgangId, ByteArrayInputStream dataIn) throws IOException { - Optional<String> fileIdOptional; + OzgCloudFileId ozgCloudFileId; try (BufferedInputStream dataStream = new BufferedInputStream(dataIn)) { - var uploadFile = OzgCloudUploadFile.builder() - .fileName(downloadAnhangDetails.getDatei()) - .contentType(downloadAnhangDetails.getMimeType()) - .vorgangId(vorgangId).build(); + ozgCloudFileId = attachmentService.store(createOzgCloudUploadFile(downloadAnhangDetails, vorgangId), dataStream); + } - fileIdOptional = Optional.of(attachmentService.store(uploadFile, dataStream)); + if (Objects.nonNull(ozgCloudFileId)) { + return Optional.of(ozgCloudFileId.toString()); } - return fileIdOptional; + + LOG.error("Received no OzgCloudFileId when saving attachment {} to vorgangId {}", downloadAnhangDetails, vorgangId); + return Optional.empty(); + } + + static OzgCloudUploadFile createOzgCloudUploadFile(final DownloadAnhangDetails downloadAnhangDetails, final String vorgangId) { + return OzgCloudUploadFile.builder() + .fileName(downloadAnhangDetails.getDatei()) + .fieldName(POSTFACH) + .contentType(downloadAnhangDetails.getMimeType()) + .vorgangId(vorgangId).build(); } } 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 7710d872637a75120aa94479b509e8877a32beb5..3f6d7c48c594074818cd96be1f259cff6a0ff4a7 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 @@ -30,6 +30,7 @@ import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; import java.io.IOException; +import java.net.URI; import java.nio.file.Path; import java.util.UUID; @@ -42,12 +43,14 @@ import org.mockito.Mock; import org.mockito.Spy; import de.ozgcloud.apilib.file.OzgCloudFile; +import de.ozgcloud.apilib.file.OzgCloudFileId; import de.ozgcloud.apilib.file.OzgCloudFileTestFactory; import de.ozgcloud.common.errorhandling.TechnicalException; import de.ozgcloud.muk.elster.transfer.BereitstellungAnhangWithUploadId; import de.ozgcloud.muk.elster.transfer.BereitstellungAuftragNeuV3; import de.ozgcloud.muk.elster.transfer.BereitstellungAuftragStatus; import de.ozgcloud.muk.elster.transfer.BereitstellungInfo; +import de.ozgcloud.muk.elster.transfer.DownloadAnhangDetails; import de.ozgcloud.muk.elster.transfer.UploadInfo; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; import de.ozgcloud.nachrichten.postfach.muk.BereitstellungAnhangTestFactory; @@ -285,7 +288,25 @@ class ElsterTransferRemoteServiceTest { private void setupForAttachments() { 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(ObjectIdToUUIDConverter.toUUID(new ObjectId().toHexString()).toString()); + when(attachmentService.store(any(), any())).thenReturn(OzgCloudFileId.from(ObjectIdToUUIDConverter.toUUID(new ObjectId().toHexString()).toString())); + } + + @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(); + downloadAnhangDetails.setMimeType(OzgCloudFileTestFactory.CONTENT_TYPE); + downloadAnhangDetails.setDownloadUrl(URI.create("/download")); + downloadAnhangDetails.setDateiBezeichnung(OzgCloudFileTestFactory.NAME); + downloadAnhangDetails.setDatei(""); + + var res = elsterTransferService.downloadAnhang(downloadAnhangDetails, ObjectId.get().toHexString()); + + assertThat(res).isNotPresent(); + } @Test @@ -300,7 +321,7 @@ class ElsterTransferRemoteServiceTest { @Test void shouldHaveVorgangId() { when(restClient.getForObject(matches(postfachProperties.getServer() + DOWNLOAD_URI), any())).thenReturn("Test,Data".getBytes()); - when(attachmentService.store(any(), any())).thenReturn(new ObjectId().toHexString()); + when(attachmentService.store(any(), any())).thenReturn(OzgCloudFileId.from(new ObjectId().toHexString())); var antwort = elsterTransferService.getAntwort(AntwortDetailsTestFactory.create()); @@ -368,4 +389,53 @@ class ElsterTransferRemoteServiceTest { ); } } + + @Nested + class TestCreatingOzgCloudFile { + DownloadAnhangDetails downloadAnhangDetails = new DownloadAnhangDetails(); + String vorgangId = ObjectId.get().toHexString(); + + @BeforeEach + void setUp() { + downloadAnhangDetails.setMimeType(OzgCloudFileTestFactory.CONTENT_TYPE); + downloadAnhangDetails.setDownloadUrl(URI.create("/download")); + downloadAnhangDetails.setDateiBezeichnung(OzgCloudFileTestFactory.NAME); + downloadAnhangDetails.setDatei(OzgCloudFileTestFactory.NAME); + } + + @Test + void shouldCreateOzgCloudFile() { + var file = ElsterTransferRemoteService.createOzgCloudUploadFile(downloadAnhangDetails, vorgangId); + + assertThat(file).isNotNull(); + } + + @Test + void shouldHaveFileName() { + var file = ElsterTransferRemoteService.createOzgCloudUploadFile(downloadAnhangDetails, vorgangId); + + assertThat(file.getFileName()).isEqualTo(downloadAnhangDetails.getDatei()); + } + + @Test + void shouldHaveVorgangId() { + var file = ElsterTransferRemoteService.createOzgCloudUploadFile(downloadAnhangDetails, vorgangId); + + assertThat(file.getVorgangId()).isEqualTo(vorgangId); + } + + @Test + void shouldHaveContentType() { + var file = ElsterTransferRemoteService.createOzgCloudUploadFile(downloadAnhangDetails, vorgangId); + + assertThat(file.getContentType()).isEqualTo(downloadAnhangDetails.getMimeType()); + } + + @Test + void shouldHaveFieldName() { + var file = ElsterTransferRemoteService.createOzgCloudUploadFile(downloadAnhangDetails, vorgangId); + + assertThat(file.getFieldName()).isEqualTo(POSTFACH); + } + } } \ No newline at end of file