Merge 'origin/master' into feature/RM-6943_AddoToHoldActionInCollabSite

This commit is contained in:
rlucanu
2019-09-10 15:10:15 +03:00
2 changed files with 82 additions and 55 deletions

View File

@@ -31,7 +31,7 @@ import static org.apache.http.HttpStatus.SC_OK;
import static org.testng.AssertJUnit.assertNotNull; import static org.testng.AssertJUnit.assertNotNull;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.Arrays; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@@ -127,7 +127,7 @@ public class HoldsAPI extends BaseAPI
try try
{ {
return convertHTTPResponseToJSON(httpResponse).getString("persistedObject") return convertHTTPResponseToJSON(httpResponse).getString("persistedObject")
.replaceAll(NODE_REF_WORKSPACE_SPACES_STORE, ""); .replace(NODE_REF_WORKSPACE_SPACES_STORE, "");
} }
catch(JSONException error) catch(JSONException error)
{ {
@@ -165,22 +165,36 @@ public class HoldsAPI extends BaseAPI
*/ */
public HttpResponse addItemToHold(String user, String password, String itemNodeRef, String holdName) public HttpResponse addItemToHold(String user, String password, String itemNodeRef, String holdName)
{ {
return addItemToHold(user, password, SC_OK, itemNodeRef, holdName); return addItemsToHolds(user, password, Collections.singletonList(itemNodeRef), Collections.singletonList(holdName));
} }
/** /**
* Adds item(content/record/record folder) to the hold * Adds a list of items (content/record/record folder) to a list of holds
* *
* @param user the user who adds the item to the hold * @param user the user who adds the items to the holds
* @param password the user's password * @param password the user's password
* @param itemNodeRef the nodeRef of the item to be added to hold * @param itemNodeRefs the list of items nodeRefs to be added to holds
* @param holdName the hold name * @param holdNames the list of holds
* @return The HTTP response * @return The HTTP response
*/ */
public HttpResponse addItemToHold(String user, String password, int expectedStatus, String itemNodeRef, public HttpResponse addItemsToHolds(String user, String password, List<String> itemNodeRefs, List<String> holdNames)
String holdName)
{ {
final JSONObject requestParams = addOrRemoveToFromHoldJsonObject(user, password, itemNodeRef, holdName); return addItemsToHolds(user, password, SC_OK, itemNodeRefs, holdNames);
}
/**
* Adds a list of items (content/record/record folder) to a list of holds
*
* @param user the user who adds the items to the holds
* @param password the user's password
* @param itemNodeRefs the list of items nodeRefs to be added to holds
* @param holdNames the list of holds
* @return The HTTP response
*/
public HttpResponse addItemsToHolds(String user, String password, int expectedStatus, List<String> itemNodeRefs,
List<String> holdNames)
{
final JSONObject requestParams = addOrRemoveToFromHoldJsonObject(user, password, itemNodeRefs, holdNames);
return doPostJsonRequest(user, password, expectedStatus, requestParams, RM_HOLDS_API); return doPostJsonRequest(user, password, expectedStatus, requestParams, RM_HOLDS_API);
} }
@@ -196,30 +210,29 @@ public class HoldsAPI extends BaseAPI
public String addToHoldAndGetMessage(String user, String password, int expectedStatus, String itemNodeRef, String public String addToHoldAndGetMessage(String user, String password, int expectedStatus, String itemNodeRef, String
holdName) holdName)
{ {
final HttpResponse httpResponse = addItemToHold(user, password, expectedStatus, itemNodeRef, holdName); final HttpResponse httpResponse = addItemsToHolds(user, password, expectedStatus, Collections.singletonList(itemNodeRef),
Collections.singletonList(holdName));
return APIUtils.extractErrorMessageFromHttpResponse(httpResponse); return APIUtils.extractErrorMessageFromHttpResponse(httpResponse);
} }
/** /**
* Util method to create the request body used when adding an item to holds or when removing an item from holds * Util method to create the request body used when adding items to holds or when removing items from holds
* *
* @param user user to create the request body for add/remove an item to/from hold * @param user user to create the request body for add/remove an item to/from hold
* @param password the user's password * @param password the user's password
* @param itemNodeRef node ref to be added to hold * @param items list of items node refs to be added to holds
* @param holdName hold names for add/remove item * @param holdNames list of hold names for add/remove items
* @return JSONObject fo * @return JSONObject fo
*/ */
private JSONObject addOrRemoveToFromHoldJsonObject(String user, String password, String itemNodeRef, String holdName) private JSONObject addOrRemoveToFromHoldJsonObject(String user, String password, List<String> items, List<String> holdNames)
{ {
final JSONArray nodeRefs = new JSONArray();
final JSONArray nodeRefs = new JSONArray().put(getNodeRefSpacesStore() + itemNodeRef); items.forEach(itemNodeRef -> nodeRefs.put(getNodeRefSpacesStore() + itemNodeRef));
final List<String> holdNames = Arrays.asList(holdName.split(",")); final List<String> holdNodeRefs = holdNames.stream().map(hold ->
final List<String> holdNoderefs = holdNames.stream().map(hold ->
getNodeRefSpacesStore() + getItemNodeRef(user, password, String.format("/%s/%s", HOLDS_CONTAINER, hold))) getNodeRefSpacesStore() + getItemNodeRef(user, password, String.format("/%s/%s", HOLDS_CONTAINER, hold)))
.collect(Collectors.toList()); .collect(Collectors.toList());
final JSONArray holds = new JSONArray(); final JSONArray holds = new JSONArray();
holdNoderefs.forEach(holds::put); holdNodeRefs.forEach(holds::put);
final JSONObject requestParams = new JSONObject(); final JSONObject requestParams = new JSONObject();
requestParams.put("nodeRefs", nodeRefs); requestParams.put("nodeRefs", nodeRefs);
requestParams.put("holds", holds); requestParams.put("holds", holds);
@@ -227,33 +240,47 @@ public class HoldsAPI extends BaseAPI
} }
/** /**
* Remove item(content/record/record folder) from the hold * Remove item(content/record/record folder) from hold
* *
* @param user the user who removes the item from the hold * @param user the user who removes the item from the hold
* @param password the user's password * @param password the user's password
* @param itemNodeRef the nodeRef of the item to be added to hold * @param itemNodeRef the nodeRef of the item to be removed from hold
* @param holdName the hold name * @param holdName the hold name
* @return The HTTP response * @return The HTTP response
*/ */
public HttpResponse removeItemFromHold(String user, String password, String itemNodeRef, String holdName) public HttpResponse removeItemFromHold(String user, String password, String itemNodeRef, String holdName)
{ {
return removeItemFromHold(user, password, SC_OK, itemNodeRef, holdName); return removeItemsFromHolds(user, password, Collections.singletonList(itemNodeRef), Collections.singletonList(holdName));
} }
/** /**
* Remove item(content/record/record folder) to the hold * Remove a list of items (content/record/record folder) from a list of holds
* *
* @param user the user who adds the item to the hold * @param user the user who removes the item from the hold
* @param password the user's password * @param password the user's password
* @param expectedStatus https status code expected * @param itemNodeRefs the list of items nodeRefs to be removed from hold
* @param itemNodeRef the nodeRef of the item to be added to hold * @param holdNames the list of hold names
* @param holdName the hold name
* @return The HTTP response * @return The HTTP response
*/ */
public HttpResponse removeItemFromHold(String user, String password, int expectedStatus, String itemNodeRef, String public HttpResponse removeItemsFromHolds(String user, String password, List<String> itemNodeRefs, List<String> holdNames)
holdName)
{ {
final JSONObject requestParams = addOrRemoveToFromHoldJsonObject(user, password, itemNodeRef, holdName); return removeItemsFromHolds(user, password, SC_OK, itemNodeRefs, holdNames);
}
/**
* Remove a list of items (content/record/record folder) from a list of holds
*
* @param user the user who removes the item from the hold
* @param password the user's password
* @param expectedStatus https status code expected
* @param itemNodeRefs the list of items nodeRefs to be removed from hold
* @param holdNames the list of hold names
* @return The HTTP response
*/
public HttpResponse removeItemsFromHolds(String user, String password, int expectedStatus, List<String> itemNodeRefs,
List<String> holdNames)
{
final JSONObject requestParams = addOrRemoveToFromHoldJsonObject(user, password, itemNodeRefs, holdNames);
return doPutJsonRequest(user, password, expectedStatus, requestParams, RM_HOLDS_API); return doPutJsonRequest(user, password, expectedStatus, requestParams, RM_HOLDS_API);
} }
@@ -262,14 +289,15 @@ public class HoldsAPI extends BaseAPI
* *
* @param user the user who removes the item from hold * @param user the user who removes the item from hold
* @param password the user's password * @param password the user's password
* @param itemNodeRef the nodeRef of the item to be added to hold * @param itemNodeRef the nodeRef of the item to be removed from hold
* @param holdName the hold name * @param holdName the hold name
* @return The error message * @return The error message
*/ */
public String removeFromHoldAndGetMessage(String user, String password, int expectedStatus, String itemNodeRef, String public String removeFromHoldAndGetMessage(String user, String password, int expectedStatus, String itemNodeRef, String
holdName) holdName)
{ {
final HttpResponse httpResponse = removeItemFromHold(user, password, expectedStatus, itemNodeRef, holdName); final HttpResponse httpResponse = removeItemsFromHolds(user, password, expectedStatus, Collections.singletonList(itemNodeRef),
Collections.singletonList(holdName));
return APIUtils.extractErrorMessageFromHttpResponse(httpResponse); return APIUtils.extractErrorMessageFromHttpResponse(httpResponse);
} }

View File

@@ -26,6 +26,8 @@
*/ */
package org.alfresco.rest.rm.community.hold; package org.alfresco.rest.rm.community.hold;
import static java.util.Arrays.asList;
import static org.alfresco.rest.rm.community.base.TestData.FROZEN_ASPECT; import static org.alfresco.rest.rm.community.base.TestData.FROZEN_ASPECT;
import static org.alfresco.rest.rm.community.base.TestData.HOLD_DESCRIPTION; import static org.alfresco.rest.rm.community.base.TestData.HOLD_DESCRIPTION;
import static org.alfresco.rest.rm.community.base.TestData.HOLD_REASON; import static org.alfresco.rest.rm.community.base.TestData.HOLD_REASON;
@@ -43,7 +45,7 @@ import static org.springframework.http.HttpStatus.CREATED;
import static org.testng.Assert.assertFalse; 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.Collections;
import java.util.HashSet; import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Set; import java.util.Set;
@@ -112,16 +114,15 @@ public class RemoveFromHoldsTests extends BaseRMRestTest
STEP("Add content to the holds."); STEP("Add content to the holds.");
holdsAPI.addItemToHold(getAdminUser().getUsername(), getAdminUser().getPassword(), contentHeld holdsAPI.addItemToHold(getAdminUser().getUsername(), getAdminUser().getPassword(), contentHeld
.getNodeRefWithoutVersion(), HOLD_ONE); .getNodeRefWithoutVersion(), HOLD_ONE);
holdsAPI.addItemToHold(getAdminUser().getUsername(), getAdminUser().getPassword(), contentAddToManyHolds holdsAPI.addItemsToHolds(getAdminUser().getUsername(), getAdminUser().getPassword(),
.getNodeRefWithoutVersion(), String.format("%s,%s", HOLD_ONE, HOLD_TWO)); Collections.singletonList(contentAddToManyHolds.getNodeRefWithoutVersion()), asList(HOLD_ONE, HOLD_TWO));
} }
/** /**
* Valid nodes to be removed from hold * Valid nodes to be removed from hold
*/ */
@DataProvider (name = "validNodesToRemoveFromHold") @DataProvider (name = "validNodesToRemoveFromHold")
public Object[][] getValidNodesToRemoveFromHold() throws Exception public Object[][] getValidNodesToRemoveFromHold()
{ {
//create electronic and nonElectronic record in record folder //create electronic and nonElectronic record in record folder
RecordCategoryChild recordFolder = createCategoryFolderInFilePlan(); RecordCategoryChild recordFolder = createCategoryFolderInFilePlan();
@@ -135,8 +136,8 @@ public class RemoveFromHoldsTests extends BaseRMRestTest
RecordCategoryChild folderToHeld = createCategoryFolderInFilePlan(); RecordCategoryChild folderToHeld = createCategoryFolderInFilePlan();
nodesToBeClean.add(folderToHeld.getParentId()); nodesToBeClean.add(folderToHeld.getParentId());
Arrays.asList(electronicRecord.getId(), nonElectronicRecord.getId(), folderToHeld.getId()).forEach(item -> holdsAPI.addItemsToHolds(getAdminUser().getUsername(), getAdminUser().getPassword(),
holdsAPI.addItemToHold(getAdminUser().getUsername(), getAdminUser().getPassword(), item, HOLD_ONE)); asList(electronicRecord.getId(), nonElectronicRecord.getId(), folderToHeld.getId()), Collections.singletonList(HOLD_ONE));
return new String[][] return new String[][]
{ // record folder { // record folder
@@ -215,11 +216,11 @@ public class RemoveFromHoldsTests extends BaseRMRestTest
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); FileModel privateFile = dataContent.usingSite(privateSite).createContent(CMISUtil.DocumentType.TEXT_PLAIN);
//add files to hold //add files to hold
Arrays.asList(recordFolder.getId(), contentNoHoldCap.getNodeRefWithoutVersion(), holdsAPI.addItemsToHolds(getAdminUser().getUsername(), getAdminUser().getPassword(),
contentNoHoldPerm.getNodeRefWithoutVersion(), privateFile.getNodeRefWithoutVersion()).forEach( asList(recordFolder.getId(), contentNoHoldCap.getNodeRefWithoutVersion(),
node -> holdsAPI.addItemToHold(getAdminUser().getUsername(), getAdminUser().getPassword(), node, contentNoHoldPerm.getNodeRefWithoutVersion(), privateFile.getNodeRefWithoutVersion()),
HOLD_ONE) Collections.singletonList(HOLD_ONE));
);
return new Object[][] return new Object[][]
{ {
// user with read permission on the content, with remove from hold capability and without // user with read permission on the content, with remove from hold capability and without
@@ -290,10 +291,8 @@ public class RemoveFromHoldsTests extends BaseRMRestTest
FileModel contentPermission = dataContent.usingSite(testSite).createContent(CMISUtil.DocumentType.TEXT_PLAIN); FileModel contentPermission = dataContent.usingSite(testSite).createContent(CMISUtil.DocumentType.TEXT_PLAIN);
//add files to hold //add files to hold
Arrays.asList(recordFolder.getId(), contentPermission.getNodeRefWithoutVersion()).forEach( holdsAPI.addItemsToHolds(getAdminUser().getUsername(), getAdminUser().getPassword(),
node -> holdsAPI.addItemToHold(getAdminUser().getUsername(), getAdminUser().getPassword(), node, asList(recordFolder.getId(), contentPermission.getNodeRefWithoutVersion()), Collections.singletonList(HOLD_ONE));
HOLD_ONE)
);
return new Object[][] return new Object[][]
{ {
@@ -325,7 +324,7 @@ public class RemoveFromHoldsTests extends BaseRMRestTest
} }
@AfterClass (alwaysRun = true) @AfterClass (alwaysRun = true)
public void cleanUpRemoveContentFromHold() throws Exception public void cleanUpRemoveContentFromHold()
{ {
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);