RED-9588 - No "You have been unassigned..." Notification after setting file status to back to new

- update the condition for sending unassigned notification
- unit test added
This commit is contained in:
corinaolariu 2024-11-08 15:03:37 +02:00
parent 01ab05b52e
commit bb5e7f5be7
2 changed files with 57 additions and 2 deletions

View File

@ -397,8 +397,10 @@ public class StatusController implements StatusResource {
private void generatePossibleUnassignedFromFileNotification(String dossierId, String fileId, FileModel oldFileStatus, String newAssigneeId) {
if (oldFileStatus.getAssignee() == null || newAssigneeId == null || oldFileStatus.getAssignee().equals(newAssigneeId) || KeycloakSecurity.getUserId()
.equals(oldFileStatus.getAssignee())) {
if (oldFileStatus.getAssignee() == null
|| newAssigneeId == null && oldFileStatus.getAssignee() == null
|| oldFileStatus.getAssignee().equals(newAssigneeId)
|| KeycloakSecurity.getUserId().equals(oldFileStatus.getAssignee())) {
return;
}

View File

@ -8,6 +8,8 @@ import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.mockito.ArgumentMatchers.anyBoolean;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.anyString;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import java.io.ByteArrayInputStream;
@ -25,8 +27,12 @@ import java.util.Set;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.Mockito;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.core.io.ClassPathResource;
import org.springframework.mock.web.MockMultipartFile;
@ -58,7 +64,9 @@ import com.iqser.red.service.persistence.management.v1.processor.service.job.Del
import com.iqser.red.service.persistence.management.v1.processor.service.job.DocumentDataFilesConversionJob;
import com.iqser.red.service.persistence.management.v1.processor.service.job.SoftDeletedFilesCleanupJob;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.FileAttributeConfigPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.NotificationPersistenceService;
import com.iqser.red.service.persistence.management.v1.processor.utils.StorageIdUtils;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttributes;
import com.iqser.red.service.persistence.service.v1.api.shared.model.FileAttributesConfig;
@ -72,6 +80,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryState;
import com.iqser.red.service.persistence.service.v1.api.shared.model.analysislog.entitylog.EntryType;
import com.iqser.red.service.persistence.service.v1.api.shared.model.annotations.AnnotationComments;
import com.iqser.red.service.persistence.service.v1.api.shared.model.audit.AddNotificationRequest;
import com.iqser.red.service.persistence.service.v1.api.shared.model.common.JSONPrimitive;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.Dossier;
import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemplate.dossier.file.FileAttributeConfig;
@ -86,6 +95,7 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.Forc
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.LegalBasisChangeRequestModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RecategorizationRequestModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.manual.RemoveRedactionRequestModel;
import com.iqser.red.service.persistence.service.v1.api.shared.model.notification.NotificationType;
import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPageProto;
import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentPositionDataProto;
import com.knecon.fforesight.service.layoutparser.internal.api.data.redaction.DocumentStructureProto;
@ -160,6 +170,10 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
@Autowired
private DocumentDataFilesConversionJob documentDataFilesConversionJob;
@MockBean
private NotificationPersistenceService notificationPersistenceService;
@Captor
private ArgumentCaptor<AddNotificationRequest> captor;
@Test
@ -1187,4 +1201,43 @@ public class FileTest extends AbstractPersistenceServerServiceTest {
DocumentPositionDataProto.AllDocumentPositionData allDocumentPositionData = DocumentPositionDataProto.AllDocumentPositionData.parseFrom(documentPositionBytes);
}
@Test
public void testUserNotificationsWhenUnAssigned() { //RED-9588
var dossierTemplate = dossierTemplateTesterAndProvider.provideTestTemplate();
var dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate);
var file = fileTesterAndProvider.testAndProvideFile(dossier);
var file2 = fileTesterAndProvider.testAndProvideFile(dossier, "file2");
var currentUserId = userProvider.getUserId();
var user1 = userProvider.getAltUserId();
var user2 = userProvider.getMemberUserId();
assertThat(currentUserId).isNotEqualTo(user1);
assertThat(currentUserId).isNotEqualTo(user2);
assertThat(user1).isNotEqualTo(user2);
DossierRequest cru = new DossierRequest();
cru.setDossierTemplateId(dossierTemplate.getId());
BeanUtils.copyProperties(dossier, cru);
cru.getMemberIds().add(user1);
cru.getMemberIds().add(user2);
dossierClient.createDossierOrUpdateDossier(cru);
fileClient.setStatusUnderReviewForList(dossier.getId(), List.of(file.getId(), file2.getId()), user1);
var fileStatus1 = fileClient.getFileStatus(dossier.getId(), file.getId());
assertEquals(WorkflowStatus.UNDER_REVIEW, fileStatus1.getWorkflowStatus());
assertEquals(user1, fileStatus1.getAssignee());
fileClient.setStatusNewForList(dossier.getId(), List.of(file.getId(), file2.getId()));
fileStatus1 = fileClient.getFileStatus(dossier.getId(), file.getId());
assertEquals(WorkflowStatus.NEW, fileStatus1.getWorkflowStatus());
assertNull(fileStatus1.getAssignee());
verify(notificationPersistenceService, times(5)).insertNotification(captor.capture());
Assertions.assertEquals(captor.getValue().getUserId(), user1);
Assertions.assertEquals(captor.getValue().getNotificationType(), NotificationType.UNASSIGNED_FROM_FILE.name());
}
}