diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileController.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileController.java index b6be4cc8dffcfaec3ae6ae806e13fd040a614fba..850d16c480a8d57553c3109da01fc9bd2598d1d3 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileController.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileController.java @@ -68,13 +68,21 @@ public class FileController { @PathVariable String nachrichtEventId, @Parameter(description = "The id of the Nachricht the file belongs to", example = "60af924b4f1a2560298b4567") @PathVariable String nachrichtId, @Parameter(description = "The id of the file", example = "6358fd0bee7a051389cdd788") @PathVariable String fileId) { - var ozgFile = getFile(fileId, nachrichtId, nachrichtEventId); + var fileIdentificationData = buildFileIdentificationData(fileId, nachrichtId, nachrichtEventId); - return buildResponseEntity(ozgFile, createDownloadStreamingBody(fileId, nachrichtId, nachrichtEventId)); + return buildResponseEntity(getFile(fileIdentificationData), createDownloadStreamingBody(fileIdentificationData)); } - OzgFile getFile(String fileId, String nachrichtId, String nachrichtEventId) { - return fileService.getFile(fileId, nachrichtId, nachrichtEventId); + private FileIdentificationData buildFileIdentificationData(String fileId, String nachrichtId, String nachrichtEventId) { + return FileIdentificationData.builder() + .fileId(fileId) + .nachrichtId(nachrichtId) + .nachrichtEventId(nachrichtEventId) + .build(); + } + + OzgFile getFile(FileIdentificationData fileIdentificationData) { + return fileService.getFile(fileIdentificationData); } private ResponseEntity<StreamingResponseBody> buildResponseEntity(OzgFile ozgFile, StreamingResponseBody responseBody) { @@ -89,8 +97,8 @@ public class FileController { } } - private StreamingResponseBody createDownloadStreamingBody(String fileId, String nachrichtId, String nachrichtEventId) { - return out -> fileService.downloadFileContent(fileId, nachrichtId, out, nachrichtEventId); + private StreamingResponseBody createDownloadStreamingBody(FileIdentificationData fileIdentificationData) { + return out -> fileService.downloadFileContent(fileIdentificationData, out); } @Operation(summary = "Upload file content", diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileIdentificationData.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileIdentificationData.java new file mode 100644 index 0000000000000000000000000000000000000000..f7a44c19cd3a0fae91e5d34ae353929c39b1f5b5 --- /dev/null +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileIdentificationData.java @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2023-2024. + * Das Land Schleswig-Holstein vertreten durch den Ministerpräsidenten des Landes Schleswig-Holstein Staatskanzlei Abteilung Digitalisierung und zentrales IT-Management der Landesregierung + * + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.antragsraum.attachments; + +import lombok.Builder; + +@Builder +public record FileIdentificationData( + String fileId, + String nachrichtId, + String nachrichtEventId) { +} diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java index 0be8ec0ef7a3f8ad8bbf2d88b83298cb733cc79a..33d3d6b5203bbb5d149858450939dc5345a619f0 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRemoteService.java @@ -36,15 +36,15 @@ import lombok.extern.log4j.Log4j2; class FileRemoteService { private final @NonNull FileRestClient restClient; - OzgFile getFile(String fileId, String nachrichtId, String address) { - var grpcFileMetadata = restClient.getFileMetadata(fileId, nachrichtId, address); + OzgFile getFile(FileIdentificationData fileIdentificationData, String address) { + var grpcFileMetadata = restClient.getFileMetadata(fileIdentificationData, address); if (Objects.isNull(grpcFileMetadata.getFileMetadata())) { - LOG.warn("Received file id {} from {}, but getFileMetadata returned empty ", fileId, address); + LOG.warn("Received file id {} from {}, but getFileMetadata returned empty ", fileIdentificationData.fileId(), address); return null; } - return OzgFileMapper.fromGrpcFileMetadata(grpcFileMetadata.getFileMetadata(), fileId); + return OzgFileMapper.fromGrpcFileMetadata(grpcFileMetadata.getFileMetadata(), fileIdentificationData.fileId()); } CompletableFuture<String> uploadFile(OzgUploadFile uploadFile, String address) { @@ -54,7 +54,7 @@ class FileRemoteService { return fileIdFuture; } - void downloadFileContent(String fileId, String nachrichtId, OutputStream out, String address) { - restClient.downloadFileContent(fileId, nachrichtId, out, address); + void downloadFileContent(FileIdentificationData fileIdentificationData, String address, OutputStream out) { + restClient.downloadFileContent(fileIdentificationData, address, out); } } diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRestClient.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRestClient.java index bd34570bd1f735ff7f4806e0459f82ac937db761..e8ed91f46f1452c83f306e41db00c432b6813e1f 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRestClient.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileRestClient.java @@ -64,10 +64,10 @@ class FileRestClient { this.restClient = restClient; } - AntragraumGrpcGetAttachmentMetadataResponse getFileMetadata(String fileId, String nachrichtId, final String address) { + AntragraumGrpcGetAttachmentMetadataResponse getFileMetadata(FileIdentificationData fileIdentificationData, final String address) { var request = new AntragraumGrpcGetAttachmentMetadataRequest(); - request.setFileId(fileId); - request.setNachrichtId(nachrichtId); + request.setFileId(fileIdentificationData.fileId()); + request.setNachrichtId(fileIdentificationData.nachrichtId()); request.setSamlToken(AuthenticationHelper.getSamlToken()); return restClient @@ -108,15 +108,15 @@ class FileRestClient { .retrieve().toEntity(String.class).getBody(); } - void downloadFileContent(final String fileId, String nachrichtId, final OutputStream out, final String address) { + void downloadFileContent(FileIdentificationData fileIdentificationData, final String address, final OutputStream out) { var request = new AntragraumGrpcGetAttachmentContentRequest(); - request.setFileId(fileId); - request.setNachrichtId(nachrichtId); + request.setFileId(fileIdentificationData.fileId()); + request.setNachrichtId(fileIdentificationData.nachrichtId()); request.setSamlToken(AuthenticationHelper.getSamlToken()); var fileContent = Optional.ofNullable(restClient .post() - .uri(GET_FILE_CONTENT_API, fileId) + .uri(GET_FILE_CONTENT_API, fileIdentificationData.fileId()) .header(X_GRPC_ADDRESS, RestClientUtils.sanitizeAddress(address)) .contentType(MediaType.APPLICATION_JSON) .body(request) diff --git a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileService.java b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileService.java index 01090caf460a62a31e54b2192486878bc0045bb6..f1c616aceebd4325dcb2f8c5ff1743e3d5d9b828 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileService.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/attachments/FileService.java @@ -40,16 +40,16 @@ public class FileService { private final @NonNull VirusScannerClient scanner; private final @NonNull NachrichtEventService nachrichtEventService; - public OzgFile getFile(String fileId, String nachrichtId, String nachrichtEventId) { - var nachrichtEvent = nachrichtEventService.getNachrichtEventById(nachrichtEventId); + public OzgFile getFile(FileIdentificationData fileIdentificationData) { + var nachrichtEvent = nachrichtEventService.getNachrichtEventById(fileIdentificationData.nachrichtEventId()); - return fileRemoteService.getFile(fileId, nachrichtId, nachrichtEvent.address()); + return fileRemoteService.getFile(fileIdentificationData, nachrichtEvent.address()); } - void downloadFileContent(String fileId, String nachrichtId, OutputStream out, String nachrichtEventId) { - var nachrichtEvent = nachrichtEventService.getNachrichtEventById(nachrichtEventId); + void downloadFileContent(FileIdentificationData fileIdentificationData, OutputStream out) { + var nachrichtEvent = nachrichtEventService.getNachrichtEventById(fileIdentificationData.nachrichtEventId()); - fileRemoteService.downloadFileContent(fileId, nachrichtId, out, nachrichtEvent.address()); + fileRemoteService.downloadFileContent(fileIdentificationData, nachrichtEvent.address(), out); } CompletableFuture<String> upload(String vorgangId, String nachrichtEventId, MultipartFile file) { diff --git a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapper.java b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapper.java index 0b77a9290332274745ca5ebbfe33c9d7f0611020..325197b8f0da465b9ebb0a40399d705f17c93cdf 100644 --- a/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapper.java +++ b/server/src/main/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapper.java @@ -29,6 +29,7 @@ import java.util.Objects; import org.apache.commons.lang3.StringUtils; import org.springframework.stereotype.Service; +import de.ozgcloud.antragsraum.attachments.FileIdentificationData; import de.ozgcloud.antragsraum.attachments.FileService; import de.ozgcloud.antragsraum.attachments.OzgFile; import de.ozgcloud.antragsraum.proxy.AntragraumproxyGrpcRueckfrage; @@ -48,23 +49,18 @@ class NachrichtMapper { return List.of(); } - return fileIds.stream().filter(StringUtils::isNotEmpty).map(fileId -> fileService.getFile(fileId, nachrichtId, nachrichtEventId)) + return fileIds.stream().filter(StringUtils::isNotEmpty).map(fileId -> getFile(fileId, nachrichtId, nachrichtEventId)) .filter(Objects::nonNull).toList(); } - long toMillisecondsTimestamp(String dateString) { - long timestamp = 0; - try { - timestamp = LocalDateTime.parse(dateString).toEpochSecond(ZoneOffset.UTC) * 1000; - } catch (DateTimeException e) { - if (StringUtils.isEmpty(dateString)) { - LOG.debug("Empty date received for Nachricht. Setting it to 0 (=1970-01-01)"); - } else { - LOG.warn("Invalid date [{}] received for Nachricht. Setting it to 0 (=1970-01-01)", dateString); - } - } + private OzgFile getFile(String fileId, String nachrichtId, String nachrichtEventId) { + var fileIdentificationData = FileIdentificationData.builder() + .fileId(fileId) + .nachrichtId(nachrichtId) + .nachrichtEventId(nachrichtEventId) + .build(); - return timestamp; + return fileService.getFile(fileIdentificationData); } public Nachricht fromRestRueckfrage(final AntragraumproxyGrpcRueckfrage rueckfrage, final String id) { @@ -85,6 +81,21 @@ class NachrichtMapper { return builder.build(); } + private long toMillisecondsTimestamp(String dateString) { + long timestamp = 0; + try { + timestamp = LocalDateTime.parse(dateString).toEpochSecond(ZoneOffset.UTC) * 1000; + } catch (DateTimeException e) { + if (StringUtils.isEmpty(dateString)) { + LOG.debug("Empty date received for Nachricht. Setting it to 0 (=1970-01-01)"); + } else { + LOG.warn("Invalid date [{}] received for Nachricht. Setting it to 0 (=1970-01-01)", dateString); + } + } + + return timestamp; + } + private List<ReplyNachricht> fromRestRueckfrageAnswer(final AntragraumproxyGrpcRueckfrage rueckfrage, final String id) { if (Objects.isNull(rueckfrage.getAnswers())) { return List.of(); diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerITCase.java index 36a897a46fee1c130a0bb025acec99ec59f9be6c..5be8c6bce51110148ce61c128b48762bac4fc825 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerITCase.java @@ -84,7 +84,7 @@ public class FileControllerITCase { class TestDownloadingFileContent { @BeforeEach void init() { - when(fileService.getFile(anyString(), anyString(), anyString())).thenReturn(OzgFileTestFactory.create()); + when(fileService.getFile(any(FileIdentificationData.class))).thenReturn(OzgFileTestFactory.create()); } @Test @@ -98,7 +98,7 @@ public class FileControllerITCase { class TestFileNotFoundError { @BeforeEach void init() { - doThrow(NotFoundException.class).when(fileService).getFile(anyString(), anyString(), anyString()); + doThrow(NotFoundException.class).when(fileService).getFile(any(FileIdentificationData.class)); } @Test @@ -113,7 +113,7 @@ public class FileControllerITCase { @Test @WithMockUser void shouldReturn500ByTechnicalException() throws Exception { - doThrow(TechnicalException.class).when(fileService).getFile(anyString(), anyString(), anyString()); + doThrow(TechnicalException.class).when(fileService).getFile(any(FileIdentificationData.class)); performRequest().andExpect(status().isInternalServerError()); } @@ -121,7 +121,7 @@ public class FileControllerITCase { @Test @WithMockUser void shouldReturn500ByRuntimeException() throws Exception { - doThrow(RuntimeException.class).when(fileService).getFile(anyString(), anyString(), anyString()); + doThrow(RuntimeException.class).when(fileService).getFile(any(FileIdentificationData.class)); performRequest().andExpect(status().isInternalServerError()); } @@ -131,8 +131,7 @@ public class FileControllerITCase { class TestNotAcceptable { @BeforeEach void init() { - when(fileService.getFile(anyString(), anyString(), anyString())).thenReturn(OzgFileTestFactory.create()); - doThrow(VirusFoundException.class).when(fileService).getFile(anyString(), anyString(), anyString()); + doThrow(VirusFoundException.class).when(fileService).getFile(any(FileIdentificationData.class)); } @Test diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerTest.java index d8cc49b3af99487f8ec66575a3e0201963257056..7fea74c9db5808ae1514c66bd67118290a541748 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileControllerTest.java @@ -20,10 +20,7 @@ package de.ozgcloud.antragsraum.attachments; -import static de.ozgcloud.antragsraum.attachments.OzgFileTestFactory.NACHRICHT_EVENT_ID; -import static de.ozgcloud.antragsraum.attachments.OzgFileTestFactory.VORGANG_ID; import static de.ozgcloud.antragsraum.attachments.OzgFileTestFactory.*; -import static de.ozgcloud.antragsraum.nachricht.NachrichtTestFactory.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; @@ -62,14 +59,14 @@ class FileControllerTest { class TestGetFileContent { @BeforeEach void init() { - when(fileService.getFile(anyString(), anyString(), anyString())).thenReturn(OzgFileTestFactory.create()); + lenient().when(fileService.getFile(any(FileIdentificationData.class))).thenReturn(OzgFileTestFactory.create()); } @Test void shouldCallGetFile() { fileController.getFileData(Base64.getEncoder().encodeToString(CHANNEL_ADDRESS.getBytes(StandardCharsets.UTF_8)), NACHRICHT_ID, FILE_ID); - verify(fileService).getFile(anyString(), anyString(), anyString()); + verify(fileService).getFile(any(FileIdentificationData.class)); } @Test @@ -98,7 +95,7 @@ class FileControllerTest { @Test void shouldHandleNullFile() { - when(fileService.getFile(anyString(), anyString(), anyString())).thenReturn(null); + when(fileService.getFile(any(FileIdentificationData.class))).thenReturn(null); var response = fileController.getFileData(Base64.getEncoder().encodeToString(CHANNEL_ADDRESS.getBytes(StandardCharsets.UTF_8)), NACHRICHT_ID, FILE_ID); @@ -117,11 +114,13 @@ class FileControllerTest { @Nested class TestGetFile { + private static final FileIdentificationData FILE_IDENTIFICATION_DATA = FileIdentificationDataTestFactory.create(); + @Test void shouldCallService() { - fileController.getFile(FILE_ID, NACHRICHT_ID, REPLY_TO_NACHRICHT_ID); + fileController.getFile(FILE_IDENTIFICATION_DATA); - verify(fileService).getFile(any(), anyString(), anyString()); + verify(fileService).getFile(FILE_IDENTIFICATION_DATA); } } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileIdentificationDataTestFactory.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileIdentificationDataTestFactory.java new file mode 100644 index 0000000000000000000000000000000000000000..4d4266da59ea7d729df11bb46296a071708afb1c --- /dev/null +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileIdentificationDataTestFactory.java @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2023-2024. + * Lizenziert unter der EUPL, Version 1.2 oder - sobald + * diese von der Europäischen Kommission genehmigt wurden - + * Folgeversionen der EUPL ("Lizenz"); + * Sie dürfen dieses Werk ausschließlich gemäß + * dieser Lizenz nutzen. + * Eine Kopie der Lizenz finden Sie hier: + * + * https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 + * + * Sofern nicht durch anwendbare Rechtsvorschriften + * gefordert oder in schriftlicher Form vereinbart, wird + * die unter der Lizenz verbreitete Software "so wie sie + * ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - + * ausdrücklich oder stillschweigend - verbreitet. + * Die sprachspezifischen Genehmigungen und Beschränkungen + * unter der Lizenz sind dem Lizenztext zu entnehmen. + */ + +package de.ozgcloud.antragsraum.attachments; + +import static de.ozgcloud.antragsraum.attachments.OzgFileTestFactory.*; + +public class FileIdentificationDataTestFactory { + + public static FileIdentificationData create() { + return createBuilder().build(); + } + + public static FileIdentificationData.FileIdentificationDataBuilder createBuilder() { + return FileIdentificationData.builder() + .fileId(FILE_ID) + .nachrichtId(NACHRICHT_ID) + .nachrichtEventId(NACHRICHT_EVENT_ID); + } + +} diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceITCase.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceITCase.java index 40841b0a6c3fd03a09a040b2e2abb40c1c6a0460..4f8bbbf0b30bda4191a595694ac68b9b090e130b 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceITCase.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceITCase.java @@ -42,6 +42,7 @@ import lombok.extern.log4j.Log4j2; @SpringJUnitConfig(classes = { FileRemoteServiceTestConfiguration.class }) @Log4j2 public class FileRemoteServiceITCase { + private static final FileIdentificationData FILE_IDENTIFICATION_DATA = FileIdentificationDataTestFactory.create(); private static final String ADDRESS = "http://localhost:8088"; @SpyBean @@ -65,10 +66,11 @@ public class FileRemoteServiceITCase { @Nested class TestGetFile { + @Test @DirtiesContext void shouldGetFile() { - var file = fileRemoteService.getFile(FILE_ID, NACHRICHT_ID, ADDRESS); + var file = fileRemoteService.getFile(FILE_IDENTIFICATION_DATA, ADDRESS); assertThat(file).isNotNull(); } @@ -76,7 +78,7 @@ public class FileRemoteServiceITCase { @Test @DirtiesContext void shouldHaveFileMetaData() { - var file = fileRemoteService.getFile(FILE_ID, NACHRICHT_ID, ADDRESS); + var file = fileRemoteService.getFile(FILE_IDENTIFICATION_DATA, ADDRESS); assertThat(file).isEqualTo(OzgFileTestFactory.create()); } @@ -84,11 +86,12 @@ public class FileRemoteServiceITCase { @Nested class TestGetFileContent { + @Test @DirtiesContext void shouldGetFileContent() { var out = new ByteArrayOutputStream(); - fileRemoteService.downloadFileContent(FILE_ID, NACHRICHT_ID, out, ADDRESS); + fileRemoteService.downloadFileContent(FILE_IDENTIFICATION_DATA, ADDRESS, out); assertThat(out.size()).isEqualTo(DATA.length); } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTest.java index fd42de2b92fd0edd91409713ffb38d4da184af3e..168acec8f3963de9d93c393c1a626d9cf3a38984 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRemoteServiceTest.java @@ -42,6 +42,8 @@ import org.mockito.junit.jupiter.MockitoExtension; @ExtendWith(MockitoExtension.class) class FileRemoteServiceTest { + private static final FileIdentificationData FILE_IDENTIFICATION_DATA = FileIdentificationDataTestFactory.create(); + @Spy @InjectMocks private FileRemoteService remoteService; @@ -53,41 +55,41 @@ class FileRemoteServiceTest { class TestLoadingFile { @BeforeEach void init() { - when(restClient.getFileMetadata(anyString(), anyString(), anyString())).thenReturn( + lenient().when(restClient.getFileMetadata(any(FileIdentificationData.class), anyString())).thenReturn( AntragraumGrpcGetAttachmentMetadataResponseTestFactory.create()); } @Test void shouldLoadFileMetadata() { - var file = remoteService.getFile(FILE_ID, NACHRICHT_ID, CHANNEL_ADDRESS); + var file = remoteService.getFile(FILE_IDENTIFICATION_DATA, CHANNEL_ADDRESS); assertThat(file).isNotNull(); } @Test void shouldHaveFileName() { - var file = remoteService.getFile(FILE_ID, NACHRICHT_ID, CHANNEL_ADDRESS); + var file = remoteService.getFile(FILE_IDENTIFICATION_DATA, CHANNEL_ADDRESS); assertThat(file.fileName()).isEqualTo(FILE_NAME); } @Test void shouldHaveFileSize() { - var file = remoteService.getFile(FILE_ID, NACHRICHT_ID, CHANNEL_ADDRESS); + var file = remoteService.getFile(FILE_IDENTIFICATION_DATA, CHANNEL_ADDRESS); assertThat(file.fileSize()).isEqualTo(FILE_SIZE); } @Test void shouldHaveContentType() { - var file = remoteService.getFile(FILE_ID, NACHRICHT_ID, CHANNEL_ADDRESS); + var file = remoteService.getFile(FILE_IDENTIFICATION_DATA, CHANNEL_ADDRESS); assertThat(file.contentType()).isEqualTo(CONTENT_TYPE); } @Test void shouldHaveFileId() { - var file = remoteService.getFile(FILE_ID, NACHRICHT_ID, CHANNEL_ADDRESS); + var file = remoteService.getFile(FILE_IDENTIFICATION_DATA, CHANNEL_ADDRESS); assertThat(file.id()).isEqualTo(FILE_ID); } @@ -96,9 +98,10 @@ class FileRemoteServiceTest { void shouldHandleEmpty() { var response = AntragraumGrpcGetAttachmentMetadataResponseTestFactory.create(); response.setFileMetadata(null); - when(restClient.getFileMetadata(anyString(), anyString(), anyString())).thenReturn(response); - var file = remoteService.getFile(FILE_ID, NACHRICHT_ID, CHANNEL_ADDRESS); + when(restClient.getFileMetadata(any(FileIdentificationData.class), anyString())).thenReturn(response); + + var file = remoteService.getFile(FILE_IDENTIFICATION_DATA, CHANNEL_ADDRESS); assertThat(file).isNull(); } @@ -110,9 +113,9 @@ class FileRemoteServiceTest { @Test void shouldCallDownloadFileObserver() { - remoteService.downloadFileContent(FILE_ID, NACHRICHT_ID, output, CHANNEL_ADDRESS); + remoteService.downloadFileContent(FILE_IDENTIFICATION_DATA, CHANNEL_ADDRESS, output); - verify(restClient).downloadFileContent(eq(FILE_ID), eq(NACHRICHT_ID), any(OutputStream.class), eq(CHANNEL_ADDRESS)); + verify(restClient).downloadFileContent(eq(FILE_IDENTIFICATION_DATA), eq(CHANNEL_ADDRESS), any(OutputStream.class)); } } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRestClientTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRestClientTest.java index b345bcc8a091864d5aa67dd053b70f16ed1ca150..a6f5843e01aa3b3700973de84bb574e57ca4ab31 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRestClientTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileRestClientTest.java @@ -23,7 +23,6 @@ package de.ozgcloud.antragsraum.attachments; import static de.ozgcloud.antragsraum.attachments.FileRestClient.*; -import static de.ozgcloud.antragsraum.attachments.OzgFileTestFactory.*; import static org.assertj.core.api.Assertions.*; import static org.mockito.Mockito.*; import static org.springframework.test.web.client.match.MockRestRequestMatchers.*; @@ -55,8 +54,9 @@ import de.ozgcloud.antragsraum.security.UserTestFactory; @SpringJUnitConfig(classes = { FileRestClientTestConfiguration.class }) @RestClientTest(FileRestClient.class) class FileRestClientTest { - final static String ADDRESS = "http://localhost:8382"; - public static final String FILE_ID = "test"; + private static final FileIdentificationData FILE_IDENTIFICATION_DATA = FileIdentificationDataTestFactory.create(); + static final String ADDRESS = "http://localhost:8382"; + private FileRestClient fileRestClient; @Autowired @@ -92,7 +92,7 @@ class FileRestClientTest { try (var authenticationHelper = mockStatic(AuthenticationHelper.class)) { authenticationHelper.when(AuthenticationHelper::getSamlToken).thenReturn(UserTestFactory.SAML_TOKEN); - var fileMetadata = fileRestClient.getFileMetadata(FILE_ID, NACHRICHT_ID, ADDRESS + FIND_FILE_METADATA_API); + var fileMetadata = fileRestClient.getFileMetadata(FILE_IDENTIFICATION_DATA, ADDRESS + FIND_FILE_METADATA_API); assertThat(fileMetadata).isNotNull(); } @@ -141,7 +141,7 @@ class FileRestClientTest { authenticationHelper.when(AuthenticationHelper::getSamlToken).thenReturn(UserTestFactory.SAML_TOKEN); var out = new ByteArrayOutputStream(); - fileRestClient.downloadFileContent(FILE_ID, NACHRICHT_ID, out, ADDRESS + GET_FILE_CONTENT_API); + fileRestClient.downloadFileContent(FILE_IDENTIFICATION_DATA, ADDRESS + GET_FILE_CONTENT_API, out); var res = out.toByteArray(); assertThat(res).isEqualTo(OzgUploadFileTestFactory.MULTIPART_FILE.getBytes()); @@ -157,7 +157,7 @@ class FileRestClientTest { doThrow(IOException.class).when(out).write(any(byte[].class), anyInt(), anyInt()); assertThatExceptionOfType(TechnicalException.class).isThrownBy( - () -> fileRestClient.downloadFileContent(FILE_ID, NACHRICHT_ID, out, ADDRESS + GET_FILE_CONTENT_API)); + () -> fileRestClient.downloadFileContent(FILE_IDENTIFICATION_DATA, ADDRESS + GET_FILE_CONTENT_API, out)); } } } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileServiceTest.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileServiceTest.java index 8ce6606b1d03a3b2030cb243db09ae4708b604fe..7abb90873e0ec47906f26a79f3b012e3499cb057 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileServiceTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/FileServiceTest.java @@ -47,6 +47,8 @@ import de.ozgcloud.antragsraum.events.NachrichtEventService; import de.ozgcloud.antragsraum.events.NachrichtEventTestFactory; class FileServiceTest { + private static final FileIdentificationData FILE_IDENTIFICATION_DATA = FileIdentificationDataTestFactory.create(); + @Spy @InjectMocks private FileService fileService; @@ -111,13 +113,13 @@ class FileServiceTest { class TestLoadingFile { @BeforeEach void init() { - when(remoteService.getFile(anyString(), anyString(), anyString())).thenReturn(OzgFileTestFactory.create()); + when(remoteService.getFile(any(FileIdentificationData.class), anyString())).thenReturn(OzgFileTestFactory.create()); when(nachrichtEventService.getNachrichtEventById(NACHRICHT_EVENT_ID)).thenReturn(NachrichtEventTestFactory.createNachrichtEvent()); } @Test void shouldGetFile() { - var file = fileService.getFile(FILE_ID, NACHRICHT_ID, NACHRICHT_EVENT_ID); + var file = fileService.getFile(FILE_IDENTIFICATION_DATA); assertThat(file).isNotNull(); } @@ -132,9 +134,9 @@ class FileServiceTest { @Test void shouldCallRemoteService() { - fileService.downloadFileContent(FILE_ID, NACHRICHT_ID, new ByteArrayOutputStream(), NACHRICHT_EVENT_ID); + fileService.downloadFileContent(FILE_IDENTIFICATION_DATA, new ByteArrayOutputStream()); - verify(remoteService).downloadFileContent(anyString(), anyString(), any(OutputStream.class), anyString()); + verify(remoteService).downloadFileContent(any(FileIdentificationData.class), anyString(), any(OutputStream.class)); } } diff --git a/server/src/test/java/de/ozgcloud/antragsraum/attachments/StubFileRestClient.java b/server/src/test/java/de/ozgcloud/antragsraum/attachments/StubFileRestClient.java index 109d94dc26f374dbec7dd184da3b34f770dea497..46a80b56b36b90c082fbe3948e98668bb4eeb0c4 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/attachments/StubFileRestClient.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/attachments/StubFileRestClient.java @@ -35,7 +35,7 @@ class StubFileRestClient extends FileRestClient { super(null); } - public AntragraumGrpcGetAttachmentMetadataResponse getFileMetadata(String fileId, String nachrichtId, final String address) { + public AntragraumGrpcGetAttachmentMetadataResponse getFileMetadata(FileIdentificationData fileIdentificationData, final String address) { return AntragraumGrpcGetAttachmentMetadataResponseTestFactory.create(); } @@ -43,7 +43,7 @@ class StubFileRestClient extends FileRestClient { fileIdFuture.complete(FILE_ID); } - public void downloadFileContent(final String fileId, String nachrichtId, final OutputStream out, final String address) { + public void downloadFileContent(FileIdentificationData fileIdentificationData, final String address, final OutputStream out) { try { out.write(OzgUploadFileTestFactory.MULTIPART_FILE.getBytes()); } catch (IOException e) { diff --git a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapperTest.java b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapperTest.java index 610439d21434e6b714244227605e5aec094fd11b..6b8a2aa6499b97fbf63eec72a15540f5dde22739 100644 --- a/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapperTest.java +++ b/server/src/test/java/de/ozgcloud/antragsraum/nachricht/NachrichtMapperTest.java @@ -35,6 +35,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import de.ozgcloud.antragsraum.attachments.FileIdentificationData; import de.ozgcloud.antragsraum.attachments.FileService; import de.ozgcloud.antragsraum.attachments.OzgFile; import de.ozgcloud.antragsraum.attachments.OzgFileTestFactory; @@ -64,7 +65,7 @@ class NachrichtMapperTest { @BeforeEach void setup() { - when(fileService.getFile(anyString(), anyString(), anyString())).thenReturn(OzgFileTestFactory.create()); + lenient().when(fileService.getFile(any(FileIdentificationData.class))).thenReturn(OzgFileTestFactory.create()); } @Test @@ -148,7 +149,7 @@ class NachrichtMapperTest { @Test void shouldMapEmptyAttachments() { - when(fileService.getFile(anyString(), anyString(), anyString())).thenReturn(null); + when(fileService.getFile(any(FileIdentificationData.class))).thenReturn(null); var nachricht = mapper.fromRestRueckfrage(AntragraumproxyGrpcRueckfrageTestFactory.createRueckfrage(), NachrichtTestFactory.NACHRICHT_EVENT_ID);