RED-2403: Fixed duplicate multifile nameing in downloads

This commit is contained in:
Dominique Eifländer 2021-10-14 13:58:40 +02:00
parent e12c541c8e
commit f82bbf76f9
2 changed files with 14 additions and 74 deletions

View File

@ -38,17 +38,19 @@ public class ReportTemplateController implements ReportTemplateResource {
public ReportTemplate uploadTemplate(@RequestBody ReportTemplateUploadRequest reportTemplateUploadRequest) {
String fileName = parseFileName(reportTemplateUploadRequest);
List<ReportTemplateEntity> reportTemplates = reportTemplatePersistenceService.findByDossierTemplateId(reportTemplateUploadRequest.getDossierTemplateId());
if (doesFileNameExists(reportTemplates, fileName)) {
throw new ConflictException("Template already exists.");
for (ReportTemplateEntity reportTemplate : reportTemplates) {
if (reportTemplate.getFileName().equals(reportTemplateUploadRequest.getFileName()) && reportTemplate.isMultiFileReport() && reportTemplateUploadRequest.isMultiFileReport()
|| reportTemplate.getFileName().equals(reportTemplateUploadRequest.getFileName()) && !reportTemplate.isMultiFileReport() && !reportTemplateUploadRequest.isMultiFileReport()) {
throw new ConflictException("Template already exists.");
}
}
String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), fileName);
String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), reportTemplateUploadRequest.getFileName());
storageService.storeObject(storageId, reportTemplateUploadRequest.getTemplate());
String templateId = UUID.randomUUID().toString();
reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, fileName, reportTemplateUploadRequest.isActiveByDefault(), reportTemplateUploadRequest.isMultiFileReport());
reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, reportTemplateUploadRequest.getFileName(), reportTemplateUploadRequest.isActiveByDefault(), reportTemplateUploadRequest.isMultiFileReport());
return convert(reportTemplatePersistenceService.find(templateId), ReportTemplate.class);
@ -91,37 +93,4 @@ public class ReportTemplateController implements ReportTemplateResource {
}
private boolean doesFileNameExists(List<ReportTemplateEntity> reportTemplates, String fileName) {
for (ReportTemplateEntity reportTemplate : reportTemplates) {
if (reportTemplate.getFileName().equals(fileName)) {
return true;
}
}
return false;
}
private String parseFileName(@NonNull ReportTemplateUploadRequest reportTemplateUploadRequest) {
if (reportTemplateUploadRequest.isMultiFileReport()) {
String fileName = reportTemplateUploadRequest.getFileName();
int index = StringUtils.lastIndexOf(fileName, ".");
if (index < 1) {
throw new BadRequestException("FileName is not correct.");
}
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();
}
}
}

View File

@ -91,7 +91,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest {
.next()
.getTemplateId());
assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate);
assertThat(firstTemplate.getFileName()).isEqualTo("report(multifile).xlsx");
assertThat(firstTemplate.getFileName()).isEqualTo("report.xlsx");
var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId());
assertThat(download.getFile().length).isEqualTo(4);
@ -233,7 +233,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest {
var secondTemplate = reportTemplateClient.getReportTemplate(dossierTemplate.getId(), availableTemplates.get(1)
.getTemplateId());
assertThat(availableTemplates.get(1)).isEqualTo(secondTemplate);
assertThat(secondTemplate.getFileName()).isEqualTo("report(multifile).xlsx");
assertThat(secondTemplate.getFileName()).isEqualTo("report.xlsx");
}
@ -267,7 +267,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest {
.next()
.getTemplateId());
assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate);
assertThat(firstTemplate.getFileName()).isEqualTo("report(multifile).xlsx");
assertThat(firstTemplate.getFileName()).isEqualTo("report.xlsx");
var download = reportTemplateClient.downloadReportTemplate(firstTemplate.getDossierTemplateId(), firstTemplate.getTemplateId());
assertThat(download.getFile().length).isEqualTo(4);
@ -321,7 +321,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest {
.next()
.getTemplateId());
assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate);
assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding);
assertThat(firstTemplate.getFileName()).isEqualTo(fileName + fileEnding);
}
@ -355,7 +355,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest {
.next()
.getTemplateId());
assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate);
assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding);
assertThat(firstTemplate.getFileName()).isEqualTo(fileName + fileEnding);
}
@ -389,7 +389,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest {
.next()
.getTemplateId());
assertThat(availableTemplates.iterator().next()).isEqualTo(firstTemplate);
assertThat(firstTemplate.getFileName()).isEqualTo(fileName + "(multifile)" + fileEnding);
assertThat(firstTemplate.getFileName()).isEqualTo(fileName + fileEnding);
}
@ -423,36 +423,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest {
.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");
assertThat(firstTemplate.getFileName()).isEqualTo(fileName + fileEnding);
}