RED-3642 - Not approved files can be prepared for download

- when at least one file from the requested list is not in approved state throw bad request exception
- update junit tests
This commit is contained in:
devplant 2022-04-13 15:42:46 +03:00
parent 1d70009a83
commit 5e8c8103ea
3 changed files with 36 additions and 1 deletions

View File

@ -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());

View File

@ -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())

View File

@ -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");