From 3105367aa9d1fce44c537ef9ba5292012dba18e0 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 14 Oct 2021 08:55:46 +0200 Subject: [PATCH 1/3] RED-2403 Fixed issue with file collision for multi file report template uploads --- .../controller/ReportTemplateController.java | 65 ++- .../integration/tests/ReportTemplateTest.java | 395 +++++++++++++++++- 2 files changed, 430 insertions(+), 30 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java index 026ba049b..89903e147 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java @@ -1,7 +1,20 @@ package com.iqser.red.service.peristence.v1.server.controller; +import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; + +import java.io.IOException; +import java.util.List; +import java.util.UUID; + +import org.apache.commons.io.IOUtils; +import org.apache.commons.lang3.StringUtils; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + import com.iqser.red.service.peristence.v1.server.utils.StorageIdUtils; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.ReportTemplateEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.ReportTemplatePersistenceService; @@ -11,17 +24,9 @@ import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.Re import com.iqser.red.service.persistence.service.v1.api.resources.ReportTemplateResource; import com.iqser.red.storage.commons.exception.StorageObjectDoesNotExist; import com.iqser.red.storage.commons.service.StorageService; + +import lombok.NonNull; import lombok.RequiredArgsConstructor; -import org.apache.commons.io.IOUtils; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RestController; - -import java.io.IOException; -import java.util.List; -import java.util.UUID; - -import static com.iqser.red.service.persistence.management.v1.processor.utils.MagicConverter.convert; @RestController @RequiredArgsConstructor @@ -33,18 +38,17 @@ public class ReportTemplateController implements ReportTemplateResource { public ReportTemplate uploadTemplate(@RequestBody ReportTemplateUploadRequest reportTemplateUploadRequest) { + String fileName = parseFileName(reportTemplateUploadRequest); + List reportTemplates = reportTemplatePersistenceService.findByDossierTemplateId(reportTemplateUploadRequest.getDossierTemplateId()); - for (ReportTemplateEntity reportTemplate : reportTemplates) { - if (reportTemplate.getFileName().equals(reportTemplateUploadRequest.getFileName())) { - throw new ConflictException("Template already exists."); - } + if (doesFileNameExists(reportTemplates, fileName)) { + throw new ConflictException("Template already exists."); } - String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), reportTemplateUploadRequest - .getFileName()); + + String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), fileName); storageService.storeObject(storageId, reportTemplateUploadRequest.getTemplate()); String templateId = UUID.randomUUID().toString(); - reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, reportTemplateUploadRequest - .getFileName(), reportTemplateUploadRequest.isMultiFileReport(), reportTemplateUploadRequest.isActiveByDefault()); + reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, fileName, reportTemplateUploadRequest.isMultiFileReport(), reportTemplateUploadRequest.isActiveByDefault()); return convert(reportTemplatePersistenceService.find(templateId), ReportTemplate.class); @@ -87,4 +91,29 @@ public class ReportTemplateController implements ReportTemplateResource { } + + private boolean doesFileNameExists(List reportTemplates, String fileName) { + + for (ReportTemplateEntity reportTemplate : reportTemplates) { + if (reportTemplate.getFileName().equals(fileName)) { + return true; + } + } + return false; + } + + + private String parseFileName(@NonNull ReportTemplateUploadRequest reportTemplateUploadRequest) { + + String fileName = reportTemplateUploadRequest.getFileName(); + if (reportTemplateUploadRequest.isMultiFileReport()) { + String[] splitFileName = StringUtils.split(fileName, "."); + if (splitFileName.length != 2) { + throw new BadRequestException("FileName is not correct."); + } + fileName = splitFileName[0] + "(multifile)." + splitFileName[1]; + } + return fileName; + } + } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 66f46ddc1..6b4d82c63 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -1,13 +1,15 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.catchThrowable; + +import org.junit.Test; +import org.springframework.beans.factory.annotation.Autowired; + import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest; -import org.junit.Test; -import org.springframework.beans.factory.annotation.Autowired; - -import static org.assertj.core.api.Assertions.assertThat; public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { @@ -17,38 +19,407 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { @Autowired private ReportTemplateClient reportTemplateClient; + + /* + * Upload report, verify it exist and delete afterwards + */ @Test public void testReportTemplate() { + // Arrange + String fileName = "report.xlsx"; var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + // Act & Assert var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); assertThat(availableTemplates).isEmpty(); reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() .activeByDefault(true) .dossierTemplateId(dossierTemplate.getId()) - .multiFileReport(true) - .fileName("test.docx") - .template(new byte[]{1, 2, 3, 4}).build()); - + .multiFileReport(false) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); assertThat(availableTemplates).isNotEmpty(); - - var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator().next().getTemplateId()); + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); - + assertThat(firstTemplate.getFileName()).isEqualTo(fileName); var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); assertThat(download.getFile().length).isEqualTo(4); - reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); assertThat(availableTemplates).isEmpty(); } + + + /* + * Upload multiFile report, verify it exist with correct fileName and delete afterwards + */ + @Test + public void testMultiFileReportTemplate() { + + // Arrange + String fileName = "report.xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo("report(multifile).xlsx"); + + var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); + assertThat(download.getFile().length).isEqualTo(4); + + reportTemplateClient.deleteTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + } + + + /* + * Try to upload template two times + */ + @Test + public void testReportTemplateTwoTimes() { + + // Arrange + String fileName = "report.xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(false) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + final Throwable thrown = catchThrowable(() -> { + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(false) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + }); + + assertThat(thrown.getMessage()).contains("Template already exists"); + + } + + + /* + * Try to upload multi file template two times + */ + @Test + public void testMultiFileReportTemplateTwoTimes() { + + // Arrange + String fileName = "report.xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + final Throwable thrown = catchThrowable(() -> { + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + }); + + assertThat(thrown.getMessage()).contains("Template already exists"); + + } + + + /* + * Upload template file and then multi file template with the same name + */ + @Test + public void testReportTemplateAndThenMultiFileReportTemple() { + + // Arrange + String fileName = "report.xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(false) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName); + + var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); + assertThat(download.getFile().length).isEqualTo(4); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + assertThat(availableTemplates.size()).isEqualTo(2); + + var secondTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.get(1) + .getTemplateId()); + assertThat(availableTemplates.get(1)).isEqualTo(secondTemplate); + assertThat(secondTemplate.getFileName()).isEqualTo("report(multifile).xlsx"); + + } + + + /* + * Upload multi file template and then template file with the same name + */ + @Test + public void testMultiFileReportTemplateAndThenReportTemple() { + + // Arrange + String fileName = "report.xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo("report(multifile).xlsx"); + + var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId()); + assertThat(download.getFile().length).isEqualTo(4); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(false) + .fileName(fileName) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + assertThat(availableTemplates.size()).isEqualTo(2); + + var secondTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.get(1) + .getTemplateId()); + assertThat(availableTemplates.get(1)).isEqualTo(secondTemplate); + assertThat(secondTemplate.getFileName()).isEqualTo(fileName); + + } + + + /* + * Upload MF with ending xlsx + */ + @Test + public void testMultiFileReportTemplateAsExcel() { + // Arrange + String fileName = "report with really_weird~Name(567) [}=§$783 XYz&"; + String fileEnding = ".xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName + fileEnding) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding); + + } + + + /* + * Upload MF with ending docx + */ + @Test + public void testMultiFileReportTemplateAsWord() { + // Arrange + String fileName = "report with really_weird~Name(567) [}=§$783 XYz&"; + String fileEnding = ".docx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName + fileEnding) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding); + + } + + + /* + * Upload multiFile report with fantasy fileEnding + */ + @Test + public void testMultiFileReportTemplateWithFantasyName() { + // Arrange + String fileName = "report with really_weird~Name(567) [}=§$783 XYz&"; + String fileEnding = ".fantasyEnding"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName + fileEnding) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding); + + } + + + /* + * Upload multiFile report with corrupt fileName + */ + @Test + public void testMultiFileReportTemplateWithCorruptFileName() { + // Arrange + String fileName = "report"; + String fileEnding = "endingWithoutDot"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + final Throwable thrown = catchThrowable(() -> { + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName + fileEnding) + .template(new byte[]{1, 2, 3, 4}) + .build()); + }); + + assertThat(thrown.getMessage()).contains("FileName is not correct"); + + } + } From 8b0d5b63d5b77e74e2ae4280ce4f094c53b3c602 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 14 Oct 2021 10:03:18 +0200 Subject: [PATCH 2/3] RED-2403 Adopted controller and test to handle fileNames containing dots --- .../controller/ReportTemplateController.java | 18 +++++++--- .../integration/tests/ReportTemplateTest.java | 34 +++++++++++++++++++ 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java index 89903e147..709b99927 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java @@ -105,15 +105,23 @@ public class ReportTemplateController implements ReportTemplateResource { private String parseFileName(@NonNull ReportTemplateUploadRequest reportTemplateUploadRequest) { - String fileName = reportTemplateUploadRequest.getFileName(); if (reportTemplateUploadRequest.isMultiFileReport()) { - String[] splitFileName = StringUtils.split(fileName, "."); - if (splitFileName.length != 2) { + String fileName = reportTemplateUploadRequest.getFileName(); + + int index = StringUtils.lastIndexOf(fileName, "."); + if (index < 1) { throw new BadRequestException("FileName is not correct."); } - fileName = splitFileName[0] + "(multifile)." + splitFileName[1]; + String fileNameWithoutEnding = StringUtils.substring(fileName, 0, index); + String fileEnding = StringUtils.substring(fileName, index); + + if (StringUtils.isEmpty(fileNameWithoutEnding) || StringUtils.isEmpty(fileEnding)) { + throw new BadRequestException("FileName is not correct."); + } + return fileNameWithoutEnding + "(multifile)" + fileEnding; + } else { + return reportTemplateUploadRequest.getFileName(); } - return fileName; } } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java index 6b4d82c63..e2028b4c5 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReportTemplateTest.java @@ -394,6 +394,40 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest { } + /* + * Upload multiFile report with fantasy fileEnding + */ + @Test + public void testMultiFileReportTemplateWithDotsInName() { + // Arrange + String fileName = "awesome.report.with.many.dots"; + String fileEnding = ".xlsx"; + var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate(); + + // Act & Assert + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isEmpty(); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossierTemplate.getId()) + .multiFileReport(true) + .fileName(fileName + fileEnding) + .template(new byte[]{1, 2, 3, 4}) + .build()); + + availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId()); + assertThat(availableTemplates).isNotEmpty(); + + var firstTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.iterator() + .next() + .getTemplateId()); + assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate); + assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding); + + } + + /* * Upload multiFile report with corrupt fileName */ From 939a2a5752a82862ddfe2a6a72f0f4a945f07941 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 14 Oct 2021 10:04:48 +0200 Subject: [PATCH 3/3] RED-2403 Removed blank --- .../v1/server/controller/ReportTemplateController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java index 709b99927..bc0f186a2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReportTemplateController.java @@ -118,7 +118,7 @@ public class ReportTemplateController implements ReportTemplateResource { if (StringUtils.isEmpty(fileNameWithoutEnding) || StringUtils.isEmpty(fileEnding)) { throw new BadRequestException("FileName is not correct."); } - return fileNameWithoutEnding + "(multifile)" + fileEnding; + return fileNameWithoutEnding + "(multifile)" + fileEnding; } else { return reportTemplateUploadRequest.getFileName(); }