RED-2966: Override report templates if filename already exists

This commit is contained in:
deiflaender 2021-12-17 09:33:42 +01:00
parent b9996b10cb
commit 0e3df71c52
2 changed files with 70 additions and 92 deletions

View File

@ -7,6 +7,7 @@ import java.util.List;
import java.util.UUID;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUpdateRequest;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.web.bind.annotation.PathVariable;
@ -39,23 +40,37 @@ public class ReportTemplateController implements ReportTemplateResource {
public ReportTemplate uploadTemplate(@RequestBody ReportTemplateUploadRequest reportTemplateUploadRequest) {
List<ReportTemplateEntity> reportTemplates = reportTemplatePersistenceService.findByDossierTemplateId(reportTemplateUploadRequest.getDossierTemplateId());
String templateId = null;
List<ReportTemplateEntity> reportTemplates = reportTemplatePersistenceService.findByDossierTemplateId(reportTemplateUploadRequest
.getDossierTemplateId());
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.");
if (reportTemplate.getFileName()
.equals(reportTemplateUploadRequest.getFileName()) && reportTemplate.isMultiFileReport() && reportTemplateUploadRequest
.isMultiFileReport() || reportTemplate.getFileName()
.equals(reportTemplateUploadRequest.getFileName()) && !reportTemplate.isMultiFileReport() && !reportTemplateUploadRequest
.isMultiFileReport()) {
templateId = reportTemplate.getTemplateId();
}
}
String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), reportTemplateUploadRequest.getFileName());
String storageId = StorageIdUtils.getReportStorageId(reportTemplateUploadRequest.getDossierTemplateId(), reportTemplateUploadRequest
.getFileName());
storageService.storeObject(storageId, reportTemplateUploadRequest.getTemplate());
String templateId = UUID.randomUUID().toString();
reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId,
reportTemplateUploadRequest.getFileName(), reportTemplateUploadRequest.isActiveByDefault(), reportTemplateUploadRequest.isMultiFileReport());
if (templateId != null) {
reportTemplatePersistenceService.updateTemplate(reportTemplateUploadRequest.getDossierTemplateId(), templateId, ReportTemplateUpdateRequest
.builder()
.fileName(reportTemplateUploadRequest.getFileName())
.multiFileReport(reportTemplateUploadRequest.isMultiFileReport())
.activeByDefault(reportTemplateUploadRequest.isActiveByDefault())
.build());
} else {
templateId = UUID.randomUUID().toString();
reportTemplatePersistenceService.insert(reportTemplateUploadRequest.getDossierTemplateId(), templateId, storageId, reportTemplateUploadRequest
.getFileName(), reportTemplateUploadRequest.isActiveByDefault(), reportTemplateUploadRequest.isMultiFileReport());
}
return convert(reportTemplatePersistenceService.find(templateId), ReportTemplate.class);
}
@ -99,6 +114,7 @@ public class ReportTemplateController implements ReportTemplateResource {
public void updateTemplate(@PathVariable(DOSSIER_TEMPLATE_ID) String dossierTemplateId,
@PathVariable(TEMPLATE_ID) String templateId,
@RequestBody ReportTemplateUpdateRequest reportTemplateUpdateRequest) {
reportTemplatePersistenceService.updateTemplate(dossierTemplateId, templateId, reportTemplateUpdateRequest);
}

View File

@ -5,7 +5,9 @@ import static org.assertj.core.api.Assertions.catchThrowable;
import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUpdateRequest;
import feign.FeignException;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
@ -105,87 +107,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest {
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
@ -430,6 +352,7 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest {
}
/*
* Update report
*/
@ -469,9 +392,48 @@ public class ReportTemplateTest extends AbstractPersistenceServerServiceTest {
try {
reportTemplateClient.updateTemplate("123wrongDossier", firstTemplate.getTemplateId(), updateRequest);
} catch(FeignException e) {
} catch (FeignException e) {
assertThat(e.status()).isEqualTo(404);
}
}
@Test
public void testTemplateOverride() {
String fileName = "report.xlsx";
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
byte[] templateBytes = new byte[]{1, 2, 3, 4};
reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder()
.activeByDefault(true)
.dossierTemplateId(dossierTemplate.getId())
.multiFileReport(false)
.fileName(fileName)
.template(templateBytes)
.build());
var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId());
String templateId = availableTemplates.get(0).getTemplateId();
var downloaded = reportTemplateClient.downloadReportTemplate(dossierTemplate.getId(), templateId);
assertThat(downloaded.getFile().equals(templateBytes));
byte[] newTemplateBytes = new byte[]{1, 2, 3, 4, 5, 6};
reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder()
.activeByDefault(true)
.dossierTemplateId(dossierTemplate.getId())
.multiFileReport(false)
.fileName(fileName)
.template(newTemplateBytes)
.build());
availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossierTemplate.getId());
assertThat(availableTemplates.size()).isEqualTo(1);
downloaded = reportTemplateClient.downloadReportTemplate(dossierTemplate.getId(), templateId);
assertThat(downloaded.getFile().equals(newTemplateBytes));
}
}