Pull request #122: RED-2661

Merge in RED/persistence-service from RED-2661 to master

* commit 'c985a474d60dbd1ba0517887fd0828f399619cf8':
  RED-2661 - Removing a dossier member or deleting a user must not change the status of a file
  RED-2661 Removing a dossier member or deleting a user must not change the status of a file
  RED-2661 Removing a dossier member or deleting a user must not change the status of a file
This commit is contained in:
Corina Olariu 2021-11-22 13:12:01 +01:00 committed by Timo Bejan
commit 8d8fa8de1b
15 changed files with 147 additions and 76 deletions

View File

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

View File

@ -1,5 +1,5 @@
package com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file;
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 APPROVER_ID_REQUEST_PARAM = "approverId";
String REVIEWER_ID_REQUEST_PARAM = "reviewerId";
String ASSIGNEE_ID_REQUEST_PARAM = "assigneeId";
String USER_ID_REQUEST_PARAM = "userId";
@ResponseBody
@ -55,20 +56,20 @@ public interface StatusResource {
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)
void setCurrentFileReviewer(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@RequestParam(value = REVIEWER_ID_REQUEST_PARAM, required =false) String reviewerId);
@PostMapping(value = STATUS_PATH + "/assignee" + DOSSIER_ID_PATH_PARAM + FILE_ID_PATH_VARIABLE, consumes = MediaType.APPLICATION_JSON_VALUE)
void setCurrentFileAssignee(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId,
@RequestParam(value = ASSIGNEE_ID_REQUEST_PARAM, required =false) String assigneeId);
@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)
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)
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)
void toggleExclusion(@PathVariable(DOSSIER_ID_PARAM) String dossierId, @PathVariable(FILE_ID) String fileId, @RequestParam(EXCLUDED_STATUS_PARAM) boolean excluded);

View File

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

View File

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

