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 790df9999..1529dd9ce 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 @@ -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 reportTemplates = reportTemplatePersistenceService.findByDossierTemplateId(reportTemplateUploadRequest.getDossierTemplateId()); + String templateId = null; + List 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); } 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 b4e9c2913..b9d4fffdc 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 @@ -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)); + } + }