diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DownloadController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DownloadController.java index 1f6be3a28..efc161599 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DownloadController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/DownloadController.java @@ -6,6 +6,8 @@ import java.util.List; import java.util.Set; import java.util.stream.Collectors; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import org.springframework.amqp.rabbit.core.RabbitTemplate; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestBody; @@ -46,6 +48,9 @@ public class DownloadController implements DownloadResource { var mimeType = "application/zip"; var existingFileStatuses = fileStatusPersistenceService.getStatusesForDossier(request.getDossierId()); + var filesInNotApprovedState = existingFileStatuses.stream().filter(f -> request.getFileIds().contains(f.getId()) && !WorkflowStatus.APPROVED.equals(f.getWorkflowStatus())).collect(Collectors.toList()); + if (!filesInNotApprovedState.isEmpty()) + throw new BadRequestException("At least one file is not in Approved state"); String downloadFilename = buildName(request.getDossierId(), request.getFileIds(), request.getUserId(), mimeType, existingFileStatuses); String storageId = StorageIdUtils.getStorageId(request.getUserId(), request.getDossierId(), downloadFilename); var dossier = dossierPersistenceService.getActiveOrArchivedDossier(request.getDossierId()); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java index 8e129b091..9be87eb59 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadPreparationTest.java @@ -3,6 +3,7 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import com.fasterxml.jackson.databind.ObjectMapper; import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient; import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; +import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.client.ReportTemplateClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; @@ -12,6 +13,7 @@ import com.iqser.red.service.peristence.v1.server.service.download.DownloadRepor import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.DownloadFileType; 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.file.WorkflowStatus; import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadRequest; import com.iqser.red.service.redaction.report.v1.api.model.ReportResultMessage; import com.iqser.red.service.redaction.report.v1.api.model.StoredFileInformation; @@ -62,6 +64,8 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes @Autowired private DossierClient dossierClient; + @Autowired + private FileClient fileClient; @Test @SneakyThrows @@ -73,6 +77,10 @@ public class DownloadPreparationTest extends AbstractPersistenceServerServiceTes var file = fileTesterAndProvider.testAndProvideFile(dossier); + fileClient.setStatusApproved(dossier.getId(), file.getId(), file.getUploader()); + var file11 = fileClient.getFileStatus(dossier.getId(), file.getId()); + assertThat(file11.getWorkflowStatus()).isEqualTo(WorkflowStatus.APPROVED); + reportTemplateClient.uploadTemplate(ReportTemplateUploadRequest.builder() .activeByDefault(true) .dossierTemplateId(dossierTemplate.getId()) diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java index 98eb0cb13..ab41781f2 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DownloadTest.java @@ -1,15 +1,20 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import com.iqser.red.service.peristence.v1.server.integration.client.DownloadClient; +import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import com.iqser.red.service.persistence.service.v1.api.model.download.DownloadRequest; +import feign.FeignException; import org.junit.Test; import org.springframework.beans.factory.annotation.Autowired; import java.util.Collections; +import java.util.List; import static org.assertj.core.api.Assertions.assertThat; @@ -24,17 +29,34 @@ public class DownloadTest extends AbstractPersistenceServerServiceTest { @Autowired private DownloadClient downloadClient; + @Autowired + private FileClient fileClient; + @Test public void testDownload() { var dossier = dossierTesterAndProvider.provideTestDossier(); var file = fileTesterAndProvider.testAndProvideFile(dossier); + var file2 = fileTesterAndProvider.testAndProvideFile(dossier, "file2.pdf"); + fileClient.setStatusApproved(dossier.getId(), file2.getId(), file2.getUploader()); + var file22 = fileClient.getFileStatus(dossier.getId(), file2.getId()); + assertThat(file22.getWorkflowStatus()).isEqualTo(WorkflowStatus.APPROVED); + + try { + downloadClient.prepareDownload(DownloadRequest.builder() + .userId("1") + .dossierId(dossier.getId()) + .fileIds(List.of(file.getId(), file2.getId())) + .build()); + } catch(FeignException e) { + assertThat(e.status()).isEqualTo(400); + } downloadClient.prepareDownload(DownloadRequest.builder() .userId("1") .dossierId(dossier.getId()) - .fileIds(Collections.singletonList(file.getId())) + .fileIds(List.of(file2.getId())) .build()); var statuses = downloadClient.getDownloadStatus("1");