RED-3749-Remove digital signatures on upload

- merge master
This commit is contained in:
devplant 2022-05-18 15:09:40 +03:00
commit d0b465e0e7
17 changed files with 215 additions and 65 deletions

View File

@ -20,6 +20,7 @@ public class ResizeRedactionRequest {
private String comment;
private int page;
private String value;
private Boolean updateDictionary;
@Builder.Default
private List<Rectangle> positions = new ArrayList<>();

View File

@ -29,7 +29,7 @@ public interface UploadResource {
@PostMapping(value = UPLOAD_PATH, consumes = MediaType.APPLICATION_JSON_VALUE, produces =
MediaType.APPLICATION_JSON_VALUE)
JSONPrimitive<String> upload(@RequestBody AddFileRequest request);
JSONPrimitive<String> upload(@RequestBody AddFileRequest request, @RequestParam(value = "keepManualRedactions", required = false, defaultValue = "false") boolean keepManualRedactions);
@DeleteMapping(value = DELETE_PATH + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE)

View File

@ -1,18 +1,29 @@
package com.iqser.red.service.persistence.management.v1.processor.entity.annotations;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.ElementCollection;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.FetchType;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.AnnotationStatus;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
import javax.persistence.*;
import java.time.OffsetDateTime;
import java.util.ArrayList;
import java.util.List;
@Data
@Builder
@ -39,6 +50,8 @@ public class ManualResizeRedactionEntity implements IBaseAnnotation {
private int page;
@Column(length = 4000)
private String value;
@Column
private Boolean updateDictionary;
@ManyToOne(fetch = FetchType.LAZY)
private FileEntity fileStatus;

View File

@ -79,9 +79,11 @@ public class DictionaryPersistenceService {
type.setRecommendationHexColor(typeValueRequest.getRecommendationHexColor());
type.setDescription(typeValueRequest.getDescription());
type.setLabel(typeValueRequest.getLabel());
type.setAddToDictionaryAction(typeValueRequest.isAddToDictionaryAction());
} else {
BeanUtils.copyProperties(typeValueRequest, type, "type", "dossierTemplateId", "dossierId", "entries", "falsePositiveEntries", "falseRecommendationEntries", "dossierTemplate", "dossier", "id", "version");
}
typeRepository.save(type);
});
}

View File

@ -1,5 +1,18 @@
package com.iqser.red.service.persistence.management.v1.processor.service.persistence;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import javax.transaction.Transactional;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeConfigEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
@ -9,18 +22,8 @@ import com.iqser.red.service.persistence.management.v1.processor.service.persist
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.ProcessingStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import lombok.RequiredArgsConstructor;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import javax.transaction.Transactional;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import lombok.RequiredArgsConstructor;
@Service
@RequiredArgsConstructor
@ -297,14 +300,22 @@ public class FileStatusPersistenceService {
@Transactional
public void overwriteFile(String fileId, String uploader, String filename, boolean hasHighlights) {
public void overwriteFile(String fileId, String uploader, String filename, boolean hasHighlights, boolean keepManualRedactions) {
fileRepository.findById(fileId).ifPresent((file) -> {
file.setExcludedPages(new HashSet<>());
});
int countUpdate = 0;
if(keepManualRedactions) {
countUpdate = fileRepository.overwriteFileAndKeepManualRedactions(fileId, filename, uploader, ProcessingStatus.FULLREPROCESS, OffsetDateTime.now()
.truncatedTo(ChronoUnit.MILLIS), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), hasHighlights);
} else {
fileRepository.findById(fileId).ifPresent((file) -> {
file.setExcludedPages(new HashSet<>());
});
countUpdate = fileRepository.overwriteFile(fileId, filename, uploader, ProcessingStatus.FULLREPROCESS, WorkflowStatus.NEW, OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), hasHighlights);
}
int countUpdate = fileRepository.overwriteFile(fileId, filename, uploader, ProcessingStatus.FULLREPROCESS, WorkflowStatus.NEW, OffsetDateTime.now()
.truncatedTo(ChronoUnit.MILLIS), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), hasHighlights);
if (countUpdate == 0) {
throw new NotFoundException("Unknown file=" + fileId);
}

View File

@ -133,6 +133,17 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
int overwriteFile(String fileId, String filename, String uploader, ProcessingStatus processingStatus, WorkflowStatus workflowStatus, OffsetDateTime lastUploaded,
OffsetDateTime lastUpdated, boolean hasHighlights);
@Modifying(clearAutomatically = true)
@Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, "
+ "f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, f.fileManipulationDate = :lastUploaded, "
+ "f.lastOCRTime = null, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, "
+ "f.approvalDate = null, f.numberOfAnalyses = 0, f.lastManualChangeDate = null, f.redactionModificationDate = null, "
+ "f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, "
+ "f.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, "
+ "f.deleted = null, f.hardDeletedTime = null, f.hasHighlights = :hasHighlights " + "where f.id = :fileId")
int overwriteFileAndKeepManualRedactions(String fileId, String filename, String uploader, ProcessingStatus processingStatus, OffsetDateTime lastUploaded,
OffsetDateTime lastUpdated, boolean hasHighlights);
@Query("select count(f) from FileEntity f inner join DossierEntity d on d.id = f.dossierId where d.dossierTemplateId = :dossierTemplateId" +
" and ((f.deleted is not null and f.hardDeletedTime is null) or " +
" (d.softDeletedTime is not null and d.hardDeletedTime is null)) and d.archivedTime is null")

View File

@ -124,7 +124,6 @@ public class FileAttributesController implements FileAttributesResource {
}
@Transactional
public void setFileAttributes(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId, @RequestBody Map<String, String> fileAttributesMap) {

View File

@ -11,6 +11,7 @@ import com.iqser.red.service.persistence.service.v1.api.resources.UploadResource
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import javax.transaction.Transactional;
@ -29,9 +30,9 @@ public class UploadController implements UploadResource {
private final DossierService dossierService;
@Override
public JSONPrimitive<String> upload(@RequestBody AddFileRequest request) {
public JSONPrimitive<String> upload(@RequestBody AddFileRequest request, @RequestParam(value = "keepManualRedactions", required = false, defaultValue = "false") boolean keepManualRedactions) {
return fileService.upload(request);
return fileService.upload(request, keepManualRedactions);
}

View File

@ -52,7 +52,7 @@ public class FileService {
private final ApplicationConfigService applicationConfigService;
public JSONPrimitive<String> upload(AddFileRequest request) {
public JSONPrimitive<String> upload(AddFileRequest request, boolean keepManualRedactions) {
dossierPersistenceService.getAndValidateDossier(request.getDossierId());
@ -85,7 +85,7 @@ public class FileService {
if (existingStatus != null) {
// the file is already uploaded, just reanalyse it.
fileStatusService.overwriteFile(request.getDossierId(), request.getFileId(), request.getUploader(), request.getFilename(), untouchedDocumentResponse.isHasHighlights());
fileStatusService.overwriteFile(request.getDossierId(), request.getFileId(), request.getUploader(), request.getFilename(), untouchedDocumentResponse.isHasHighlights(), keepManualRedactions);
} else {
// the file is new, should create a new status for it.
log.info("File {} has no status yet, creating one and setting to unprocessed.", request.getFilename());

View File

@ -9,7 +9,6 @@ import com.iqser.red.service.peristence.v1.server.model.NerServiceRequest;
import com.iqser.red.service.peristence.v1.server.model.image.ImageServiceRequest;
import com.iqser.red.service.peristence.v1.server.settings.FileManagementServiceSettings;
import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.DossierEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileAttributeEntity;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.InternalServerErrorException;
@ -220,7 +219,7 @@ public class FileStatusService {
return;
}
MessageType messageType = calculateMessageType(dossierId, fileId, reanalyse, fileModel.getProcessingStatus());
MessageType messageType = calculateMessageType(dossierId, fileId, reanalyse, fileModel.getProcessingStatus(), fileModel);
if (MessageType.ANALYSE.equals(messageType) && settings.isNerServiceEnabled() && !fileManagementStorageService.objectExists(dossierId, fileId, FileType.NER_ENTITIES)) {
log.debug("Add file: {} from dossier {} to NER queue", fileId, dossierId);
@ -262,7 +261,7 @@ public class FileStatusService {
private MessageType calculateMessageType(String dossierId, String fileId, boolean reanalyse,
ProcessingStatus processingStatus) {
ProcessingStatus processingStatus, FileModel fileModel) {
if (!fileManagementStorageService.objectExists(dossierId, fileId, FileType.TEXT)) {
return MessageType.STRUCTURE_ANALYSE;
@ -271,6 +270,9 @@ public class FileStatusService {
return MessageType.ANALYSE;
}
if (reanalyse) {
if (fileModel.getLastFileAttributeChange() != null && fileModel.getLastProcessed().isBefore(fileModel.getLastFileAttributeChange())) {
return MessageType.ANALYSE;
}
return MessageType.REANALYSE;
}
return MessageType.ANALYSE;
@ -433,17 +435,29 @@ public class FileStatusService {
}
public void overwriteFile(String dossierId, String fileId, String uploader, String filename, boolean hasHighlights) {
public void overwriteFile(String dossierId, String fileId, String uploader, String filename, boolean hasHighlights, boolean keepManualRedactions) {
fileManagementStorageService.deleteObject(dossierId, fileId, FileType.REDACTION_LOG);
fileManagementStorageService.deleteObject(dossierId, fileId, FileType.SECTION_GRID);
fileManagementStorageService.deleteObject(dossierId, fileId, FileType.IMAGE_INFO);
fileManagementStorageService.deleteObject(dossierId, fileId, FileType.TEXT);
fileManagementStorageService.deleteObject(dossierId, fileId, FileType.NER_ENTITIES);
if(keepManualRedactions) {
fileStatusPersistenceService.overwriteFile(fileId, uploader, filename, hasHighlights, true);
} else {
fileStatusPersistenceService.overwriteFile(fileId, uploader, filename, hasHighlights, false);
deleteManualRedactions(dossierId, fileId);
}
fileStatusPersistenceService.overwriteFile(fileId, uploader, filename, hasHighlights);
wipeFileData(dossierId, fileId);
viewedPagesPersistenceService.deleteForFile(fileId);
setStatusFullReprocess(dossierId, fileId, false, true);
}
@Transactional
public void wipeFileData(String dossierId, String fileId) {
public void deleteManualRedactions(String dossierId, String fileId) {
OffsetDateTime now = OffsetDateTime.now();
// remove everything related to redaction

View File

@ -7,6 +7,7 @@ import java.nio.charset.StandardCharsets;
import java.time.OffsetDateTime;
import java.time.temporal.ChronoUnit;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
@ -41,6 +42,7 @@ import com.iqser.red.service.persistence.management.v1.processor.exception.NotFo
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DictionaryPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.DossierTemplatePersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.EntryPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileStatusPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.AddRedactionPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.annotations.CommentPersistenceService;
@ -96,11 +98,14 @@ public class ManualRedactionService {
private final StopwordService stopwordService;
private final RabbitTemplate rabbitTemplate;
private final ObjectMapper objectMapper;
private final EntryPersistenceService entryPersistenceService;
private final RedactionLogService redactionLogService;
private final HashFunction hashFunction = Hashing.murmur3_128();
public List<ManualAddResponse> addAddRedaction(String dossierId, String fileId, List<AddRedactionRequest> addRedactionRequests) {
var response = new ArrayList<ManualAddResponse>();
dossierPersistenceService.getAndValidateDossier(dossierId);
@ -468,11 +473,35 @@ public class ManualRedactionService {
List<ResizeRedactionRequest> resizeRedactionRequests) {
var response = new ArrayList<ManualAddResponse>();
dossierPersistenceService.getAndValidateDossier(dossierId);
var dossier = dossierPersistenceService.getAndValidateDossier(dossierId);
for (var resizeRedactionRequest : resizeRedactionRequests) {
boolean reprocess = false;
RedactionLog redactionLog = redactionLogService.getRedactionLog(dossierId, fileId, true, true);
for (ResizeRedactionRequest resizeRedactionRequest : resizeRedactionRequests) {
resizeRedactionPersistenceService.insert(fileId, resizeRedactionRequest);
if (resizeRedactionRequest.getUpdateDictionary() != null && resizeRedactionRequest.getUpdateDictionary()) {
Optional<RedactionLogEntry> redactionLogEntry = redactionLog.getRedactionLogEntry()
.stream()
.filter(r -> r.getId().equals(resizeRedactionRequest.getAnnotationId()))
.findFirst();
if (redactionLogEntry.isPresent() && (redactionLogEntry.get().isDictionaryEntry() || redactionLogEntry.get().isDossierDictionaryEntry())) {
String typeId = redactionLogEntry.get().getType() + ":" + dossier.getDossierTemplateId();
if (redactionLogEntry.get().getValue().length() > resizeRedactionRequest.getValue().length()) {
log.info("Remove old value '{}' from dictionary", redactionLogEntry.get().getValue());
entryPersistenceService.deleteEntries(typeId, List.of(redactionLogEntry.get().getValue()), redactionLog.getAnalysisVersion(), DictionaryEntryType.ENTRY);
}
log.info("Add new value '{}' to dictionary", resizeRedactionRequest.getValue());
entryPersistenceService.addEntries(typeId, new HashSet<>(Collections.singleton(resizeRedactionRequest.getValue())), redactionLog.getAnalysisVersion(), DictionaryEntryType.ENTRY);
reprocess = true;
}
}
Long commentId = null;
if (resizeRedactionRequest.getComment() != null) {
@ -482,10 +511,11 @@ public class ManualRedactionService {
ManualRedactions manualRedactions = ManualRedactions.builder().resizeRedactions(Set.of(loaded)).build();
addManualRedactionToAnalysisQueue(dossierId, fileId, manualRedactions);
response.add(ManualAddResponse.builder()
.annotationId(resizeRedactionRequest.getAnnotationId())
.commentId(commentId)
.build());
response.add(ManualAddResponse.builder().annotationId(resizeRedactionRequest.getAnnotationId()).commentId(commentId).build());
}
if (reprocess) {
reprocess(dossierId, fileId);
}
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);

View File

@ -44,7 +44,7 @@ public class AutomaticAnalysisJob implements Job {
// queue up 5 files
var allStatuses = getAllRelevantStatuses();
allStatuses.sort(Collections.reverseOrder(Comparator.comparing(FileModel::getLastUpdated)));
allStatuses.sort(Comparator.comparing(FileModel::getLastUpdated));
var allStatusesIterator = allStatuses.iterator();
log.info("Files that require reanalysis: {}", allStatuses.size());

View File

@ -0,0 +1,12 @@
databaseChangeLog:
- changeSet:
id: add-update-dictionary-to-manual-resize-redactions
author: philipp
changes:
- addColumn:
columns:
- column:
name: update_dictionary
type: BOOLEAN
tableName: manual_resize_redaction

View File

@ -68,4 +68,6 @@ databaseChangeLog:
- include:
file: db/changelog/sql/27-update-soft-delete-date.sql
- include:
file: db/changelog/28-add-remove-digital-signatures-on-upload.changelog.yaml
file: db/changelog/28-add-update-dictionary-to-manual-resize-redactions.yaml
- include:
file: db/changelog/29-add-remove-digital-signatures-on-upload.changelog.yaml

View File

@ -71,7 +71,7 @@ public class FileTesterAndProvider {
AddFileRequest upload = new AddFileRequest(fileName, fileId, dossier.getId(), "1");
fileManagementStorageService.storeObject(dossier.getId(), fileId, FileType.UNTOUCHED, "test".getBytes(StandardCharsets.UTF_8));
JSONPrimitive<String> uploadResult = uploadClient.upload(upload);
JSONPrimitive<String> uploadResult = uploadClient.upload(upload, false);
return uploadResult.getValue();

View File

@ -7,18 +7,28 @@ 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.peristence.v1.server.service.FileManagementStorageService;
import com.iqser.red.service.persistence.service.v1.api.model.annotations.*;
import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive;
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.AddFileRequest;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.FileType;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.type.DictionaryEntryType;
import com.iqser.red.service.redaction.v1.model.RedactionLog;
import com.iqser.red.service.redaction.v1.model.RedactionLogEntry;
import com.iqser.red.service.redaction.v1.model.SectionGrid;
import org.junit.Test;
import org.mockito.Mockito;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import java.time.OffsetDateTime;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static org.assertj.core.api.Assertions.assertThat;
@ -51,6 +61,10 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
@Autowired
private ViewedPagesClient viewedPagesClient;
@Autowired
private RedactionLogClient redactionLogClient;
@Test
public void testFileSoftDeleteReupload() {
@ -77,6 +91,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedFile.getFilename()).isEqualTo(filename);
}
@Test
public void testFileOverwrite() {
@ -100,7 +115,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(viewedPages.size()).isEqualTo(1);
AddFileRequest upload = new AddFileRequest(filename, file.getId(), dossier.getId(), "1");
JSONPrimitive<String> uploadResult = uploadClient.upload(upload);
JSONPrimitive<String> uploadResult = uploadClient.upload(upload, false);
loadedFile = fileClient.getFileStatus(dossier.getId(), uploadResult.getValue());
assertThat(loadedFile.isExcludedFromAutomaticAnalysis()).isFalse();
@ -109,8 +124,52 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(viewedPages.size()).isEqualTo(0);
}
@Test
public void testFileOverwriteAndKeepManualRedactions() {
var filename = "test.pdf";
var dossier = dossierTesterAndProvider.provideTestDossier();
var file = fileTesterAndProvider.testAndProvideFile(dossier, filename);
fileClient.setStatusUnderReview(dossier.getId(), file.getId(), "1");
fileClient.excludePages(dossier.getId(), file.getId(), Set.of(1));
var redactionLog = redactionLogClient.getRedactionLog(dossier.getId(), file.getId(), null, false, true);
assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isEqualTo(1);
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getFilename()).isEqualTo(filename);
fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "1");
fileClient.toggleAutomaticAnalysis(dossier.getId(), file.getId(), true);
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.isExcludedFromAutomaticAnalysis()).isTrue();
viewedPagesClient.addPage(file.getId(), "1", 1);
var viewedPages = viewedPagesClient.getViewedPages(file.getId(), "1");
assertThat(viewedPages.size()).isEqualTo(1);
AddFileRequest upload = new AddFileRequest(filename, file.getId(), dossier.getId(), "1");
JSONPrimitive<String> uploadResult = uploadClient.upload(upload, true);
loadedFile = fileClient.getFileStatus(dossier.getId(), uploadResult.getValue());
assertThat(loadedFile.isExcludedFromAutomaticAnalysis()).isTrue();
viewedPages = viewedPagesClient.getViewedPages(file.getId(), "1");
assertThat(viewedPages.size()).isEqualTo(0);
assertThat(loadedFile.getAssignee().equals("1"));
assertThat(loadedFile.getWorkflowStatus().equals(file.getWorkflowStatus()));
assertThat(loadedFile.getExcludedPages().equals(file.getExcludedPages()));
}
@Test
public void testFile() {
var start = OffsetDateTime.now();
var dossier = dossierTesterAndProvider.provideTestDossier();
@ -131,7 +190,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getFileManipulationDate()).isNotNull();
fileClient.setCurrentFileAssignee(dossier.getId(), file.getId(), "1");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getAssignee()).isEqualTo("1");
@ -139,17 +197,14 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedFile.getLastReviewer()).isNull();
assertThat(loadedFile.getLastApprover()).isNull();
fileClient.excludePages(dossier.getId(), file.getId(), Sets.newHashSet(1));
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getExcludedPages()).containsExactlyInAnyOrder(1);
fileClient.includePages(dossier.getId(), file.getId(), Sets.newHashSet(1));
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getExcludedPages()).isEmpty();
fileClient.setCurrentFileAssignee(dossier.getId(), file.getId(), "1");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getAssignee()).isEqualTo("1");
@ -157,7 +212,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedFile.getLastReviewer()).isNull();
assertThat(loadedFile.getLastApprover()).isNull();
fileClient.setStatusUnderReview(dossier.getId(), file.getId(), null);
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW);
@ -180,7 +234,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedFile.getLastApprover()).isEqualTo("1");
assertThat(loadedFile.isExcludedFromAutomaticAnalysis()).isTrue();
fileClient.setStatusUnderReview(dossier.getId(), file.getId(), "2");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW);
@ -189,7 +242,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedFile.getLastApprover()).isEqualTo("1");
assertThat(loadedFile.isExcludedFromAutomaticAnalysis()).isTrue();
fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "2");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_APPROVAL);
@ -197,7 +249,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedFile.getLastReviewer()).isEqualTo("2");
assertThat(loadedFile.getLastApprover()).isEqualTo("1");
fileClient.setStatusApproved(dossier.getId(), file.getId(), "2");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.APPROVED);
@ -205,15 +256,12 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedFile.getLastReviewer()).isEqualTo("2");
assertThat(loadedFile.getLastApprover()).isEqualTo("2");
fileClient.setStatusUnderReview(dossier.getId(), file.getId(), null);
fileClient.toggleExclusion(dossier.getId(), file.getId(), true);
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.isExcluded()).isTrue();
fileClient.toggleExclusion(dossier.getId(), file.getId(), false);
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.isExcluded()).isFalse();
@ -225,14 +273,12 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
var activeFiles = fileClient.getDossierStatus(dossier.getId());
assertThat(activeFiles.size()).isEqualTo(0);
uploadClient.undeleteFiles(dossier.getId(), Sets.newHashSet(file.getId()));
softDeletedFiles = fileClient.getSoftDeletedDossierStatus(dossier.getId());
assertThat(softDeletedFiles.size()).isEqualTo(0);
activeFiles = fileClient.getDossierStatus(dossier.getId());
assertThat(activeFiles.size()).isEqualTo(1);
uploadClient.hardDeleteFiles(dossier.getId(), Sets.newHashSet(file.getId()));
softDeletedFiles = fileClient.getSoftDeletedDossierStatus(dossier.getId());
assertThat(softDeletedFiles.size()).isEqualTo(0);
@ -307,7 +353,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(manualRedactionClient.getLegalBasisChange(fileId, legalBasisChange.getAnnotationId()).getFileId()).isEqualTo(loadedFile.getId());
assertThat(manualRedactionClient.getImageRecategorization(fileId, imageRecategorization.getAnnotationId()).getFileId()).isEqualTo(loadedFile.getId());
uploadClient.deleteFile(dossier.getId(), file.getId());
var softDeletedFiles = fileClient.getSoftDeletedDossierStatus(dossier.getId());
assertThat(softDeletedFiles.size()).isEqualTo(1);
@ -329,8 +374,10 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
}
@Test
public void testToggleEnableRedactionTwice() {
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate);
@ -344,9 +391,17 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(fileClient.getDossierStatus(dossier.getId()).size()).isEqualTo(1);
var addRedaction = manualRedactionClient.addAddRedaction(dossierId, fileId, Collections.singletonList(AddRedactionRequest.builder().addToDictionary(true)
.addToDossierDictionary(false).comment("comment").status(AnnotationStatus.REQUESTED).typeId(typeId)
.user("user").reason("1").value("test").legalBasis("1").build())).iterator().next();
var addRedaction = manualRedactionClient.addAddRedaction(dossierId, fileId, Collections.singletonList(AddRedactionRequest.builder()
.addToDictionary(true)
.addToDossierDictionary(false)
.comment("comment")
.status(AnnotationStatus.REQUESTED)
.typeId(typeId)
.user("user")
.reason("1")
.value("test")
.legalBasis("1")
.build())).iterator().next();
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
@ -357,7 +412,6 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedFile.isExcluded()).isTrue();
assertThat(manualRedactionClient.getAddRedaction(fileId, addRedaction.getAnnotationId()).getFileId()).isEqualTo(loadedFile.getId());
fileClient.toggleExclusion(dossier.getId(), file.getId(), false);
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.isExcluded()).isFalse();