Merge branch 'RE-10691-fp' into 'master'
RED-10691: 500 when approving file in a dossier where dossier owner lost manager role Closes RE-10691 See merge request redactmanager/persistence-service!930
This commit is contained in:
commit
a441909408
@ -28,6 +28,7 @@ import org.springframework.web.bind.annotation.RestController;
|
|||||||
|
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.acl.custom.dossier.DossierACLService;
|
import com.iqser.red.service.persistence.management.v1.processor.acl.custom.dossier.DossierACLService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
|
import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException;
|
import com.iqser.red.service.persistence.management.v1.processor.exception.NotAllowedException;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles;
|
import com.iqser.red.service.persistence.management.v1.processor.roles.ApplicationRoles;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.AccessControlService;
|
||||||
@ -101,8 +102,13 @@ public class StatusController implements StatusResource {
|
|||||||
var accessibleDossierIds = filterByPermissionsService.onlyViewableDossierIds(new ArrayList<>(filesByDossier.getValue().keySet()));
|
var accessibleDossierIds = filterByPermissionsService.onlyViewableDossierIds(new ArrayList<>(filesByDossier.getValue().keySet()));
|
||||||
var response = new HashMap<String, List<FileStatus>>();
|
var response = new HashMap<String, List<FileStatus>>();
|
||||||
for (var dossierId : accessibleDossierIds) {
|
for (var dossierId : accessibleDossierIds) {
|
||||||
var allFoundFiles = fileStatusManagementService.findAllDossierIdAndIds(dossierId, filesByDossier.getValue().get(dossierId));
|
var allFoundFiles = fileStatusManagementService.findAllDossierIdAndIds(dossierId,
|
||||||
response.put(dossierId, allFoundFiles.stream().map(FileStatusMapper::toFileStatus).collect(Collectors.toList()));
|
filesByDossier.getValue()
|
||||||
|
.get(dossierId));
|
||||||
|
response.put(dossierId,
|
||||||
|
allFoundFiles.stream()
|
||||||
|
.map(FileStatusMapper::toFileStatus)
|
||||||
|
.collect(Collectors.toList()));
|
||||||
}
|
}
|
||||||
|
|
||||||
return new JSONPrimitive<>(response);
|
return new JSONPrimitive<>(response);
|
||||||
@ -351,6 +357,10 @@ public class StatusController implements StatusResource {
|
|||||||
.build());
|
.build());
|
||||||
|
|
||||||
var dossier = dossierACLService.enhanceDossierWithACLData(dossierManagementService.getDossierById(dossierId, false, false));
|
var dossier = dossierACLService.enhanceDossierWithACLData(dossierManagementService.getDossierById(dossierId, false, false));
|
||||||
|
|
||||||
|
if (dossier.getOwnerId() == null) {
|
||||||
|
throw new ConflictException("Dossier has no owner!");
|
||||||
|
}
|
||||||
if (!dossier.getOwnerId().equals(KeycloakSecurity.getUserId())) {
|
if (!dossier.getOwnerId().equals(KeycloakSecurity.getUserId())) {
|
||||||
|
|
||||||
var fileStatus = fileStatusManagementService.getFileStatus(fileId);
|
var fileStatus = fileStatusManagementService.getFileStatus(fileId);
|
||||||
|
|||||||
@ -1,13 +1,18 @@
|
|||||||
package com.iqser.red.service.peristence.v1.server.integration.tests;
|
package com.iqser.red.service.peristence.v1.server.integration.tests;
|
||||||
|
|
||||||
|
import static org.junit.Assert.assertThrows;
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
import static org.mockito.ArgumentMatchers.any;
|
||||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||||
import static org.mockito.ArgumentMatchers.anyString;
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
|
import static org.mockito.Mockito.doAnswer;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
@ -18,8 +23,8 @@ import com.iqser.red.service.peristence.v1.server.integration.client.FileClient;
|
|||||||
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider;
|
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider;
|
||||||
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
|
import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider;
|
||||||
import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider;
|
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.integration.utils.AbstractPersistenceServerServiceTest;
|
||||||
|
import com.iqser.red.service.persistence.management.v1.processor.acl.custom.dossier.DossierACLService;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisEntity;
|
import com.iqser.red.service.persistence.management.v1.processor.entity.configuration.LegalBasisEntity;
|
||||||
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService;
|
import com.iqser.red.service.persistence.management.v1.processor.service.persistence.LegalBasisMappingPersistenceService;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.DossierTemplateModel;
|
||||||
@ -33,6 +38,8 @@ import com.iqser.red.service.persistence.service.v1.api.shared.model.dossiertemp
|
|||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.warning.ApproveResponse;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.warning.ApproveResponse;
|
||||||
import com.iqser.red.service.persistence.service.v1.api.shared.model.warning.WarningType;
|
import com.iqser.red.service.persistence.service.v1.api.shared.model.warning.WarningType;
|
||||||
|
|
||||||
|
import feign.FeignException;
|
||||||
|
|
||||||
public class ApprovalTest extends AbstractPersistenceServerServiceTest {
|
public class ApprovalTest extends AbstractPersistenceServerServiceTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@ -44,15 +51,15 @@ public class ApprovalTest extends AbstractPersistenceServerServiceTest {
|
|||||||
@Autowired
|
@Autowired
|
||||||
private DossierTesterAndProvider dossierTesterAndProvider;
|
private DossierTesterAndProvider dossierTesterAndProvider;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
private TypeProvider typeProvider;
|
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
private FileClient fileClient;
|
private FileClient fileClient;
|
||||||
|
|
||||||
@SpyBean
|
@SpyBean
|
||||||
private LegalBasisMappingPersistenceService legalBasisMappingPersistenceService;
|
private LegalBasisMappingPersistenceService legalBasisMappingPersistenceService;
|
||||||
|
|
||||||
|
@SpyBean
|
||||||
|
private DossierACLService dossierACLService;
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testApprovalNoWarnings() {
|
public void testApprovalNoWarnings() {
|
||||||
@ -181,4 +188,54 @@ public class ApprovalTest extends AbstractPersistenceServerServiceTest {
|
|||||||
assertTrue(approveResponse.getFileWarnings().isEmpty());
|
assertTrue(approveResponse.getFileWarnings().isEmpty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testApprovalWhenDossierHasNoOwner() {
|
||||||
|
|
||||||
|
DossierTemplateModel dossierTemplateModel = dossierTemplateTesterAndProvider.provideTestTemplate();
|
||||||
|
|
||||||
|
Dossier dossier = dossierTesterAndProvider.provideTestDossier(dossierTemplateModel);
|
||||||
|
|
||||||
|
FileStatus file = fileTesterAndProvider.testAndProvideFile(dossier, "some-file");
|
||||||
|
fileTesterAndProvider.markFileAsProcessed(dossier.getId(), file.getFileId());
|
||||||
|
|
||||||
|
EntityLog entityLog = new EntityLog();
|
||||||
|
|
||||||
|
when(entityLogService.getEntityLog(anyString(), anyString(), anyBoolean())).thenReturn(entityLog);
|
||||||
|
|
||||||
|
List<com.iqser.red.service.persistence.management.v1.processor.service.users.model.User> allUsers = new ArrayList<>();
|
||||||
|
allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder()
|
||||||
|
.userId("manageradmin1@test.com")
|
||||||
|
.email("manageradmin1@test.com")
|
||||||
|
.isActive(true)
|
||||||
|
.roles(Set.of(getAllRoles()))
|
||||||
|
.build());
|
||||||
|
allUsers.add(com.iqser.red.service.persistence.management.v1.processor.service.users.model.User.builder()
|
||||||
|
.userId("manageradmin2@test.com")
|
||||||
|
.email("manageradmin2@test.com")
|
||||||
|
.isActive(true)
|
||||||
|
.roles(Set.of("RED_USER"))
|
||||||
|
.build());
|
||||||
|
|
||||||
|
when(usersClient.getAllUsers(false)).thenReturn(allUsers);
|
||||||
|
when(usersClient.getAllUsers(true)).thenReturn(allUsers);
|
||||||
|
|
||||||
|
doAnswer(invocation -> {
|
||||||
|
Dossier arg = invocation.getArgument(0);
|
||||||
|
if (dossier.getId().equals(arg.getId())) {
|
||||||
|
Dossier emptyDossier = new Dossier();
|
||||||
|
emptyDossier.setId(arg.getId());
|
||||||
|
return emptyDossier;
|
||||||
|
} else {
|
||||||
|
return invocation.callRealMethod();
|
||||||
|
}
|
||||||
|
}).when(dossierACLService).enhanceDossierWithACLData(any(Dossier.class));
|
||||||
|
|
||||||
|
FeignException ex = assertThrows(FeignException.Conflict.class, () -> {
|
||||||
|
fileClient.setStatusApproved(dossier.getId(), file.getFileId(), false);
|
||||||
|
});
|
||||||
|
|
||||||
|
assertTrue(ex.getMessage().contains("Dossier has no owner!"));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -261,7 +261,7 @@ public abstract class AbstractPersistenceServerServiceTest {
|
|||||||
@MockBean
|
@MockBean
|
||||||
protected TenantsClient tenantsClient;
|
protected TenantsClient tenantsClient;
|
||||||
@MockBean
|
@MockBean
|
||||||
private UsersClient usersClient;
|
protected UsersClient usersClient;
|
||||||
@Autowired
|
@Autowired
|
||||||
protected EncryptionDecryptionService encryptionDecryptionService;
|
protected EncryptionDecryptionService encryptionDecryptionService;
|
||||||
@Autowired
|
@Autowired
|
||||||
@ -286,7 +286,7 @@ public abstract class AbstractPersistenceServerServiceTest {
|
|||||||
private CurrentApplicationTypeProvider currentApplicationTypeProvider;
|
private CurrentApplicationTypeProvider currentApplicationTypeProvider;
|
||||||
|
|
||||||
|
|
||||||
private static String[] getAllRoles() {
|
protected static String[] getAllRoles() {
|
||||||
|
|
||||||
var allRoles = ApplicationRoles.ROLE_DATA.entrySet()
|
var allRoles = ApplicationRoles.ROLE_DATA.entrySet()
|
||||||
.stream()
|
.stream()
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user