update the tests to allow remove from hold with a user with read permission, filling permission over the hold and remove from hold capabilities

This commit is contained in:
Rodica Sutu
2019-08-22 14:51:33 +03:00
parent 35a76988a2
commit 0a26da478b

View File

@@ -44,12 +44,15 @@ import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue; import static org.testng.Assert.assertTrue;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set;
import org.alfresco.dataprep.CMISUtil; import org.alfresco.dataprep.CMISUtil;
import org.alfresco.rest.rm.community.base.BaseRMRestTest; import org.alfresco.rest.rm.community.base.BaseRMRestTest;
import org.alfresco.rest.rm.community.model.hold.HoldEntry; import org.alfresco.rest.rm.community.model.hold.HoldEntry;
import org.alfresco.rest.rm.community.model.record.Record; import org.alfresco.rest.rm.community.model.record.Record;
import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild;
import org.alfresco.rest.rm.community.model.user.UserRoles; import org.alfresco.rest.rm.community.model.user.UserRoles;
import org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI; import org.alfresco.rest.rm.community.requests.gscore.api.RecordFolderAPI;
import org.alfresco.rest.v0.HoldsAPI; import org.alfresco.rest.v0.HoldsAPI;
@@ -79,10 +82,11 @@ public class RemoveFromHoldsTests extends BaseRMRestTest
private static final String ACCESS_DENIED_ERROR_MESSAGE = "Access Denied. You do not have the appropriate " + private static final String ACCESS_DENIED_ERROR_MESSAGE = "Access Denied. You do not have the appropriate " +
"permissions to perform this operation."; "permissions to perform this operation.";
private SiteModel testSite; private SiteModel testSite, privateSite;
private String holdNodeRefOne; private String holdNodeRefOne;
private FileModel contentHeld, contentAddToManyHolds; private FileModel contentHeld, contentAddToManyHolds;
private Set<UserModel> usersToBeClean = new HashSet<>();
private Set<String> nodesToBeClean = new HashSet<>();
@Autowired @Autowired
private HoldsAPI holdsAPI; private HoldsAPI holdsAPI;
@Autowired @Autowired
@@ -99,6 +103,7 @@ public class RemoveFromHoldsTests extends BaseRMRestTest
STEP("Create test files."); STEP("Create test files.");
testSite = dataSite.usingAdmin().createPublicRandomSite(); testSite = dataSite.usingAdmin().createPublicRandomSite();
privateSite = dataSite.usingAdmin().createPrivateRandomSite();
contentHeld = dataContent.usingSite(testSite) contentHeld = dataContent.usingSite(testSite)
.createContent(CMISUtil.DocumentType.TEXT_PLAIN); .createContent(CMISUtil.DocumentType.TEXT_PLAIN);
contentAddToManyHolds = dataContent.usingSite(testSite) contentAddToManyHolds = dataContent.usingSite(testSite)
@@ -119,23 +124,23 @@ public class RemoveFromHoldsTests extends BaseRMRestTest
public Object[][] getValidNodesToRemoveFromHold() throws Exception public Object[][] getValidNodesToRemoveFromHold() throws Exception
{ {
//create electronic and nonElectronic record in record folder //create electronic and nonElectronic record in record folder
String recordFolderId = createCategoryFolderInFilePlan().getId(); RecordCategoryChild recordFolder = createCategoryFolderInFilePlan();
RecordFolderAPI recordFolderAPI = getRestAPIFactory().getRecordFolderAPI(); RecordFolderAPI recordFolderAPI = getRestAPIFactory().getRecordFolderAPI();
nodesToBeClean.add(recordFolder.getParentId());
Record electronicRecord = recordFolderAPI.createRecord(createElectronicRecordModel(), recordFolderId, getFile Record electronicRecord = recordFolderAPI.createRecord(createElectronicRecordModel(), recordFolder.getId(), getFile
(IMAGE_FILE)); (IMAGE_FILE));
assertStatusCode(CREATED); assertStatusCode(CREATED);
Record nonElectronicRecord = recordFolderAPI.createRecord(createNonElectronicRecordModel(), recordFolderId); Record nonElectronicRecord = recordFolderAPI.createRecord(createNonElectronicRecordModel(), recordFolder.getId());
assertStatusCode(CREATED); assertStatusCode(CREATED);
String folderToHeld = createCategoryFolderInFilePlan().getId(); RecordCategoryChild folderToHeld = createCategoryFolderInFilePlan();
nodesToBeClean.add(folderToHeld.getParentId());
Arrays.asList(electronicRecord.getId(), nonElectronicRecord.getId(), folderToHeld).forEach(item -> Arrays.asList(electronicRecord.getId(), nonElectronicRecord.getId(), folderToHeld.getId()).forEach(item ->
holdsAPI.addItemToHold(getAdminUser().getUsername(), getAdminUser().getPassword(), item, HOLD_ONE)); holdsAPI.addItemToHold(getAdminUser().getUsername(), getAdminUser().getPassword(), item, HOLD_ONE));
return new String[][] return new String[][]
{ // record folder { // record folder
{ folderToHeld }, { folderToHeld.getId() },
//electronic record //electronic record
{ electronicRecord.getId() }, { electronicRecord.getId() },
// non electronic record // non electronic record
@@ -200,32 +205,25 @@ public class RemoveFromHoldsTests extends BaseRMRestTest
@DataProvider (name = "userWithoutPermissionForRemoveFromHold") @DataProvider (name = "userWithoutPermissionForRemoveFromHold")
public Object[][] getUserWithoutPermissionForAddToHold() throws Exception public Object[][] getUserWithoutPermissionForAddToHold() throws Exception
{ {
//create electronic and nonElectronic record in record folder //create record folder
String recordFolderId = createCategoryFolderInFilePlan().getId(); RecordCategoryChild recordFolder = createCategoryFolderInFilePlan();
UserModel user = roleService.createUserWithRMRoleAndRMNodePermission(ROLE_RM_MANAGER.roleId, recordFolderId, nodesToBeClean.add(recordFolder.getParentId());
PERMISSION_READ_RECORDS); UserModel user = roleService.createUserWithRMRole(ROLE_RM_MANAGER.roleId);
getRestAPIFactory().getRMUserAPI().addUserPermission(holdNodeRefOne, user, PERMISSION_FILING); getRestAPIFactory().getRMUserAPI().addUserPermission(holdNodeRefOne, user, PERMISSION_FILING);
//create files that will be removed from hold //create files that will be removed from hold
FileModel contentNoPermission = dataContent.usingSite(testSite).createContent(CMISUtil.DocumentType.TEXT_PLAIN);
FileModel contentNoHoldPerm = dataContent.usingSite(testSite).createContent(CMISUtil.DocumentType.TEXT_PLAIN); FileModel contentNoHoldPerm = dataContent.usingSite(testSite).createContent(CMISUtil.DocumentType.TEXT_PLAIN);
FileModel contentNoHoldCap = dataContent.usingSite(testSite).createContent(CMISUtil.DocumentType.TEXT_PLAIN); FileModel contentNoHoldCap = dataContent.usingSite(testSite).createContent(CMISUtil.DocumentType.TEXT_PLAIN);
FileModel privateFile = dataContent.usingSite(privateSite).createContent(CMISUtil.DocumentType.TEXT_PLAIN);
//add files to hold //add files to hold
Arrays.asList(recordFolderId, contentNoHoldCap.getNodeRefWithoutVersion(), Arrays.asList(recordFolder.getId(), contentNoHoldCap.getNodeRefWithoutVersion(),
contentNoHoldPerm.getNodeRefWithoutVersion(), contentNoPermission.getNodeRefWithoutVersion()).forEach( contentNoHoldPerm.getNodeRefWithoutVersion(), privateFile.getNodeRefWithoutVersion()).forEach(
node -> holdsAPI.addItemToHold(getAdminUser().getUsername(), getAdminUser().getPassword(), node, node -> holdsAPI.addItemToHold(getAdminUser().getUsername(), getAdminUser().getPassword(), node,
HOLD_ONE) HOLD_ONE)
); );
return new Object[][] return new Object[][]
{ {
// user without write permission on the content // user with read permission on the content, with remove from hold capability and without
{ // filling permission on a hold
roleService.createUserWithSiteRoleRMRoleAndPermission(testSite, UserRole.SiteConsumer,
holdNodeRefOne, UserRoles.ROLE_RM_MANAGER, PERMISSION_FILING),
contentNoPermission.getNodeRefWithoutVersion()
},
// user with write permission on the content and without filling permission on a hold
{ {
roleService.createUserWithSiteRoleRMRoleAndPermission(testSite, UserRole.SiteCollaborator, roleService.createUserWithSiteRoleRMRoleAndPermission(testSite, UserRole.SiteCollaborator,
holdNodeRefOne, UserRoles.ROLE_RM_MANAGER, PERMISSION_READ_RECORDS), holdNodeRefOne, UserRoles.ROLE_RM_MANAGER, PERMISSION_READ_RECORDS),
@@ -239,10 +237,15 @@ public class RemoveFromHoldsTests extends BaseRMRestTest
holdNodeRefOne, UserRoles.ROLE_RM_POWER_USER, PERMISSION_FILING), holdNodeRefOne, UserRoles.ROLE_RM_POWER_USER, PERMISSION_FILING),
contentNoHoldCap.getNodeRefWithoutVersion() contentNoHoldCap.getNodeRefWithoutVersion()
}, },
//user without write permission on RM record folder //user without read permission on RM record folder
{ {
user, recordFolderId user, recordFolder.getId()
}, },
//user without read permission over the content from the private site
{
user, privateFile.getNodeRefWithoutVersion()
}
}; };
} }
@@ -256,6 +259,9 @@ public class RemoveFromHoldsTests extends BaseRMRestTest
@Test (dataProvider = "userWithoutPermissionForRemoveFromHold") @Test (dataProvider = "userWithoutPermissionForRemoveFromHold")
public void removeFromHoldWithUserWithoutPermission(UserModel userModel, String nodeIdToBeRemoved) throws Exception public void removeFromHoldWithUserWithoutPermission(UserModel userModel, String nodeIdToBeRemoved) throws Exception
{ {
STEP("Update the list of users to be deleted after running the tests");
usersToBeClean.add(userModel);
STEP("Remove node from hold with user without right permission or capability"); STEP("Remove node from hold with user without right permission or capability");
String responseNoHoldPermission = holdsAPI.removeFromHoldAndGetMessage(userModel.getUsername(), String responseNoHoldPermission = holdsAPI.removeFromHoldAndGetMessage(userModel.getUsername(),
userModel.getPassword(), SC_INTERNAL_SERVER_ERROR, nodeIdToBeRemoved, HOLD_ONE); userModel.getPassword(), SC_INTERNAL_SERVER_ERROR, nodeIdToBeRemoved, HOLD_ONE);
@@ -265,11 +271,68 @@ public class RemoveFromHoldsTests extends BaseRMRestTest
assertTrue(hasAspect(nodeIdToBeRemoved, FROZEN_ASPECT)); assertTrue(hasAspect(nodeIdToBeRemoved, FROZEN_ASPECT));
} }
/**
* Data provider with user with right permission or capability to remove from hold a specific node
*
* @return user model and the node ref to be removed from hold
* @throws Exception
*/
@DataProvider (name = "userWithPermissionForRemoveFromHold")
public Object[][] getUserWithPermissionForAddToHold() throws Exception
{
//create record folder
RecordCategoryChild recordFolder = createCategoryFolderInFilePlan();
nodesToBeClean.add(recordFolder.getParentId());
UserModel user = roleService.createUserWithRMRoleAndRMNodePermission(ROLE_RM_MANAGER.roleId, recordFolder.getId(),
PERMISSION_READ_RECORDS);
getRestAPIFactory().getRMUserAPI().addUserPermission(holdNodeRefOne, user, PERMISSION_FILING);
//create file that will be removed from hold
FileModel contentPermission = dataContent.usingSite(testSite).createContent(CMISUtil.DocumentType.TEXT_PLAIN);
//add files to hold
Arrays.asList(recordFolder.getId(), contentPermission.getNodeRefWithoutVersion()).forEach(
node -> holdsAPI.addItemToHold(getAdminUser().getUsername(), getAdminUser().getPassword(), node,
HOLD_ONE)
);
return new Object[][]
{
// user with write permission on the content
{
roleService.createUserWithSiteRoleRMRoleAndPermission(testSite, UserRole.SiteConsumer,
holdNodeRefOne, UserRoles.ROLE_RM_MANAGER, PERMISSION_FILING),
contentPermission.getNodeRefWithoutVersion()
},
//user with read permission on RM record folder
{
user, recordFolder.getId()
},
};
}
@Test (dataProvider = "userWithPermissionForRemoveFromHold")
public void removeFromHoldWithUserWithPermission(UserModel userModel, String nodeIdToBeRemoved) throws Exception
{
STEP("Update the list of users to be deleted after running the tests");
usersToBeClean.add(userModel);
STEP("Remove node from hold with user with right permission and capability");
holdsAPI.removeItemFromHold(userModel.getUsername(),
userModel.getPassword(), nodeIdToBeRemoved, HOLD_ONE);
STEP("Check node is not frozen.");
assertFalse(hasAspect(nodeIdToBeRemoved, FROZEN_ASPECT));
}
@AfterClass (alwaysRun = true) @AfterClass (alwaysRun = true)
public void cleanUpRemoveContentFromHold() throws Exception public void cleanUpRemoveContentFromHold() throws Exception
{ {
holdsAPI.deleteHold(getAdminUser().getUsername(), getAdminUser().getPassword(), HOLD_ONE); holdsAPI.deleteHold(getAdminUser().getUsername(), getAdminUser().getPassword(), HOLD_ONE);
holdsAPI.deleteHold(getAdminUser().getUsername(), getAdminUser().getPassword(), HOLD_TWO); holdsAPI.deleteHold(getAdminUser().getUsername(), getAdminUser().getPassword(), HOLD_TWO);
dataSite.usingAdmin().deleteSite(testSite); dataSite.usingAdmin().deleteSite(testSite);
dataSite.usingAdmin().deleteSite(privateSite);
usersToBeClean.forEach(user -> getDataUser().usingAdmin().deleteUser(user));
nodesToBeClean.forEach(category -> getRestAPIFactory().getRecordCategoryAPI().deleteRecordCategory(category));
} }
} }