RED-2403 Adopted controller and test to handle fileNames containing dots

This commit is contained in:
Philipp Schramm 2021-10-14 10:03:18 +02:00
parent db93fb6e5c
commit 8b0d5b63d5
2 changed files with 47 additions and 5 deletions

View File

@ -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;
}
}

View File

@ -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
*/