From 8aacfd1b1f7ffbbb0c9d0e528c945f97e458fec6 Mon Sep 17 00:00:00 2001 From: Ancuta Morarasu Date: Wed, 11 May 2016 12:41:41 +0000 Subject: [PATCH] Merged HEAD (5.2) to 5.2.N (5.2.1) 126636 jkaabimofrad: Merged FILE-FOLDER-API (5.2.0) to HEAD (5.2) 126201 jkaabimofrad: SFS-558: Added test for the move/copy between sites. git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@126987 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../rest/api/tests/AbstractBaseApiTest.java | 27 ++++++ .../alfresco/rest/api/tests/NodeApiTest.java | 92 +++++++++++++++++++ 2 files changed, 119 insertions(+) diff --git a/source/test-java/org/alfresco/rest/api/tests/AbstractBaseApiTest.java b/source/test-java/org/alfresco/rest/api/tests/AbstractBaseApiTest.java index cb66c3e5f0..6a61b3e60b 100644 --- a/source/test-java/org/alfresco/rest/api/tests/AbstractBaseApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/AbstractBaseApiTest.java @@ -47,8 +47,10 @@ import org.alfresco.rest.api.tests.client.data.Document; import org.alfresco.rest.api.tests.client.data.Folder; import org.alfresco.rest.api.tests.client.data.Node; import org.alfresco.rest.api.tests.client.data.Rendition; +import org.alfresco.rest.api.tests.client.data.SiteRole; import org.alfresco.rest.api.tests.util.MultiPartBuilder; import org.alfresco.rest.api.tests.util.RestApiUtil; +import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.util.TempFileProvider; import org.springframework.util.ResourceUtils; @@ -308,6 +310,31 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi return site; } + protected void inviteToSite(final TestSite testSite, final TestPerson invitee, final SiteRole siteRole) + { + TenantUtil.runAsTenant(new TenantUtil.TenantRunAsWork() + { + @Override + public Void doWork() throws Exception + { + testSite.inviteToSite(invitee.getId(), siteRole); + return null; + } + }, testSite.getNetworkId()); + } + + protected NodeRef getSiteDocLib(final TestSite testSite) + { + return TenantUtil.runAsTenant(new TenantUtil.TenantRunAsWork() + { + @Override + public NodeRef doWork() throws Exception + { + return testSite.getContainerNodeRef(("documentLibrary")); + } + }, testSite.getNetworkId()); + } + protected void checkStatus(int expectedStatus, int actualStatus) { if (expectedStatus > 0 && expectedStatus != actualStatus) diff --git a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java index 14d0dd0a9a..a9249abcf5 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java @@ -1535,6 +1535,98 @@ public class NodeApiTest extends AbstractBaseApiTest } + /** + * Tests move and copy folder between sites. + * + *

POST:

+ * {@literal :/alfresco/api//public/alfresco/versions/1/nodes//move} + * + *

POST:

+ * {@literal :/alfresco/api//public/alfresco/versions/1/nodes//copy} + */ + @Test + public void testMoveCopyBetweenSites() throws Exception + { + /* + * Precondition - create two sites, invite users, create folders + */ + AuthenticationUtil.setFullyAuthenticatedUser(userOneN1.getId()); + // userOneN1 creates a public site and adds userTwoN1 as a site collaborator + TestSite user1Site = createSite(userOneN1.getDefaultAccount(), userOneN1, SiteVisibility.PUBLIC); + inviteToSite(user1Site, userTwoN1, SiteRole.SiteCollaborator); + + // Get user1Site's docLib node id + final String user1SiteDocLibNodeId = getSiteDocLib(user1Site).getId(); + + // userOneN1 creates a folder in the docLib of his site (user1Site) + String user1Folder = "folder" + System.currentTimeMillis() + "_user1"; + String user1FolderNodeId = createFolder(userOneN1.getId(), user1SiteDocLibNodeId, user1Folder, null).getId(); + + AuthenticationUtil.setFullyAuthenticatedUser(userTwoN1.getId()); + // userTwoN1 creates a public site and adds userOneN1 as a site collaborator + TestSite user2Site = createSite(userTwoN1.getDefaultAccount(), userTwoN1, SiteVisibility.PUBLIC); + inviteToSite(user2Site, userOneN1, SiteRole.SiteCollaborator); + + // Get user2Site's docLib node id + final String user2SiteDocLibNodeId = getSiteDocLib(user2Site).getId(); + + // userTwoN1 creates 2 folders within the docLib of the user1Site + String user2Folder1 = "folder1" + System.currentTimeMillis() + "_user2"; + String user2FolderNodeId = createFolder(userTwoN1.getId(), user1SiteDocLibNodeId, user2Folder1, null).getId(); + + String user2Folder2 = "folder2" + System.currentTimeMillis() + "_user2"; + String user2Folder2NodeId = createFolder(userTwoN1.getId(), user1SiteDocLibNodeId, user2Folder2, null).getId(); + + /* + * Test move between sites + */ + // userOneN1 moves the folder created by userTwoN1 to the user2Site's docLib + AuthenticationUtil.setFullyAuthenticatedUser(userOneN1.getId()); + NodeTarget target = new NodeTarget(); + target.setTargetParentId(user2SiteDocLibNodeId); + HttpResponse response = post("nodes/" + user2FolderNodeId + "/move", userOneN1.getId(), toJsonAsStringNonNull(target), null, 200); + Folder moveFolderResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Folder.class); + assertEquals(user2SiteDocLibNodeId, moveFolderResp.getParentId()); + + // userOneN1 tries to undo the move (moves back the folder to its original place) + // as userOneN1 is just a SiteCollaborator in the user2Site, he can't move the folder which he doesn't own - ACL access permission. + target = new NodeTarget(); + target.setTargetParentId(user1SiteDocLibNodeId); + post("nodes/" + user2FolderNodeId + "/move", userOneN1.getId(), toJsonAsStringNonNull(target), null, 403); + + // userOneN1 moves the folder created by himself to the docLib of the user2Site + target = new NodeTarget(); + target.setTargetParentId(user2SiteDocLibNodeId); + response = post("nodes/" + user1FolderNodeId + "/move", userOneN1.getId(), toJsonAsStringNonNull(target), null, 200); + moveFolderResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Folder.class); + assertEquals(user2SiteDocLibNodeId, moveFolderResp.getParentId()); + + // userOneN1 tries to undo the move (moves back the folder to its original place) + // The undo should be successful as userOneN1 owns the folder + target = new NodeTarget(); + target.setTargetParentId(user1SiteDocLibNodeId); + response = post("nodes/" + user1FolderNodeId + "/move", userOneN1.getId(), toJsonAsStringNonNull(target), null, 200); + moveFolderResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Folder.class); + assertEquals(user1SiteDocLibNodeId, moveFolderResp.getParentId()); + + + /* + * Test copy between sites + */ + // userOneN1 copies the folder created by userTwoN1 to the user2Site's docLib + target = new NodeTarget(); + target.setTargetParentId(user2SiteDocLibNodeId); + response = post("nodes/" + user2Folder2NodeId + "/copy", userOneN1.getId(), toJsonAsStringNonNull(target), null, 201); + Folder copyFolderResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Folder.class); + assertEquals(user2SiteDocLibNodeId, copyFolderResp.getParentId()); + + // userOneN1 tries to undo the copy (hard deletes the created copy) + Map params = Collections.singletonMap("permanent", "true"); + delete("nodes", userOneN1.getId(), copyFolderResp.getId(), params, 204); + // Check it's deleted + getSingle("nodes", userOneN1.getId(), copyFolderResp.getId(), 404); + } + /** * Tests create folder. *

POST: