RED-2661 Removing a dossier member or deleting a user must not change the status of a file

- renamed currentReviewer to assignee, "Unassigned" status into "NEW"
- added lastApprover
- modified logic for setCurrentAssignee, setUnderReview, setUnderApproval and setApproved
- integration tests updated
This commit is contained in:
devplant 2021-11-19 13:01:32 +02:00
parent 37ea0c3f2c
commit 104f44b06f
14 changed files with 134 additions and 67 deletions

View File

@ -30,8 +30,9 @@ public class FileModel {
private OffsetDateTime lastProcessed; private OffsetDateTime lastProcessed;
private OffsetDateTime lastIndexed; private OffsetDateTime lastIndexed;
private int numberOfAnalyses; private int numberOfAnalyses;
private String currentReviewer; private String assignee;
private String lastReviewer; private String lastReviewer;
private String lastApprover;
private OffsetDateTime lastManualRedaction; private OffsetDateTime lastManualRedaction;
private boolean hasRedactions; private boolean hasRedactions;
private boolean hasHints; private boolean hasHints;

View File

@ -1,5 +1,5 @@
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file; package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file;
public enum WorkflowStatus { public enum WorkflowStatus {
UNASSIGNED, UNDER_REVIEW, UNDER_APPROVAL, APPROVED NEW, UNDER_REVIEW, UNDER_APPROVAL, APPROVED
} }

View File

@ -25,7 +25,8 @@ public interface StatusResource {
String EXCLUDED_STATUS_PARAM = "excluded"; String EXCLUDED_STATUS_PARAM = "excluded";
String APPROVER_ID_REQUEST_PARAM = "approverId"; String APPROVER_ID_REQUEST_PARAM = "approverId";
String REVIEWER_ID_REQUEST_PARAM = "reviewerId"; String ASSIGNEE_ID_REQUEST_PARAM = "assigneeId";
String USER_ID_REQUEST_PARAM = "userId";
@ResponseBody @ResponseBody
@ -55,20 +56,20 @@ public interface StatusResource {
FileModel getFileStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId); FileModel getFileStatus(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId);
@PostMapping(value = STATUS_PATH + "/reviewer" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE) @PostMapping(value = STATUS_PATH + "/assignee" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE)
void setCurrentFileReviewer(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, void setCurrentFileAssignee(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@RequestParam(value = REVIEWER_ID_REQUEST_PARAM, required =false) String reviewerId); @RequestParam(value = ASSIGNEE_ID_REQUEST_PARAM, required =false) String assigneeId);
@PostMapping(value = STATUS_PATH + "/underreview" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE) @PostMapping(value = STATUS_PATH + "/underreview" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE)
void setStatusUnderReview(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId); void setStatusUnderReview(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = USER_ID_REQUEST_PARAM, required = false) String userId);
@PostMapping(value = STATUS_PATH + "/underapproval" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE) @PostMapping(value = STATUS_PATH + "/underapproval" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE)
void setStatusUnderApproval(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId); void setStatusUnderApproval(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId);
@PostMapping(value = STATUS_PATH + "/approved" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE) @PostMapping(value = STATUS_PATH + "/approved" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE)
void setStatusApproved(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId); void setStatusApproved(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId);
@PostMapping(value = STATUS_PATH + "/toggle-analysis" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE) @PostMapping(value = STATUS_PATH + "/toggle-analysis" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE)
void toggleExclusion(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(EXCLUDED_STATUS_PARAM) boolean excluded); void toggleExclusion(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(EXCLUDED_STATUS_PARAM) boolean excluded);

View File

@ -60,11 +60,14 @@ public class FileEntity {
private int numberOfAnalyses; private int numberOfAnalyses;
@Column @Column
private String currentReviewer; private String assignee;
@Column @Column
private String lastReviewer; private String lastReviewer;
@Column
private String lastApprover;
@Column @Column
private OffsetDateTime lastManualRedaction; private OffsetDateTime lastManualRedaction;

View File

@ -41,7 +41,7 @@ public class FileStatusPersistenceService {
file.setDossier(dossierRepository.getOne(dossierId)); file.setDossier(dossierRepository.getOne(dossierId));
file.setFilename(filename); file.setFilename(filename);
file.setProcessingStatus(ProcessingStatus.UNPROCESSED); file.setProcessingStatus(ProcessingStatus.UNPROCESSED);
file.setWorkflowStatus(WorkflowStatus.UNASSIGNED); file.setWorkflowStatus(WorkflowStatus.NEW);
file.setNumberOfPages(0); file.setNumberOfPages(0);
file.setAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); file.setAdded(OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
file.setUploader(uploader); file.setUploader(uploader);
@ -254,14 +254,13 @@ public class FileStatusPersistenceService {
@Transactional @Transactional
public void setCurrentReviewer(String fileId, String currentReviewer, String lastReviewer) { public void setAssignee(String fileId, String currentReviewer, String lastReviewer, String lastApprover) {
if (isFileDeleted(fileId)) { if (isFileDeleted(fileId)) {
return; return;
} }
int updateCount = fileRepository.setCurrentReviewer(fileId, currentReviewer, lastReviewer, int updateCount = fileRepository.setAssignee(fileId, currentReviewer, lastReviewer, lastApprover,
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
currentReviewer == null ? WorkflowStatus.UNASSIGNED : WorkflowStatus.UNDER_REVIEW);
if (updateCount == 0) { if (updateCount == 0) {
throw new NotFoundException("Unknown file=" + fileId); throw new NotFoundException("Unknown file=" + fileId);
} }
@ -288,7 +287,7 @@ public class FileStatusPersistenceService {
}); });
int countUpdate = fileRepository.overwriteFile(fileId, filename, uploader, ProcessingStatus.FULLREPROCESS, int countUpdate = fileRepository.overwriteFile(fileId, filename, uploader, ProcessingStatus.FULLREPROCESS,
WorkflowStatus.UNASSIGNED, WorkflowStatus.NEW,
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS), OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS),
OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS)); OffsetDateTime.now().truncatedTo(ChronoUnit.MILLIS));
if (countUpdate == 0) { if (countUpdate == 0) {

View File

@ -97,10 +97,9 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
OffsetDateTime hardDeletedTime, OffsetDateTime deleted); OffsetDateTime hardDeletedTime, OffsetDateTime deleted);
@Modifying @Modifying
@Query("update FileEntity f set f.currentReviewer = :currentReviewer, f.lastReviewer = :lastReviewer," + @Query("update FileEntity f set f.assignee = :assignee, f.lastReviewer = :lastReviewer, f.lastApprover = :lastApprover, " +
"f.lastUpdated = :lastUpdated, f.workflowStatus = :workflowStatus where f.id = :fileId") "f.lastUpdated = :lastUpdated where f.id = :fileId")
int setCurrentReviewer(String fileId, String currentReviewer, String lastReviewer, OffsetDateTime lastUpdated, int setAssignee(String fileId, String assignee, String lastReviewer, String lastApprover, OffsetDateTime lastUpdated);
WorkflowStatus workflowStatus);
@Modifying(clearAutomatically = true) @Modifying(clearAutomatically = true)
@Query("update FileEntity f set f.excluded = :excluded, f.lastUpdated = :lastUpdated where f.id = :fileId") @Query("update FileEntity f set f.excluded = :excluded, f.lastUpdated = :lastUpdated where f.id = :fileId")
@ -109,8 +108,8 @@ public interface FileRepository extends JpaRepository<FileEntity, String> {
@Modifying @Modifying
@Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " + @Query("update FileEntity f set f.filename = :filename, f.uploader = :uploader, f.processingStatus = :processingStatus, " +
"f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, " + "f.workflowStatus = :workflowStatus, f.lastUploaded = :lastUploaded, f.lastUpdated = :lastUpdated, " +
"f.lastOCRTime = null, f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, " + "f.lastOCRTime = null, f.excluded = false, f.lastProcessed = null, f.lastReviewer = null, f.lastApprover = null, " +
"f.currentReviewer = null, f.approvalDate = null, f.lastManualRedaction = null, " + "f.assignee = null, f.approvalDate = null, f.lastManualRedaction = null, " +
"f.dictionaryVersion = 0, f.dossierDictionaryVersion = 0, f.rulesVersion = 0, f.hasImages = false, " + "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.hasHints = false, f.hasRedactions = false, f.hasSuggestions = false, f.hasUpdates = false, " +
"f.deleted = null, f.hardDeletedTime = null " + "f.deleted = null, f.hardDeletedTime = null " +

View File

@ -3,6 +3,7 @@ package com.iqser.red.service.peristence.v1.server.controller;
import com.iqser.red.service.peristence.v1.server.service.*; import com.iqser.red.service.peristence.v1.server.service.*;
import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper; import com.iqser.red.service.peristence.v1.server.utils.FileModelMapper;
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; 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.service.v1.api.model.common.JSONPrimitive; 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.FileModel; 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.ProcessingStatus;
@ -77,42 +78,58 @@ public class FileStatusController implements StatusResource {
@Override @Override
public void setCurrentFileReviewer(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public void setCurrentFileAssignee(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId, @PathVariable(FILE_ID) String fileId,
@RequestParam(value = REVIEWER_ID_REQUEST_PARAM, required = false) String reviewerId) { @RequestParam(value = ASSIGNEE_ID_REQUEST_PARAM, required = false) String assigneeId) {
fileStatusService.setAssignee(dossierId, fileId, assigneeId);
fileStatusService.setCurrentReviewer(dossierId, fileId, reviewerId);
fileStatusService.setStatusSuccessful(fileId, reviewerId != null ? WorkflowStatus.UNDER_REVIEW : WorkflowStatus.UNASSIGNED);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
} }
public void setStatusUnderReview(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public void setStatusUnderReview(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId) { @PathVariable(FILE_ID) String fileId,
@RequestParam(value = USER_ID_REQUEST_PARAM, required = false) String userId) {
FileEntity fileStatus = fileStatusService.getStatus(fileId); FileEntity fileStatus = fileStatusService.getStatus(fileId);
String lastReviewer = fileStatus.getLastReviewer(); String assignee = fileStatus.getAssignee();
fileStatusService.setCurrentReviewer(dossierId, fileId, lastReviewer); if (userId != null) {
fileStatusService.setStatusSuccessful(fileId, lastReviewer != null ? WorkflowStatus.UNDER_REVIEW : WorkflowStatus.UNASSIGNED); assignee = userId;
fileStatusService.setAssignee(dossierId, fileId, assignee);
}
fileStatusService.setStatusSuccessful(fileId, assignee != null ? WorkflowStatus.UNDER_REVIEW : WorkflowStatus.NEW);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId); analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
} }
public void setStatusUnderApproval(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public void setStatusUnderApproval(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId, @PathVariable(FILE_ID) String fileId,
@RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) { @RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) {
fileStatusService.setCurrentReviewer(dossierId, fileId, approverId); FileEntity fileStatus = fileStatusService.getStatus(fileId);
fileStatusService.setStatusSuccessful(fileId, approverId != null ? WorkflowStatus.UNDER_APPROVAL : WorkflowStatus.UNASSIGNED); String assignee = fileStatus.getAssignee();
if (approverId != null) {
assignee = approverId;
}
fileStatusService.setAssignee(dossierId, fileId, approverId);
fileStatusService.setStatusSuccessful(fileId, assignee != null ? WorkflowStatus.UNDER_APPROVAL : WorkflowStatus.NEW);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId); analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
} }
public void setStatusApproved(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public void setStatusApproved(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId) { @PathVariable(FILE_ID) String fileId,
@RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) {
FileEntity fileStatus = fileStatusService.getStatus(fileId);
String assignee = fileStatus.getAssignee();
if (assignee == null && approverId == null) {
throw new BadRequestException("No user assigned for the approval");
}
if (approverId != null) {
assignee = approverId;
}
fileStatusService.setAssignee(dossierId, fileId, assignee);
fileStatusService.setApprovalStatusSuccessful(fileId, WorkflowStatus.APPROVED); fileStatusService.setApprovalStatusSuccessful(fileId, WorkflowStatus.APPROVED);
} }
public void toggleExclusion(@PathVariable(DOSSIER_ID_PARAM) String dossierId, public void toggleExclusion(@PathVariable(DOSSIER_ID_PARAM) String dossierId,

View File

@ -33,7 +33,7 @@ public class AnalysisFlagsCalculationService {
var file = fileStatusPersistenceService.getStatus(fileId); var file = fileStatusPersistenceService.getStatus(fileId);
var redactionLog = redactionLogService.getRedactionLog(dossierId, fileId, true); var redactionLog = redactionLogService.getRedactionLog(dossierId, fileId, true);
var viewedPagesForCurrentReviewer = viewedPagesPersistenceService.findViewedPages(fileId, file.getCurrentReviewer()); var viewedPagesForCurrentReviewer = viewedPagesPersistenceService.findViewedPages(fileId, file.getAssignee());
Map<Integer, OffsetDateTime> viewedPages = viewedPagesForCurrentReviewer.stream().collect(Collectors.toMap(ViewedPageEntity::getPage, ViewedPageEntity::getViewedTime)); Map<Integer, OffsetDateTime> viewedPages = viewedPagesForCurrentReviewer.stream().collect(Collectors.toMap(ViewedPageEntity::getPage, ViewedPageEntity::getViewedTime));

View File

@ -60,8 +60,8 @@ public class FileService {
throw new ConflictException("File already exists in status APPROVED"); throw new ConflictException("File already exists in status APPROVED");
} }
if (existingStatus.getCurrentReviewer() != null && !request.getUploader() if (existingStatus.getAssignee() != null && !request.getUploader()
.equalsIgnoreCase(existingStatus.getCurrentReviewer())) { .equalsIgnoreCase(existingStatus.getAssignee())) {
throw new ConflictException("Only the reviewer can overwrite a file"); throw new ConflictException("Only the reviewer can overwrite a file");
} }
} }

View File

@ -10,7 +10,6 @@ import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.
import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity;
import com.iqser.red.service.persistence.management.v1.processor.exception.UserNotFoundException; import com.iqser.red.service.persistence.management.v1.processor.exception.UserNotFoundException;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*;
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.FileType; 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.ProcessingStatus; 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 com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus;
@ -195,17 +194,24 @@ public class FileStatusService {
} }
public void setCurrentReviewer(String dossierId, String fileId, String currentReviewer) { public void setAssignee(String dossierId, String fileId, String currentReviewer) {
if (StringUtils.isNotEmpty(currentReviewer) && !dossierPersistenceService.getAndValidateDossier(dossierId) if (StringUtils.isNotEmpty(currentReviewer) && !dossierPersistenceService.getAndValidateDossier(dossierId)
.getMemberIds() .getMemberIds()
.contains(currentReviewer)) { .contains(currentReviewer)) {
throw new UserNotFoundException("User=" + currentReviewer + " must be member or owner of dossier=" + dossierId); throw new UserNotFoundException("User=" + currentReviewer + " must be member or owner of dossier=" + dossierId);
} }
FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId); FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId);
String lastReviewer = fileStatus.getLastReviewer();
String lastApprover = fileStatus.getLastApprover();
if(WorkflowStatus.UNDER_REVIEW.equals(fileStatus.getWorkflowStatus())) {
lastReviewer = currentReviewer;
}
if(WorkflowStatus.UNDER_APPROVAL.equals(fileStatus.getWorkflowStatus())) {
lastApprover = currentReviewer;
}
fileStatusPersistenceService.setCurrentReviewer(fileId, currentReviewer, fileStatus.getCurrentReviewer()); fileStatusPersistenceService.setAssignee(fileId, currentReviewer, lastReviewer, lastApprover);
} }

View File

@ -61,7 +61,7 @@ public class ReanalysisRequiredStatusService {
if (ProcessingStatus.PROCESSED.equals(fileStatus.getProcessingStatus()) || ProcessingStatus.UNPROCESSED.equals(fileStatus.getProcessingStatus())) { if (ProcessingStatus.PROCESSED.equals(fileStatus.getProcessingStatus()) || ProcessingStatus.UNPROCESSED.equals(fileStatus.getProcessingStatus())) {
switch (fileStatus.getWorkflowStatus()) { switch (fileStatus.getWorkflowStatus()) {
case UNASSIGNED: case NEW:
case UNDER_REVIEW: case UNDER_REVIEW:
case UNDER_APPROVAL: case UNDER_APPROVAL:
if (fileStatus.getLastProcessed() == null) { if (fileStatus.getLastProcessed() == null) {

View File

@ -114,7 +114,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest {
assertThat(dossierStats.isHasSuggestionsFilePresent()).isFalse(); assertThat(dossierStats.isHasSuggestionsFilePresent()).isFalse();
assertThat(dossierStats.isHasUpdatesFilePresent()).isFalse(); assertThat(dossierStats.isHasUpdatesFilePresent()).isFalse();
assertThat(dossierStats.isHasNoFlagsFilePresent()).isTrue(); assertThat(dossierStats.isHasNoFlagsFilePresent()).isTrue();
assertThat(dossierStats.getFileCountPerWorkflowStatus().get(WorkflowStatus.UNASSIGNED)).isEqualTo(1); assertThat(dossierStats.getFileCountPerWorkflowStatus().get(WorkflowStatus.NEW)).isEqualTo(1);
assertThat(dossierStats.getFileCountPerWorkflowStatus().get(WorkflowStatus.APPROVED)).isEqualTo(1); assertThat(dossierStats.getFileCountPerWorkflowStatus().get(WorkflowStatus.APPROVED)).isEqualTo(1);
} }
} }

View File

@ -52,7 +52,7 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
.dossierId(dossier.getId()) .dossierId(dossier.getId())
.build()); .build());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.NEW);
assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100); assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100);
fileProcessingClient.ocrFailed(dossier.getId(), file.getId()); fileProcessingClient.ocrFailed(dossier.getId(), file.getId());
@ -75,7 +75,7 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
fileProcessingClient.indexingSuccessful(dossier.getId(), file.getId()); fileProcessingClient.indexingSuccessful(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.NEW);
assertThat(loadedFile.getLastIndexed()).isNotNull(); assertThat(loadedFile.getLastIndexed()).isNotNull();
} }
@ -100,7 +100,7 @@ public class FileProcessingTest extends AbstractPersistenceServerServiceTest {
.dossierId(dossier.getId()) .dossierId(dossier.getId())
.build()); .build());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNASSIGNED); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.NEW);
assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100); assertThat(loadedFile.getAnalysisVersion()).isEqualTo(100);
// Delete file // Delete file

View File

@ -5,7 +5,10 @@ import static org.assertj.core.api.Assertions.assertThat;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
import java.util.Collections; import java.util.Collections;
import com.iqser.red.service.peristence.v1.server.integration.client.DossierClient;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest;
import org.junit.Test; import org.junit.Test;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import com.google.common.collect.Sets; import com.google.common.collect.Sets;
@ -52,6 +55,9 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
@Autowired @Autowired
private ManualRedactionClient manualRedactionClient; private ManualRedactionClient manualRedactionClient;
@Autowired
private DossierClient dossierClient;
@Test @Test
public void testEmptyFile() { public void testEmptyFile() {
@ -97,6 +103,11 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
public void testFile() { public void testFile() {
var dossier = dossierTesterAndProvider.provideTestDossier(); var dossier = dossierTesterAndProvider.provideTestDossier();
// update
CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest();
BeanUtils.copyProperties(dossier, cru);
cru.getMemberIds().add("2");
var updated = dossierClient.updateDossier(cru, dossier.getId());
var file = fileTesterAndProvider.testAndProvideFile(dossier); var file = fileTesterAndProvider.testAndProvideFile(dossier);
@ -104,10 +115,12 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); var loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(), "1"); fileClient.setCurrentFileAssignee(dossier.getId(), file.getId(), "1");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1"); assertThat(loadedFile.getAssignee()).isEqualTo("1");
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.NEW);
assertThat(loadedFile.getLastReviewer()).isNull();
assertThat(loadedFile.getLastApprover()).isNull();
fileClient.excludePages(dossier.getId(), file.getId(), Sets.newHashSet(1)); fileClient.excludePages(dossier.getId(), file.getId(), Sets.newHashSet(1));
@ -120,30 +133,58 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(loadedFile.getExcludedPages()).isEmpty(); assertThat(loadedFile.getExcludedPages()).isEmpty();
fileClient.setCurrentFileReviewer(dossier.getId(), file.getId(), "1"); fileClient.setCurrentFileAssignee(dossier.getId(), file.getId(), "1");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1"); assertThat(loadedFile.getAssignee()).isEqualTo("1");
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.NEW);
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);
assertThat(loadedFile.getAssignee()).isEqualTo("1");
assertThat(loadedFile.getLastReviewer()).isNull();
assertThat(loadedFile.getLastApprover()).isNull();
fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "1"); fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "1");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_APPROVAL); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_APPROVAL);
assertThat(loadedFile.getAssignee()).isEqualTo("1");
assertThat(loadedFile.getLastReviewer()).isEqualTo("1");
assertThat(loadedFile.getLastApprover()).isNull();
fileClient.setStatusApproved(dossier.getId(), file.getId(), null);
fileClient.setStatusUnderReview(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW);
fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "1");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_APPROVAL);
fileClient.setStatusApproved(dossier.getId(), file.getId());
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId()); loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.APPROVED); assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.APPROVED);
assertThat(loadedFile.getAssignee()).isEqualTo("1");
assertThat(loadedFile.getLastReviewer()).isEqualTo("1");
assertThat(loadedFile.getLastApprover()).isEqualTo("1");
fileClient.setStatusUnderReview(dossier.getId(), file.getId(), "2");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW);
assertThat(loadedFile.getAssignee()).isEqualTo("2");
assertThat(loadedFile.getLastReviewer()).isEqualTo("1");
assertThat(loadedFile.getLastApprover()).isEqualTo("1");
fileClient.setStatusUnderApproval(dossier.getId(), file.getId(), "2");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_APPROVAL);
assertThat(loadedFile.getAssignee()).isEqualTo("2");
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);
assertThat(loadedFile.getAssignee()).isEqualTo("2");
assertThat(loadedFile.getLastReviewer()).isEqualTo("2");
assertThat(loadedFile.getLastApprover()).isEqualTo("2");
assertThat(uploadClient.getOriginal(dossier.getId(), file.getId())).isNotNull(); assertThat(uploadClient.getOriginal(dossier.getId(), file.getId())).isNotNull();
@ -153,7 +194,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
assertThat(uploadClient.getAnnotated(dossier.getId(), file.getId())).isNotNull(); assertThat(uploadClient.getAnnotated(dossier.getId(), file.getId())).isNotNull();
fileClient.setStatusUnderReview(dossier.getId(), file.getId()); fileClient.setStatusUnderReview(dossier.getId(), file.getId(), null);
fileClient.toggleExclusion(dossier.getId(), file.getId(), true); fileClient.toggleExclusion(dossier.getId(), file.getId(), true);