Pull request #119: RED-2775 Bugfix, uploading deleted file will ignore excluded pages

Merge in RED/persistence-service from bugfix/RED-2775 to master

* commit '9ca9bf80b382e09f853d7bbd8bd7a7942c918a4a':
  RED-2775 Removed unused and not working code
  RED-2775 Bugfix, uploading deleted file will ignore excluded pages
This commit is contained in:
Philipp Schramm 2021-11-17 10:19:29 +01:00 committed by Dominique Eiflaender
commit ab6069fe7f
4 changed files with 105 additions and 28 deletions

View File

@ -186,12 +186,6 @@ public class FileStatusPersistenceService {
throw new NotFoundException("Unknown file=" + fileId);
});
// if (isFileDeleted(fileId)) {
// return;
// }
// fileRepository.setExcludedPages(fileId,
// OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
// OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), excludedPages);
}
@ -289,6 +283,10 @@ public class FileStatusPersistenceService {
@Transactional
public void overwriteFile(String fileId, String uploader, String filename) {
fileRepository.findById(fileId).ifPresent((file) -> {
file.setExcludedPages(new HashSet<>());
});
int countUpdate = fileRepository.overwriteFile(fileId, filename, uploader, ProcessingStatus.FULLREPROCESS,
WorkflowStatus.UNASSIGNED,
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),

View File

@ -79,12 +79,6 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
void setUpdateLastManualRedactionAndHasSuggestions(String fileId, OffsetDateTime lastUpdated, OffsetDateTime lastManualRedaction,
boolean hasSuggestions);
@Modifying
@Query("update FileEntity f set f.lastUpdated = :lastUpdated, f.lastManualRedaction = :lastManualRedaction, " +
"f.excludedPages = :excludedPages where f.id = :fileId")
void setExcludedPages(String fileId, OffsetDateTime lastUpdated, OffsetDateTime lastManualRedaction,
Set<Integer> excludedPages);
@Modifying
@Query("update FileEntity f set f.processingStatus = :processingStatus, f.lastUpdated = :lastUpdated, " +
"f.deleted = :softDeletedTime where f.id = :fileId")

View File

@ -45,7 +45,6 @@ public class FileTesterAndProvider {
return testAndProvideFile(dossier, "test.pdf");
}
@SneakyThrows
public FileModel testAndProvideFile(Dossier dossier, String fileName) {

View File

@ -1,5 +1,12 @@
package com.iqser.red.service.peristence.v1.server.integration.tests;
import static org.assertj.core.api.Assertions.assertThat;
import java.nio.charset.StandardCharsets;
import java.util.Collections;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import com.google.common.collect.Sets;
import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
@ -10,17 +17,17 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTes
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider;
import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.*;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AddRedactionRequest;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ForceRedactionRequest;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.ImageRecategorizationRequest;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.LegalBasisChangeRequest;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.RemoveRedactionRequest;
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.BinaryFileRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import feign.FeignException;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import java.nio.charset.StandardCharsets;
import static org.assertj.core.api.Assertions.assertThat;
public class FileTest extends AbstractPersistenceServerServiceTest {
@ -47,6 +54,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
@Test
public void testEmptyFile() {
var dossier = dossierTesterAndProvider.provideTestDossier();
BinaryFileRequest upload = new BinaryFileRequest("".getBytes(StandardCharsets.UTF_8), "emptyFile.pdf", dossier.getId(), "1");
@ -57,8 +65,10 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
}
}
@Test
public void testFileSoftDeleteReupload() {
var filename = "test.pdf";
var dossier = dossierTesterAndProvider.provideTestDossier();
@ -82,8 +92,10 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedFile.getFilename()).isEqualTo(filename);
}
@Test
public void testFile() {
var dossier = dossierTesterAndProvider.provideTestDossier();
var file = fileTesterAndProvider.testAndProvideFile(dossier);
@ -176,9 +188,9 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
activeFiles = fileClient.getDossierStatus(dossier.getId());
assertThat(activeFiles.size()).isEqualTo(0);
}
@Test
public void testFileWithRedactions() {
@ -199,17 +211,45 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
JSONPrimitive<String> uploadResult = uploadClient.upload(upload);
var secondFile = fileClient.getFileStatus(dossier.getId(), uploadResult.getValue());
var addRedaction = manualRedactionClient.addAddRedaction(dossierId, fileId, AddRedactionRequest.builder().addToDictionary(true)
.addToDossierDictionary(false).comment("comment").status(AnnotationStatus.REQUESTED).typeId(typeId).user("user").reason("1").value("test").legalBasis("1").build());
var addRedaction = manualRedactionClient.addAddRedaction(dossierId, fileId, AddRedactionRequest.builder()
.addToDictionary(true)
.addToDossierDictionary(false)
.comment("comment")
.status(AnnotationStatus.REQUESTED)
.typeId(typeId)
.user("user")
.reason("1")
.value("test")
.legalBasis("1")
.build());
var removeRedaction = manualRedactionClient.addRemoveRedaction(dossierId, fileId, RemoveRedactionRequest.builder()
.annotationId("removeRedactionAnnotation").comment("comment").status(AnnotationStatus.REQUESTED).user("test").removeFromDictionary(false).build());
.annotationId("removeRedactionAnnotation")
.comment("comment")
.status(AnnotationStatus.REQUESTED)
.user("test")
.removeFromDictionary(false)
.build());
var forceRedaction = manualRedactionClient.addForceRedaction(dossierId, fileId, ForceRedactionRequest.builder()
.annotationId("forceRedactionAnnotation").comment("comment").status(AnnotationStatus.REQUESTED).user("test").legalBasis("1").build());
.annotationId("forceRedactionAnnotation")
.comment("comment")
.status(AnnotationStatus.REQUESTED)
.user("test")
.legalBasis("1")
.build());
var legalBasisChange = manualRedactionClient.addLegalBasisChange(dossierId, fileId, LegalBasisChangeRequest.builder()
.annotationId("legalBasisChangeAnnotation").comment("comment").status(AnnotationStatus.REQUESTED).user("test").legalBasis("1").build());
.annotationId("legalBasisChangeAnnotation")
.comment("comment")
.status(AnnotationStatus.REQUESTED)
.user("test")
.legalBasis("1")
.build());
var imageRecategorization = manualRedactionClient.addImageRecategorization(dossierId, fileId, ImageRecategorizationRequest.builder()
.annotationId("imageRecategorizationAnnotation").comment("comment").status(AnnotationStatus.REQUESTED).user("test").typeId("new-type:id").build());
.annotationId("imageRecategorizationAnnotation")
.comment("comment")
.status(AnnotationStatus.REQUESTED)
.user("test")
.typeId("new-type:id")
.build());
var loadedFile = fileClient.getFileStatus(dossierId, fileId);
@ -274,4 +314,50 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedFile.isExcluded()).isFalse();
assertThat(manualRedactionClient.getAddRedaction(fileId, addRedaction.getAnnotationId()).getFileId()).isEqualTo(loadedFile.getId());
}
@Test
public void testFileDeleteReupload() {
// Upload file
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate);
String dossierId = dossier.getId();
String fileName = "may_the_force_with_you.pdf";
var file = fileTesterAndProvider.testAndProvideFile(dossier, fileName);
String fileId = file.getId();
var type = typeProvider.testAndProvideType(dossierTemplate, null, "manual");
String typeId = type.getId();
assertThat(fileClient.getAllStatuses().size()).isEqualTo(1);
fileClient.excludePages(dossierId, fileId, Collections.singleton(1));
assertThat(fileClient.getFileStatus(dossierId, fileId).getExcludedPages().size()).isEqualTo(1);
assertThat(fileClient.getFileStatus(dossierId, fileId).getExcludedPages()).contains(1);
// Delete file
uploadClient.deleteFile(dossierId, fileId);
var softDeletedFiles = fileClient.getSoftDeletedDossierStatus(dossierId);
assertThat(softDeletedFiles.size()).isEqualTo(1);
var activeFiles = fileClient.getDossierStatus(dossierId);
assertThat(activeFiles.size()).isEqualTo(0);
uploadClient.hardDeleteFiles(dossierId, Sets.newHashSet(fileId));
softDeletedFiles = fileClient.getSoftDeletedDossierStatus(dossierId);
assertThat(softDeletedFiles.size()).isEqualTo(0);
activeFiles = fileClient.getDossierStatus(dossierId);
assertThat(activeFiles.size()).isEqualTo(0);
// Reupload file
file = fileTesterAndProvider.testAndProvideFile(dossier, fileName);
assertThat(file.getId()).isEqualTo(fileId);
assertThat(fileClient.getFileStatus(dossierId, fileId).getExcludedPages()).isNullOrEmpty();
}
}