diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java index 42664303f..4a831d983 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierPersistenceService.java @@ -17,6 +17,7 @@ import java.time.OffsetDateTime; import java.time.temporal.ChronoUnit; import java.util.List; import java.util.UUID; +import java.util.stream.Collectors; import static com.iqser.red.service.persistence.management.v1.processor.exception.DossierNotFoundException.DOSSIER_NOT_FOUND_MESSAGE; @@ -56,8 +57,10 @@ public class DossierPersistenceService { BeanUtils.copyProperties(createOrUpdateDossierRequest, dossier); dossier.setDossierTemplate(dossierTemplateRepository.getOne(createOrUpdateDossierRequest.getDossierTemplateId())); dossier.setLastUpdated(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); + + dossier.getReportTemplates().forEach(t -> t.getDossiers().removeIf(d -> d.getId().equals(dossierId) && !createOrUpdateDossierRequest.getReportTemplateIds().contains(t.getTemplateId()))); var reportTemplates = reportTemplateRepository.findAllById(createOrUpdateDossierRequest.getReportTemplateIds()); - reportTemplates.forEach(r -> r.getDossiers().add(dossier)); + reportTemplates.forEach(r -> {if (!r.getDossiers().stream().map(DossierEntity::getId).collect(Collectors.toSet()).contains(dossierId)) {r.getDossiers().add(dossier);}}); dossier.setReportTemplates(reportTemplates); }); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java index 60c9f23bf..b0d1a7c91 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierTest.java @@ -3,15 +3,21 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.assertThatThrownBy; +import java.util.List; + import org.junit.Test; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import com.google.common.collect.Sets; import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; +import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplate; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.ReportTemplateUploadRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.Dossier; import feign.FeignException; @@ -23,6 +29,9 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { @Autowired private DossierClient dossierClient; + @Autowired + private ReportTemplateClient reportTemplateClient; + @Test public void testDossier() { @@ -66,4 +75,140 @@ public class DossierTest extends AbstractPersistenceServerServiceTest { assertThatThrownBy(() -> dossierClient.undeleteDossiers(Sets.newHashSet(dossier.getId()))).isInstanceOf(FeignException.class); } + + @Test + public void testDossierWithReportTemplates() { + + var dossier = dossierTesterAndProvider.provideTestDossier(); + String dossierName = "Dossier 1 Update"; + + var allDossiers = dossierClient.getAllDossiers(); + assertThat(allDossiers.size()).isEqualTo(1); + assertThat(allDossiers.get(0)).isEqualTo(dossier); + + List availableTemplates = provideTestReportTemplates(dossier); + + // 1. update dossier: Add 3 report templates, but only on exists + CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); + cru.setDossierTemplateId(dossier.getId()); + BeanUtils.copyProperties(dossier, cru); + cru.setDossierName(dossierName); + cru.setWatermarkPreviewEnabled(true); + cru.setReportTemplateIds(List.of(availableTemplates.get(0).getTemplateId(), "id-does-not-exist-1", "id-does-not-exist-2")); + + var updated = dossierClient.updateDossier(cru, dossier.getId()); + assertThat(updated.getDossierName()).isEqualTo(dossierName); + assertThat(updated.isWatermarkPreviewEnabled()).isEqualTo(true); + assertThat(updated.getReportTemplateIds().size()).isEqualTo(1); + assertThat(updated.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId()); + + var loadedTemplate = dossierClient.getDossierById(dossier.getId(),false); + + assertThat(loadedTemplate).isEqualTo(updated); + assertThat(loadedTemplate.getReportTemplateIds().size()).isEqualTo(1); + assertThat(loadedTemplate.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId()); + + allDossiers = dossierClient.getAllDossiers(); + assertThat(allDossiers.size()).isEqualTo(1); + assertThat(allDossiers.get(0).getReportTemplateIds().size()).isEqualTo(1); + + // 2. update dossier: Add 2 report templates, but one is already added + cru = new CreateOrUpdateDossierRequest(); + cru.setDossierTemplateId(dossier.getId()); + BeanUtils.copyProperties(dossier, cru); + cru.setDossierName(dossierName); + cru.setWatermarkPreviewEnabled(true); + cru.setReportTemplateIds(List.of(availableTemplates.get(0).getTemplateId(), availableTemplates.get(1).getTemplateId())); + + updated = dossierClient.updateDossier(cru, dossier.getId()); + assertThat(updated.getDossierName()).isEqualTo(dossierName); + assertThat(updated.isWatermarkPreviewEnabled()).isEqualTo(true); + assertThat(updated.getReportTemplateIds().size()).isEqualTo(2); + assertThat(updated.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId(), availableTemplates.get(1).getTemplateId()); + + loadedTemplate = dossierClient.getDossierById(dossier.getId(),false); + + assertThat(loadedTemplate).isEqualTo(updated); + assertThat(loadedTemplate.getReportTemplateIds().size()).isEqualTo(2); + assertThat(loadedTemplate.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId(), availableTemplates.get(1).getTemplateId()); + + // 3. update dossier: Add 2 report templates, but one is already added. One has to be removed + cru = new CreateOrUpdateDossierRequest(); + cru.setDossierTemplateId(dossier.getId()); + BeanUtils.copyProperties(dossier, cru); + cru.setDossierName(dossierName); + cru.setWatermarkPreviewEnabled(true); + cru.setReportTemplateIds(List.of(availableTemplates.get(1).getTemplateId(), availableTemplates.get(2).getTemplateId())); + + updated = dossierClient.updateDossier(cru, dossier.getId()); + assertThat(updated.getDossierName()).isEqualTo(dossierName); + assertThat(updated.isWatermarkPreviewEnabled()).isEqualTo(true); + assertThat(updated.getReportTemplateIds().size()).isEqualTo(2); + assertThat(updated.getReportTemplateIds()).contains(availableTemplates.get(1).getTemplateId(), availableTemplates.get(2).getTemplateId()); + + loadedTemplate = dossierClient.getDossierById(dossier.getId(),false); + + assertThat(loadedTemplate).isEqualTo(updated); + assertThat(loadedTemplate.getReportTemplateIds().size()).isEqualTo(2); + assertThat(loadedTemplate.getReportTemplateIds()).contains(availableTemplates.get(1).getTemplateId(), availableTemplates.get(2).getTemplateId()); + + // 4. update dossier: Add 1 report templates. The others have to be removed + cru = new CreateOrUpdateDossierRequest(); + cru.setDossierTemplateId(dossier.getId()); + BeanUtils.copyProperties(dossier, cru); + cru.setDossierName(dossierName); + cru.setWatermarkPreviewEnabled(true); + cru.setReportTemplateIds(List.of(availableTemplates.get(0).getTemplateId())); + + updated = dossierClient.updateDossier(cru, dossier.getId()); + assertThat(updated.getDossierName()).isEqualTo(dossierName); + assertThat(updated.isWatermarkPreviewEnabled()).isEqualTo(true); + assertThat(updated.getReportTemplateIds().size()).isEqualTo(1); + assertThat(updated.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId()); + + loadedTemplate = dossierClient.getDossierById(dossier.getId(),false); + + assertThat(loadedTemplate).isEqualTo(updated); + assertThat(loadedTemplate.getReportTemplateIds().size()).isEqualTo(1); + assertThat(loadedTemplate.getReportTemplateIds()).contains(availableTemplates.get(0).getTemplateId()); + + + // Remove dossier + dossierClient.getAllDossiers().forEach(ld -> dossierClient.delete(ld.getId())); + dossierClient.hardDeleteDossiers(Sets.newHashSet(dossier.getId())); + assertThat(dossierClient.getAllDossiers()).isEmpty(); + assertThat(dossierClient.getSoftDeletedDossiers()).isEmpty(); + } + + + private List provideTestReportTemplates(Dossier dossier) { + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossier.getDossierTemplateId()) + .multiFileReport(false) + .fileName("reportTemplate123") + .template(new byte[]{1, 2, 3, 4}) + .build()); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossier.getDossierTemplateId()) + .multiFileReport(false) + .fileName("reportTemplate456") + .template(new byte[]{1, 2, 3, 4}) + .build()); + + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() + .activeByDefault(true) + .dossierTemplateId(dossier.getDossierTemplateId()) + .multiFileReport(false) + .fileName("reportTemplate789") + .template(new byte[]{1, 2, 3, 4}) + .build()); + + var availableTemplates = reportTemplateClient.getAvailableReportTemplates(dossier.getDossierTemplateId()); + assertThat(availableTemplates.size()).isEqualTo(3); + return availableTemplates; + } }