RED-2966: Override report templates if filename already exists
This commit is contained in:
parent
b9996b10cb
commit
0e3df71c52
@ -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);
|
||||
}
|
||||
|
||||
|
||||
@ -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));
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user