View File

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

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.utils.FileModelMapper;
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.dossiertemplate.dossier.file.FileModel;
import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.ProcessingStatus;
@ -77,42 +78,58 @@ public class FileStatusController implements StatusResource {
@Override
public void setCurrentFileReviewer(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
public void setCurrentFileAssignee(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId,
@RequestParam(value = REVIEWER_ID_REQUEST_PARAM, required = false) String reviewerId) {
fileStatusService.setCurrentReviewer(dossierId, fileId, reviewerId);
fileStatusService.setStatusSuccessful(fileId, reviewerId != null ? WorkflowStatus.UNDER_REVIEW : WorkflowStatus.UNASSIGNED);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
@RequestParam(value = ASSIGNEE_ID_REQUEST_PARAM, required = false) String assigneeId) {
fileStatusService.setAssignee(dossierId, fileId, assigneeId);
}
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);
String lastReviewer = fileStatus.getLastReviewer();
fileStatusService.setCurrentReviewer(dossierId, fileId, lastReviewer);
fileStatusService.setStatusSuccessful(fileId, lastReviewer != null ? WorkflowStatus.UNDER_REVIEW : WorkflowStatus.UNASSIGNED);
String assignee = fileStatus.getAssignee();
if (userId != null) {
assignee = userId;
fileStatusService.setAssignee(dossierId, fileId, assignee);
}
fileStatusService.setStatusSuccessful(fileId, assignee != null ? WorkflowStatus.UNDER_REVIEW : WorkflowStatus.NEW);
analysisFlagsCalculationService.calculateFlags(dossierId, fileId);
}
public void setStatusUnderApproval(@PathVariable(DOSSIER_ID_PARAM) String dossierId,
@PathVariable(FILE_ID) String fileId,
@RequestParam(value = APPROVER_ID_REQUEST_PARAM, required = false) String approverId) {
fileStatusService.setCurrentReviewer(dossierId, fileId, approverId);
fileStatusService.setStatusSuccessful(fileId, approverId != null ? WorkflowStatus.UNDER_APPROVAL : WorkflowStatus.UNASSIGNED);
FileEntity fileStatus = fileStatusService.getStatus(fileId);
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);
}
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);
}
public void toggleExclusion(@PathVariable(DOSSIER_ID_PARAM) String dossierId,

View File

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

View File

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

View File

@ -194,17 +194,24 @@ public class FileStatusService {
}
public void setCurrentReviewer(String dossierId, String fileId, String currentReviewer) {
public void setAssignee(String dossierId, String fileId, String assignee) {
if (StringUtils.isNotEmpty(currentReviewer) && !dossierPersistenceService.getAndValidateDossier(dossierId)
if (StringUtils.isNotEmpty(assignee) && !dossierPersistenceService.getAndValidateDossier(dossierId)
.getMemberIds()
.contains(currentReviewer)) {
throw new UserNotFoundException("User=" + currentReviewer + " must be member or owner of dossier=" + dossierId);
.contains(assignee)) {
throw new UserNotFoundException("User=" + assignee + " must be member or owner of dossier=" + dossierId);
}
FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId);
String lastReviewer = fileStatus.getLastReviewer();
String lastApprover = fileStatus.getLastApprover();
if(StringUtils.isNotEmpty(assignee) && WorkflowStatus.UNDER_REVIEW.equals(fileStatus.getWorkflowStatus())) {
lastReviewer = assignee;
}
if(StringUtils.isNotEmpty(assignee) && WorkflowStatus.UNDER_APPROVAL.equals(fileStatus.getWorkflowStatus())) {
lastApprover = assignee;
}
FileEntity fileStatus = fileStatusPersistenceService.getStatus(fileId);
fileStatusPersistenceService.setCurrentReviewer(fileId, currentReviewer, fileStatus.getCurrentReviewer());
fileStatusPersistenceService.setAssignee(fileId, assignee, lastReviewer, lastApprover);
}

View File

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

View File

@ -60,7 +60,7 @@ databaseChangeLog:
name: approval_date
type: TIMESTAMP WITHOUT TIME ZONE
- column:
name: current_reviewer
name: assignee
type: VARCHAR(255)
- column:
name: deleted
@ -119,6 +119,9 @@ databaseChangeLog:
- column:
name: last_reviewer
type: VARCHAR(255)
- column:
name: last_approver
type: VARCHAR(255)
- column:
name: last_updated
type: TIMESTAMP WITHOUT TIME ZONE

View File

@ -114,7 +114,7 @@ public class DossierStatsTest extends AbstractPersistenceServerServiceTest {
assertThat(dossierStats.isHasSuggestionsFilePresent()).isFalse();
assertThat(dossierStats.isHasUpdatesFilePresent()).isFalse();
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);
}
}

View File

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

View File

@ -5,7 +5,10 @@ import static org.assertj.core.api.Assertions.assertThat;
import java.nio.charset.StandardCharsets;
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.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import com.google.common.collect.Sets;
@ -52,6 +55,9 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
@Autowired
private ManualRedactionClient manualRedactionClient;
@Autowired
private DossierClient dossierClient;
@Test
public void testEmptyFile() {
@ -97,6 +103,11 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
public void testFile() {
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);
@ -104,10 +115,12 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
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());
assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1");
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW);
assertThat(loadedFile.getAssignee()).isEqualTo("1");
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.NEW);
assertThat(loadedFile.getLastReviewer()).isNull();
assertThat(loadedFile.getLastApprover()).isNull();
fileClient.excludePages(dossier.getId(), file.getId(), Sets.newHashSet(1));
@ -120,30 +133,58 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
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());
assertThat(loadedFile.getCurrentReviewer()).isEqualTo("1");
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_REVIEW);
assertThat(loadedFile.getAssignee()).isEqualTo("1");
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");
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
assertThat(loadedFile.getWorkflowStatus()).isEqualTo(WorkflowStatus.UNDER_APPROVAL);
assertThat(loadedFile.getAssignee()).isEqualTo("1");
assertThat(loadedFile.getLastReviewer()).isEqualTo("1");
assertThat(loadedFile.getLastApprover()).isNull();
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());
fileClient.setStatusApproved(dossier.getId(), file.getId(), null);
loadedFile = fileClient.getFileStatus(dossier.getId(), file.getId());
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();
@ -153,7 +194,7 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
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);