From 17acf325a676a5c247d0f35952b38346c2da7cee Mon Sep 17 00:00:00 2001 From: OZGCloud <ozgcloud@mgm-tp.com> Date: Wed, 4 Dec 2024 19:55:26 +0100 Subject: [PATCH] OZG-6810 refactor BayernIdAttachmentService --- .../{postfach => file}/AttachmentFile.java | 24 +---- .../PersistPostfachNachrichtService.java | 2 + .../PersistPostfachNachrichtServiceImpl.java | 1 + .../bayernid/BayernIdAttachmentService.java | 31 ++---- .../BayernIdAttachmentServiceTest.java | 98 +++++-------------- .../BayernIdAttachmentTestFactory.java | 5 +- .../osi/MessageAttachmentTestFactory.java | 4 +- 7 files changed, 49 insertions(+), 116 deletions(-) rename nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/{postfach => file}/AttachmentFile.java (68%) diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFile.java similarity index 68% rename from nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java rename to nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFile.java index 0133636..5ec6c99 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/AttachmentFile.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/file/AttachmentFile.java @@ -1,5 +1,5 @@ /* - * Copyright (C) 2023 Das Land Schleswig-Holstein vertreten durch den + * Copyright (C) 2024 Das Land Schleswig-Holstein vertreten durch den * Ministerpräsidenten des Landes Schleswig-Holstein * Staatskanzlei * Abteilung Digitalisierung und zentrales IT-Management der Landesregierung @@ -21,33 +21,17 @@ * Die sprachspezifischen Genehmigungen und Beschränkungen * unter der Lizenz sind dem Lizenztext zu entnehmen. */ -package de.ozgcloud.nachrichten.postfach; +package de.ozgcloud.nachrichten.file; -import static java.util.Objects.*; - -import java.io.InputStream; -import java.util.function.Supplier; - -import lombok.AccessLevel; import lombok.Builder; import lombok.Getter; -import lombok.ToString; @Builder @Getter -@ToString public class AttachmentFile { + private String name; private String contentType; - @Getter(AccessLevel.NONE) - @ToString.Exclude - private Supplier<InputStream> content; - - public InputStream getContent() { - if (isNull(content)) { - return InputStream.nullInputStream(); - } - return content.get(); - } + private String vorgangId; } diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java index 813c173..d21051c 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtService.java @@ -27,6 +27,8 @@ import java.util.Map; import java.util.Optional; import java.util.stream.Stream; +import de.ozgcloud.nachrichten.file.AttachmentFile; + //Temporally replacement for usign GRPC Api public interface PersistPostfachNachrichtService { diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImpl.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImpl.java index 154404a..cacd0cc 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImpl.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/PersistPostfachNachrichtServiceImpl.java @@ -42,6 +42,7 @@ import de.ozgcloud.apilib.vorgang.OzgCloudVorgangId; import de.ozgcloud.nachrichten.NachrichtenManagerConfiguration; import de.ozgcloud.nachrichten.attributes.ClientAttributeService; import de.ozgcloud.nachrichten.common.vorgang.VorgangService; +import de.ozgcloud.nachrichten.file.AttachmentFile; import de.ozgcloud.nachrichten.postfach.PostfachNachricht.Direction; @Service diff --git a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java index 0110fcc..d2d2712 100644 --- a/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java +++ b/nachrichten-manager-server/src/main/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentService.java @@ -24,45 +24,32 @@ package de.ozgcloud.nachrichten.postfach.bayernid; import java.io.InputStream; -import java.util.Optional; -import org.bson.Document; -import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.stereotype.Service; -import com.mongodb.client.gridfs.model.GridFSFile; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.BinaryFileService; +import de.ozgcloud.nachrichten.file.AttachmentFile; +import de.ozgcloud.nachrichten.file.AttachmentFileService; import de.ozgcloud.nachrichten.postfach.FileId; +import lombok.RequiredArgsConstructor; @Service @ConditionalOnProperty(prefix = "ozgcloud.bayernid", name = { "enabled" }) +@RequiredArgsConstructor public class BayernIdAttachmentService { - static final String NAME_KEY = "name"; - static final String CONTENT_TYPE_KEY = "contentType"; - - @Autowired - private BinaryFileService binaryFileService; + private final AttachmentFileService attachmentFileService; public BayernIdAttachment getMessageAttachment(FileId fileId) { - return Optional.ofNullable(binaryFileService.getFile(fileId)) - .map(GridFSFile::getMetadata) - .map(metadata -> buildBayernIdAttachment(metadata, getAttachmentContentStream(fileId))) - .orElseThrow(() -> new TechnicalException("Can not find attachment with id " + fileId)); + return buildBayernIdAttachment(attachmentFileService.getFile(fileId), attachmentFileService.getFileContent(fileId)); } - BayernIdAttachment buildBayernIdAttachment(Document metadata, InputStream attachmentContent) { + BayernIdAttachment buildBayernIdAttachment(AttachmentFile attachmentFile, InputStream attachmentContent) { return BayernIdAttachment.builder() - .fileName(metadata.getString(NAME_KEY)) - .contentType(metadata.getString(CONTENT_TYPE_KEY)) + .fileName(attachmentFile.getName()) + .contentType(attachmentFile.getContentType()) .content(attachmentContent) .build(); } - InputStream getAttachmentContentStream(FileId fileId) { - return binaryFileService.getUploadedFileStream(fileId); - } } diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java index 5db43d5..67be8d6 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentServiceTest.java @@ -25,26 +25,22 @@ package de.ozgcloud.nachrichten.postfach.bayernid; import static de.ozgcloud.nachrichten.postfach.bayernid.BayernIdAttachmentTestFactory.*; import static org.assertj.core.api.Assertions.*; -import static org.junit.jupiter.api.Assertions.*; import static org.mockito.ArgumentMatchers.*; import static org.mockito.Mockito.*; import java.io.ByteArrayInputStream; import java.io.InputStream; -import org.bson.Document; import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Nested; import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; -import com.mongodb.client.gridfs.model.GridFSFile; - -import de.ozgcloud.common.errorhandling.TechnicalException; -import de.ozgcloud.nachrichten.postfach.BinaryFileService; +import de.ozgcloud.nachrichten.file.AttachmentFile; +import de.ozgcloud.nachrichten.file.AttachmentFileService; +import de.ozgcloud.nachrichten.file.AttachmentFileTestFactory; import de.ozgcloud.nachrichten.postfach.FileId; class BayernIdAttachmentServiceTest { @@ -53,74 +49,54 @@ class BayernIdAttachmentServiceTest { @InjectMocks @Spy - private BayernIdAttachmentService bayernIdAttachmentService; - - @Mock - private BinaryFileService fileService; - - @Mock - private GridFSFile gridFsfile; + private BayernIdAttachmentService service; @Mock - private Document metadata; + private AttachmentFileService attachmentFileService; @Nested - class TestLoadingAttachment { + class TestGetMessageAttachment { + + @Mock + private AttachmentFile attachmentFile; + @Mock + private InputStream fileContent; + @Mock + private BayernIdAttachment bayernIdAttachment; @BeforeEach void init() { - when(gridFsfile.getMetadata()).thenReturn(metadata); - when(fileService.getFile(any())).thenReturn(gridFsfile); + when(attachmentFileService.getFile(any())).thenReturn(attachmentFile); + when(attachmentFileService.getFileContent(any())).thenReturn(fileContent); + doReturn(bayernIdAttachment).when(service).buildBayernIdAttachment(any(), any()); } @Test void shouldCallGetFile() { - when(fileService.getUploadedFileStream(any())).thenReturn(new ByteArrayInputStream(CONTENT)); + service.getMessageAttachment(FILE_ID); - bayernIdAttachmentService.getMessageAttachment(FILE_ID); - - verify(fileService).getFile(FILE_ID); + verify(attachmentFileService).getFile(FILE_ID); } @Test - void shouldCallGetAttachmentContent() { - when(fileService.getUploadedFileStream(any())).thenReturn(new ByteArrayInputStream(CONTENT)); - - bayernIdAttachmentService.getMessageAttachment(FILE_ID); + void shouldCallGetFileContent() { + service.getMessageAttachment(FILE_ID); - verify(bayernIdAttachmentService).getMessageAttachment(FILE_ID); + verify(attachmentFileService).getFileContent(FILE_ID); } @Test void shouldCallBuildBayernIdAttachment() { - var contentStream = getContentStream(); - doReturn(contentStream).when(bayernIdAttachmentService).getAttachmentContentStream(any()); + service.getMessageAttachment(FILE_ID); - bayernIdAttachmentService.getMessageAttachment(FILE_ID); - - verify(bayernIdAttachmentService).buildBayernIdAttachment(metadata, contentStream); + verify(service).buildBayernIdAttachment(attachmentFile, fileContent); } - } - - @Nested - class TestLoadAttachmentError { - @Test - @DisplayName("should throw TechnicalException if attachment not found") - void shouldThrowException() { - when(fileService.getFile(any())).thenReturn(null); + void shouldReturnBayernIdAttachment() { + var attachment = service.getMessageAttachment(FILE_ID); - assertThrows(TechnicalException.class, () -> bayernIdAttachmentService.getMessageAttachment(FILE_ID)); - } - - @Test - @DisplayName("should throw TechnicalException if metadata is null") - void shouldThrowExceptionIfNoMetadata() { - when(fileService.getFile(any())).thenReturn(gridFsfile); - when(gridFsfile.getMetadata()).thenReturn(null); - - assertThrows(TechnicalException.class, () -> bayernIdAttachmentService.getMessageAttachment(FILE_ID)); + assertThat(attachment).isSameAs(bayernIdAttachment); } } @@ -129,8 +105,6 @@ class BayernIdAttachmentServiceTest { @BeforeEach void setup() { - when(metadata.getString(BayernIdAttachmentService.NAME_KEY)).thenReturn(BayernIdAttachmentTestFactory.FILENAME); - when(metadata.getString(BayernIdAttachmentService.CONTENT_TYPE_KEY)).thenReturn(BayernIdAttachmentTestFactory.CONTENT_TYPE); } @Test @@ -155,25 +129,7 @@ class BayernIdAttachmentServiceTest { } private BayernIdAttachment buildBayernIdAttachment() { - return bayernIdAttachmentService.buildBayernIdAttachment(metadata, getContentStream()); - } - } - - @Nested - class TestLoadingAttachmentContent { - - @BeforeEach - void init() { - when(fileService.getUploadedFileStream(any())) - .thenReturn(new ByteArrayInputStream(CONTENT)); + return service.buildBayernIdAttachment(AttachmentFileTestFactory.create(), getContentStream()); } - - @Test - void shouldGetInputStream() { - InputStream input = bayernIdAttachmentService.getAttachmentContentStream(FILE_ID); - - assertThat(input).hasSameContentAs(getContentStream()); - } - } } \ No newline at end of file diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java index 2fe959b..0ae8abb 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/bayernid/BayernIdAttachmentTestFactory.java @@ -26,12 +26,13 @@ package de.ozgcloud.nachrichten.postfach.bayernid; import java.io.ByteArrayInputStream; import java.io.InputStream; +import de.ozgcloud.nachrichten.file.AttachmentFileTestFactory; import de.ozgcloud.nachrichten.postfach.bayernid.BayernIdAttachment.BayernIdAttachmentBuilder; public class BayernIdAttachmentTestFactory { - public final static String FILENAME = "test.txt"; - public final static String CONTENT_TYPE = "text/plain"; + public final static String FILENAME = AttachmentFileTestFactory.NAME; + public final static String CONTENT_TYPE = AttachmentFileTestFactory.CONTENT_TYPE; public static final byte[] CONTENT = "test".getBytes(); public static final long SIZE = 4L; diff --git a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java index 17181b2..b0ca53c 100644 --- a/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java +++ b/nachrichten-manager-server/src/test/java/de/ozgcloud/nachrichten/postfach/osi/MessageAttachmentTestFactory.java @@ -23,9 +23,11 @@ */ package de.ozgcloud.nachrichten.postfach.osi; +import de.ozgcloud.nachrichten.file.AttachmentFileTestFactory; + public class MessageAttachmentTestFactory { - public final static String FILENAME = "test.txt"; + public final static String FILENAME = AttachmentFileTestFactory.NAME; public static final String CONTENT = "dGVzdA=="; public static final String DECODED_CONTENT = "test"; public static final long SIZE = 4L; -- GitLab