From 8b0d5b63d5b77e74e2ae4280ce4f094c53b3c602 Mon Sep 17 00:00:00 2001 From: Philipp Schramm Date: Thu, 14 Oct 2021 10:03:18 +0200 Subject: [PATCH] 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 */