From 5569695ca67c3ddd8cf8e457a59a8e6077d63019 Mon Sep 17 00:00:00 2001 From: devplant Date: Wed, 9 Mar 2022 15:45:58 +0200 Subject: [PATCH] RED-3433 - When importing redactions from a redacted file the system should decline a file that is not a PDF and has a different number of pages - check for validating the pdf file and the number of pages - add junit test --- .../controller/ReanalysisController.java | 20 ++++++++---- .../integration/tests/ReanalysisTest.java | 32 +++++++++++++++++-- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java index c0ad1f2dc..9b6812e04 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/controller/ReanalysisController.java @@ -1,16 +1,11 @@ package com.iqser.red.service.peristence.v1.server.controller; import com.google.common.collect.Sets; -import com.iqser.red.service.pdftron.redaction.v1.api.model.DocumentRequest; -import com.iqser.red.service.pdftron.redaction.v1.api.model.TextHighlightOperation; -import com.iqser.red.service.pdftron.redaction.v1.api.model.TextHighlightRequest; -import com.iqser.red.service.pdftron.redaction.v1.api.model.TextHighlightResponse; +import com.iqser.red.service.pdftron.redaction.v1.api.model.*; import com.iqser.red.service.peristence.v1.server.service.FileStatusService; import com.iqser.red.service.peristence.v1.server.service.IndexingService; import com.iqser.red.service.peristence.v1.server.service.ReanalysisRequiredStatusService; -import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper; import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient; -import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService; @@ -87,6 +82,19 @@ public class ReanalysisController implements ReanalysisResource { public void importRedactions(@RequestBody DocumentRequest documentRequest){ + // validate the pdf file + PdfTronOptimizeRequest request = new PdfTronOptimizeRequest(); + request.setDocument(documentRequest.getDocument()); + PdfTronOptimizeResponse optimize; + try { + optimize = pDFTronRedactionClient.optimize(request); + }catch (Exception e){ + throw new BadRequestException("File Not Valid PDF"); + } + FileModel file = fileStatusService.getStatus(documentRequest.getFileId()); + if (optimize != null && optimize.getNumberOfPages() != file.getNumberOfPages()) { + throw new BadRequestException("The files differ in number of pages"); + } pDFTronRedactionClient.importRedactions(documentRequest); fileStatusService.setStatusFullReprocess(documentRequest.getDossierId(), documentRequest.getFileId(), 1); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java index 09afcc9ca..fed89a1aa 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/ReanalysisTest.java @@ -1,22 +1,26 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; +import com.iqser.red.service.pdftron.redaction.v1.api.model.*; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.client.ReanalysisClient; 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.service.persistence.repository.FileRepository; +import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileModel; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus; -import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; -import org.assertj.core.util.Sets; +import feign.FeignException; import org.junit.Test; +import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; +import java.nio.charset.StandardCharsets; import java.util.Set; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; public class ReanalysisTest extends AbstractPersistenceServerServiceTest { @@ -70,6 +74,30 @@ public class ReanalysisTest extends AbstractPersistenceServerServiceTest { } + @Test + public void testImportRedactions() { + + var dossier = dossierTesterAndProvider.provideTestDossier(); + + var file = fileTesterAndProvider.testAndProvideFile(dossier); + BinaryFileRequest upload = new BinaryFileRequest("testing".getBytes(StandardCharsets.UTF_8), "emptyFile.pdf", dossier.getId(), "1"); + + DocumentRequest documentRequest = DocumentRequest.builder() + .document(upload.getData()) + .fileId(file.getId()).build(); + + when(pdfTronRedactionClient.optimize(Mockito.any())).thenAnswer((args) -> + PdfTronOptimizeResponse.builder() + .document(((PdfTronOptimizeRequest) args.getArguments()[0]).getDocument()) + .numberOfPages(100).build()); + + try { + reanalysisClient.importRedactions(documentRequest); + } catch (FeignException e) { + assertThat(e.status()).isEqualTo(400); + } + } + private void resetProcessingStatus(FileModel file) {