mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-14 17:58:59 +00:00
Merged FILE-FOLDER-API (5.2.0) to HEAD (5.2)
122770 jvonka: Nodes & Shared Links APIs - some test refactoring - primarily introduce createTextFile helper (in addition to createFolder/createNode) to reduce dependency on "repoService" test helper - also means we're using the v1 api to upload test content :-) RA-388, RA-773 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@126507 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
@@ -18,8 +18,12 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.rest.api.tests;
|
package org.alfresco.rest.api.tests;
|
||||||
|
|
||||||
|
import static org.alfresco.rest.api.tests.util.RestApiUtil.parsePaging;
|
||||||
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertNotNull;
|
import static org.junit.Assert.assertNotNull;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
|
import org.alfresco.repo.content.MimetypeMap;
|
||||||
import org.alfresco.repo.tenant.TenantUtil;
|
import org.alfresco.repo.tenant.TenantUtil;
|
||||||
import org.alfresco.rest.api.Nodes;
|
import org.alfresco.rest.api.Nodes;
|
||||||
import org.alfresco.rest.api.nodes.NodesEntityResource;
|
import org.alfresco.rest.api.nodes.NodesEntityResource;
|
||||||
@@ -31,15 +35,22 @@ import org.alfresco.rest.api.tests.client.HttpResponse;
|
|||||||
import org.alfresco.rest.api.tests.client.PublicApiClient;
|
import org.alfresco.rest.api.tests.client.PublicApiClient;
|
||||||
import org.alfresco.rest.api.tests.client.PublicApiHttpClient.BinaryPayload;
|
import org.alfresco.rest.api.tests.client.PublicApiHttpClient.BinaryPayload;
|
||||||
import org.alfresco.rest.api.tests.client.RequestContext;
|
import org.alfresco.rest.api.tests.client.RequestContext;
|
||||||
|
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.Folder;
|
||||||
import org.alfresco.rest.api.tests.client.data.Node;
|
import org.alfresco.rest.api.tests.client.data.Node;
|
||||||
|
import org.alfresco.rest.api.tests.util.MultiPartBuilder;
|
||||||
import org.alfresco.rest.api.tests.util.RestApiUtil;
|
import org.alfresco.rest.api.tests.util.RestApiUtil;
|
||||||
import org.alfresco.service.cmr.site.SiteVisibility;
|
import org.alfresco.service.cmr.site.SiteVisibility;
|
||||||
|
import org.alfresco.util.TempFileProvider;
|
||||||
import org.springframework.util.ResourceUtils;
|
import org.springframework.util.ResourceUtils;
|
||||||
|
|
||||||
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.FileNotFoundException;
|
import java.io.FileNotFoundException;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.Serializable;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -298,6 +309,25 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi
|
|||||||
return RestApiUtil.parseRestApiEntry(response.getJsonResponse(), returnType);
|
return RestApiUtil.parseRestApiEntry(response.getJsonResponse(), returnType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected Document createTextFile(String userId, String parentId, String fileName, String textContent) throws IOException, Exception
|
||||||
|
{
|
||||||
|
return createTextFile(userId, parentId, fileName, textContent, "UTF-8", Collections.EMPTY_MAP);
|
||||||
|
}
|
||||||
|
|
||||||
|
protected Document createTextFile(String userId, String parentId, String fileName, String textContent, String encoding, Map<String,String> props) throws IOException, Exception
|
||||||
|
{
|
||||||
|
ByteArrayInputStream inputStream = new ByteArrayInputStream(textContent.getBytes());
|
||||||
|
File txtFile = TempFileProvider.createTempFile(inputStream, getClass().getSimpleName(), ".txt");
|
||||||
|
|
||||||
|
MultiPartBuilder.MultiPartRequest reqBody = MultiPartBuilder.create()
|
||||||
|
.setFileData(new MultiPartBuilder.FileData(fileName, txtFile, MimetypeMap.MIMETYPE_TEXT_PLAIN, encoding))
|
||||||
|
.setProperties(props)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
HttpResponse response = post("nodes/" + parentId + "/children", userId, reqBody.getBody(), null, reqBody.getContentType(), 201);
|
||||||
|
return RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
|
||||||
|
}
|
||||||
|
|
||||||
protected File getResourceFile(String fileName) throws FileNotFoundException
|
protected File getResourceFile(String fileName) throws FileNotFoundException
|
||||||
{
|
{
|
||||||
URL url = NodeApiTest.class.getClassLoader().getResource(RESOURCE_PREFIX + fileName);
|
URL url = NodeApiTest.class.getClassLoader().getResource(RESOURCE_PREFIX + fileName);
|
||||||
|
@@ -28,7 +28,6 @@ import static org.junit.Assert.assertNull;
|
|||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
import org.alfresco.model.ContentModel;
|
||||||
import org.alfresco.model.ForumModel;
|
|
||||||
import org.alfresco.repo.content.ContentLimitProvider.SimpleFixedLimitProvider;
|
import org.alfresco.repo.content.ContentLimitProvider.SimpleFixedLimitProvider;
|
||||||
import org.alfresco.repo.content.MimetypeMap;
|
import org.alfresco.repo.content.MimetypeMap;
|
||||||
import org.alfresco.repo.node.archive.NodeArchiveService;
|
import org.alfresco.repo.node.archive.NodeArchiveService;
|
||||||
@@ -74,7 +73,6 @@ import org.junit.Test;
|
|||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.Serializable;
|
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@@ -97,7 +95,8 @@ import java.util.UUID;
|
|||||||
*
|
*
|
||||||
* TODO
|
* TODO
|
||||||
* - improve test 'fwk' to enable api tests to be run against remote repo (rather than embedded jetty)
|
* - improve test 'fwk' to enable api tests to be run against remote repo (rather than embedded jetty)
|
||||||
* - requires replacement of non-remote calls (eg. repoService, siteService, permissionService) with calls to remote (preferably public) apis
|
* - requires replacement of non-remote calls with remote (preferably public) apis
|
||||||
|
* - eg. createUser (or any other usage of repoService), siteService, permissionService, node/archiveService
|
||||||
*
|
*
|
||||||
* @author Jamal Kaabi-Mofrad
|
* @author Jamal Kaabi-Mofrad
|
||||||
* @author janv
|
* @author janv
|
||||||
@@ -191,24 +190,26 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
@Test
|
@Test
|
||||||
public void testListDocLibChildren() throws Exception
|
public void testListDocLibChildren() throws Exception
|
||||||
{
|
{
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(userOneN1.getId());
|
String userId = userOneN1.getId();
|
||||||
|
|
||||||
|
AuthenticationUtil.setFullyAuthenticatedUser(userId);
|
||||||
NodeRef docLibNodeRef = userOneN1Site.getContainerNodeRef(("documentLibrary"));
|
NodeRef docLibNodeRef = userOneN1Site.getContainerNodeRef(("documentLibrary"));
|
||||||
|
String docLibNodeId = docLibNodeRef.getId();
|
||||||
|
|
||||||
String folder1 = "folder" + System.currentTimeMillis() + "_1";
|
String folder1 = "folder" + System.currentTimeMillis() + "_1";
|
||||||
repoService.addToDocumentLibrary(userOneN1Site, folder1, ContentModel.TYPE_FOLDER);
|
createFolder(userId, docLibNodeId, folder1, null).getId();
|
||||||
|
|
||||||
String folder2 = "folder" + System.currentTimeMillis() + "_2";
|
String folder2 = "folder" + System.currentTimeMillis() + "_2";
|
||||||
repoService.addToDocumentLibrary(userOneN1Site, folder2, ContentModel.TYPE_FOLDER);
|
createFolder(userId, docLibNodeId, folder2, null).getId();
|
||||||
|
|
||||||
String content1 = "content" + System.currentTimeMillis() + "_1";
|
String content1 = "content" + System.currentTimeMillis() + "_1";
|
||||||
repoService.addToDocumentLibrary(userOneN1Site, content1, ContentModel.TYPE_CONTENT);
|
createTextFile(userId, docLibNodeId, content1, "The quick brown fox jumps over the lazy dog 1.").getId();
|
||||||
|
|
||||||
String content2 = "content" + System.currentTimeMillis() + "_2";
|
String content2 = "content" + System.currentTimeMillis() + "_2";
|
||||||
repoService.addToDocumentLibrary(userOneN1Site, content2, ContentModel.TYPE_CONTENT);
|
createTextFile(userId, docLibNodeId, content2, "The quick brown fox jumps over the lazy dog 2.").getId();
|
||||||
|
|
||||||
String forum1 = "forum" + System.currentTimeMillis() + "_1";
|
String forum1 = "forum" + System.currentTimeMillis() + "_1";
|
||||||
repoService.createObjectOfCustomType(docLibNodeRef, forum1, ForumModel.TYPE_TOPIC.toString());
|
createNode(userId, docLibNodeId, forum1, "fm:topic", null);
|
||||||
|
|
||||||
Paging paging = getPaging(0, 100);
|
Paging paging = getPaging(0, 100);
|
||||||
HttpResponse response = getAll(getChildrenUrl(docLibNodeRef), userOneN1.getId(), paging, 200);
|
HttpResponse response = getAll(getChildrenUrl(docLibNodeRef), userOneN1.getId(), paging, 200);
|
||||||
@@ -301,10 +302,7 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
@Test
|
@Test
|
||||||
public void testListMyFilesChildren() throws Exception
|
public void testListMyFilesChildren() throws Exception
|
||||||
{
|
{
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(user1);
|
|
||||||
|
|
||||||
String myNodeId = getMyNodeId(user1);
|
String myNodeId = getMyNodeId(user1);
|
||||||
NodeRef myFilesNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, myNodeId);
|
|
||||||
|
|
||||||
String myChildrenUrl = getChildrenUrl(Nodes.PATH_MY);
|
String myChildrenUrl = getChildrenUrl(Nodes.PATH_MY);
|
||||||
String rootChildrenUrl = getChildrenUrl(Nodes.PATH_ROOT);
|
String rootChildrenUrl = getChildrenUrl(Nodes.PATH_ROOT);
|
||||||
@@ -315,7 +313,7 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
String folder1_Id = createFolder(user1, myNodeId, folder1, props).getId();
|
String folder1_Id = createFolder(user1, myNodeId, folder1, props).getId();
|
||||||
|
|
||||||
String contentF1 = "content" + System.currentTimeMillis() + " in folder 1";
|
String contentF1 = "content" + System.currentTimeMillis() + " in folder 1";
|
||||||
String contentF1_Id = repoService.createDocument(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folder1_Id), contentF1, "The quick brown fox jumps over the lazy dog 1.").getId();
|
String contentF1_Id = createTextFile(user1, folder1_Id, contentF1, "The quick brown fox jumps over the lazy dog 1.").getId();
|
||||||
|
|
||||||
props = new HashMap<>(1);
|
props = new HashMap<>(1);
|
||||||
props.put("cm:title", "This is folder 2");
|
props.put("cm:title", "This is folder 2");
|
||||||
@@ -323,16 +321,21 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
String folder2_Id = createFolder(user1, myNodeId, folder2, props).getId();
|
String folder2_Id = createFolder(user1, myNodeId, folder2, props).getId();
|
||||||
|
|
||||||
String contentF2 = "content" + System.currentTimeMillis() + " in folder 2";
|
String contentF2 = "content" + System.currentTimeMillis() + " in folder 2";
|
||||||
String contentF2_Id = repoService.createDocument(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folder2_Id), contentF2, "The quick brown fox jumps over the lazy dog 2.").getId();
|
String contentF2_Id = createTextFile(user1, folder2_Id, contentF2, "The quick brown fox jumps over the lazy dog 2.").getId();
|
||||||
|
|
||||||
String content1 = "content" + System.currentTimeMillis() + " 1";
|
String content1 = "content" + System.currentTimeMillis() + " 1";
|
||||||
NodeRef contentNodeRef = repoService.createDocument(myFilesNodeRef, content1, "The quick brown fox jumps over the lazy dog.");
|
String content1_Id = createTextFile(user1, myNodeId, content1, "The quick brown fox jumps over the lazy dog.").getId();
|
||||||
repoService.getNodeService().setProperty(contentNodeRef, ContentModel.PROP_OWNER, user1);
|
|
||||||
repoService.getNodeService().setProperty(contentNodeRef, ContentModel.PROP_LAST_THUMBNAIL_MODIFICATION_DATA,
|
props = new HashMap<>();
|
||||||
(Serializable) Collections.singletonList("doclib:1444660852296"));
|
props.put(PROP_OWNER, user1);
|
||||||
|
props.put("cm:lastThumbnailModification", Collections.singletonList("doclib:1444660852296"));
|
||||||
|
|
||||||
|
Node nodeUpdate = new Node();
|
||||||
|
nodeUpdate.setProperties(props);
|
||||||
|
put("nodes", user1, content1_Id, toJsonAsStringNonNull(nodeUpdate), null, 200);
|
||||||
|
|
||||||
List<String> folderIds = Arrays.asList(folder1_Id, folder2_Id);
|
List<String> folderIds = Arrays.asList(folder1_Id, folder2_Id);
|
||||||
List<String> contentIds = Arrays.asList(contentNodeRef.getId());
|
List<String> contentIds = Arrays.asList(content1_Id);
|
||||||
|
|
||||||
|
|
||||||
Paging paging = getPaging(0, Integer.MAX_VALUE);
|
Paging paging = getPaging(0, Integer.MAX_VALUE);
|
||||||
@@ -350,14 +353,14 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
Document node = nodes.get(2);
|
Document node = nodes.get(2);
|
||||||
assertEquals(content1, node.getName());
|
assertEquals(content1, node.getName());
|
||||||
assertEquals("cm:content", node.getNodeType());
|
assertEquals("cm:content", node.getNodeType());
|
||||||
assertEquals(contentNodeRef.getId(), node.getId());
|
assertEquals(content1_Id, node.getId());
|
||||||
UserInfo createdByUser = node.getCreatedByUser();
|
UserInfo createdByUser = node.getCreatedByUser();
|
||||||
assertEquals(user1, createdByUser.getId());
|
assertEquals(user1, createdByUser.getId());
|
||||||
assertEquals(user1 + " " + user1, createdByUser.getDisplayName());
|
assertEquals(user1 + " " + user1, createdByUser.getDisplayName());
|
||||||
UserInfo modifiedByUser = node.getModifiedByUser();
|
UserInfo modifiedByUser = node.getModifiedByUser();
|
||||||
assertEquals(user1, modifiedByUser.getId());
|
assertEquals(user1, modifiedByUser.getId());
|
||||||
assertEquals(user1 + " " + user1, modifiedByUser.getDisplayName());
|
assertEquals(user1 + " " + user1, modifiedByUser.getDisplayName());
|
||||||
assertEquals(MimetypeMap.MIMETYPE_BINARY, node.getContent().getMimeType());
|
assertEquals(MimetypeMap.MIMETYPE_TEXT_PLAIN, node.getContent().getMimeType());
|
||||||
assertNotNull(node.getContent().getMimeTypeName());
|
assertNotNull(node.getContent().getMimeTypeName());
|
||||||
assertNotNull(node.getContent().getEncoding());
|
assertNotNull(node.getContent().getEncoding());
|
||||||
assertTrue(node.getContent().getSizeInBytes() > 0);
|
assertTrue(node.getContent().getSizeInBytes() > 0);
|
||||||
@@ -460,14 +463,14 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
paging = getPaging(0, 10);
|
paging = getPaging(0, 10);
|
||||||
|
|
||||||
// -ve test - list folder children for non-folder node should return 400
|
// -ve test - list folder children for non-folder node should return 400
|
||||||
getAll(getChildrenUrl(contentNodeRef), user1, paging, 400);
|
getAll(getChildrenUrl(content1_Id), user1, paging, 400);
|
||||||
|
|
||||||
// -ve test - list folder children for unknown node should return 404
|
// -ve test - list folder children for unknown node should return 404
|
||||||
getAll(getChildrenUrl(UUID.randomUUID().toString()), user1, paging, 404);
|
getAll(getChildrenUrl(UUID.randomUUID().toString()), user1, paging, 404);
|
||||||
|
|
||||||
// -ve test - user2 tries to access user1's home folder
|
// -ve test - user2 tries to access user1's home folder
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(user2);
|
AuthenticationUtil.setFullyAuthenticatedUser(user2);
|
||||||
getAll(getChildrenUrl(myFilesNodeRef), user2, paging, 403);
|
getAll(getChildrenUrl(myNodeId), user2, paging, 403);
|
||||||
|
|
||||||
// -ve test - try to list children using relative path to unknown node
|
// -ve test - try to list children using relative path to unknown node
|
||||||
params = Collections.singletonMap(Nodes.PARAM_RELATIVE_PATH, "User Homes/" + user1 + "/unknown");
|
params = Collections.singletonMap(Nodes.PARAM_RELATIVE_PATH, "User Homes/" + user1 + "/unknown");
|
||||||
@@ -483,7 +486,7 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
|
|
||||||
// -ve test - list folder children for non-folder node with relative path should return 400
|
// -ve test - list folder children for non-folder node with relative path should return 400
|
||||||
params = Collections.singletonMap(Nodes.PARAM_RELATIVE_PATH, "/unknown");
|
params = Collections.singletonMap(Nodes.PARAM_RELATIVE_PATH, "/unknown");
|
||||||
getAll(getChildrenUrl(contentNodeRef), user1, paging, params, 400);
|
getAll(getChildrenUrl(content1_Id), user1, paging, params, 400);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -517,8 +520,10 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
|
|
||||||
// /Company Home/Sites/RandomSite<timestamp>/documentLibrary/folder<timestamp>_A/folder<timestamp>_B/folder<timestamp>_C/content<timestamp>
|
// /Company Home/Sites/RandomSite<timestamp>/documentLibrary/folder<timestamp>_A/folder<timestamp>_B/folder<timestamp>_C/content<timestamp>
|
||||||
String content = "content" + System.currentTimeMillis();
|
String content = "content" + System.currentTimeMillis();
|
||||||
NodeRef contentNodeRef = repoService.createDocument(folderC_Ref, content, "The quick brown fox jumps over the lazy dog.");
|
String content1_Id = createTextFile(userId, folderC_Id, content, "The quick brown fox jumps over the lazy dog.").getId();
|
||||||
|
|
||||||
|
|
||||||
|
// TODO refactor with remote permission api calls (use v0 until we have v1 ?)
|
||||||
// Revoke folderB inherited permissions
|
// Revoke folderB inherited permissions
|
||||||
permissionService.setInheritParentPermissions(folderB_Ref, false);
|
permissionService.setInheritParentPermissions(folderB_Ref, false);
|
||||||
// Grant userTwoN1 permission for folderC
|
// Grant userTwoN1 permission for folderC
|
||||||
@@ -526,7 +531,7 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
|
|
||||||
//...nodes/nodeId?select=path
|
//...nodes/nodeId?select=path
|
||||||
Map<String, String> params = Collections.singletonMap("select", "path");
|
Map<String, String> params = Collections.singletonMap("select", "path");
|
||||||
HttpResponse response = getSingle(NodesEntityResource.class, userOneN1.getId(), contentNodeRef.getId(), params, 200);
|
HttpResponse response = getSingle(NodesEntityResource.class, userOneN1.getId(), content1_Id, params, 200);
|
||||||
Document node = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
Document node = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
||||||
PathInfo path = node.getPath();
|
PathInfo path = node.getPath();
|
||||||
assertNotNull(path);
|
assertNotNull(path);
|
||||||
@@ -547,7 +552,7 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
|
|
||||||
// Try the above tests with userTwoN1 (site consumer)
|
// Try the above tests with userTwoN1 (site consumer)
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(userTwoN1.getId());
|
AuthenticationUtil.setFullyAuthenticatedUser(userTwoN1.getId());
|
||||||
response = getSingle(NodesEntityResource.class, userTwoN1.getId(), contentNodeRef.getId(), params, 200);
|
response = getSingle(NodesEntityResource.class, userTwoN1.getId(), content1_Id, params, 200);
|
||||||
node = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
node = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
||||||
path = node.getPath();
|
path = node.getPath();
|
||||||
assertNotNull(path);
|
assertNotNull(path);
|
||||||
@@ -585,29 +590,26 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
assertTrue(node.getIsFolder());
|
assertTrue(node.getIsFolder());
|
||||||
assertFalse(node.getIsFile());
|
assertFalse(node.getIsFile());
|
||||||
|
|
||||||
NodeRef myHomeNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, myFilesNodeId);
|
String userHomesId = node.getParentId();
|
||||||
NodeRef userHomesNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, node.getParentId());
|
|
||||||
|
|
||||||
// /Company Home/User Homes/user<timestamp>/folder<timestamp>_A
|
// /Company Home/User Homes/user<timestamp>/folder<timestamp>_A
|
||||||
String folderA = "folder" + System.currentTimeMillis() + "_A";
|
String folderA = "folder" + System.currentTimeMillis() + "_A";
|
||||||
String folderA_Id = createFolder(user1, myFilesNodeId, folderA).getId();
|
String folderA_Id = createFolder(user1, myFilesNodeId, folderA).getId();
|
||||||
NodeRef folderA_Ref = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folderA_Id);
|
|
||||||
|
|
||||||
// /Company Home/User Homes/user<timestamp>/folder<timestamp>_A/folder<timestamp>_B
|
// /Company Home/User Homes/user<timestamp>/folder<timestamp>_A/folder<timestamp>_B
|
||||||
String folderB = "folder" + System.currentTimeMillis() + "_B";
|
String folderB = "folder" + System.currentTimeMillis() + "_B";
|
||||||
String folderB_Id = createFolder(user1, folderA_Id, folderB).getId();
|
String folderB_Id = createFolder(user1, folderA_Id, folderB).getId();
|
||||||
NodeRef folderB_Ref = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folderB_Id);
|
|
||||||
|
|
||||||
// /Company Home/User Homes/user<timestamp>/folder<timestamp>_A/folder<timestamp>_B/content<timestamp>
|
// /Company Home/User Homes/user<timestamp>/folder<timestamp>_A/folder<timestamp>_B/content<timestamp>
|
||||||
String contentName = "content " + System.currentTimeMillis();
|
|
||||||
NodeRef contentNodeRef = repoService.createDocument(folderB_Ref, contentName, "The quick brown fox jumps over the lazy dog.");
|
|
||||||
|
|
||||||
// Add property
|
|
||||||
String title = "test title";
|
String title = "test title";
|
||||||
repoService.getNodeService().setProperty(contentNodeRef, ContentModel.PROP_TITLE, title);
|
Map<String,String> docProps = new HashMap<>();
|
||||||
|
docProps.put("cm:title", title);
|
||||||
|
String contentName = "content " + System.currentTimeMillis();
|
||||||
|
String content1Id = createTextFile(user1, folderB_Id, contentName, "The quick brown fox jumps over the lazy dog.", "UTF-8", docProps).getId();
|
||||||
|
|
||||||
|
|
||||||
// get node info
|
// get node info
|
||||||
response = getSingle(NodesEntityResource.class, user1, contentNodeRef.getId(), null, 200);
|
response = getSingle(NodesEntityResource.class, user1, content1Id, null, 200);
|
||||||
Document documentResp = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
Document documentResp = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
||||||
String content_Id = documentResp.getId();
|
String content_Id = documentResp.getId();
|
||||||
|
|
||||||
@@ -619,25 +621,23 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
d1.setParentId(folderB_Id);
|
d1.setParentId(folderB_Id);
|
||||||
d1.setName(contentName);
|
d1.setName(contentName);
|
||||||
d1.setNodeType("cm:content");
|
d1.setNodeType("cm:content");
|
||||||
|
|
||||||
ContentInfo ci = new ContentInfo();
|
ContentInfo ci = new ContentInfo();
|
||||||
|
ci.setMimeType("text/plain");
|
||||||
// TODO fix me !! (is this an issue with repoService.createDocument ?)
|
ci.setMimeTypeName("Plain Text");
|
||||||
//ci.setMimeType("text/plain");
|
|
||||||
//ci.setMimeTypeName("Plain Text");
|
|
||||||
ci.setMimeType("application/octet-stream");
|
|
||||||
ci.setMimeTypeName("Binary File (Octet Stream)");
|
|
||||||
|
|
||||||
ci.setSizeInBytes(44L);
|
ci.setSizeInBytes(44L);
|
||||||
ci.setEncoding("UTF-8");
|
ci.setEncoding("UTF-8");
|
||||||
|
|
||||||
d1.setContent(ci);
|
d1.setContent(ci);
|
||||||
d1.setCreatedByUser(expectedUser);
|
d1.setCreatedByUser(expectedUser);
|
||||||
d1.setModifiedByUser(expectedUser);
|
d1.setModifiedByUser(expectedUser);
|
||||||
|
|
||||||
Map<String,Object> props = new HashMap<>();
|
Map<String,Object> props = new HashMap<>();
|
||||||
props.put("cm:title",title);
|
props.put("cm:title",title);
|
||||||
|
props.put("cm:versionLabel","1.0");
|
||||||
|
|
||||||
d1.setProperties(props);
|
d1.setProperties(props);
|
||||||
d1.setAspectNames(Arrays.asList("cm:auditable","cm:titled"));
|
d1.setAspectNames(Arrays.asList("cm:auditable","cm:titled","cm:versionable","cm:author"));
|
||||||
|
|
||||||
// Note: Path is not part of the default info
|
// Note: Path is not part of the default info
|
||||||
d1.expected(documentResp);
|
d1.expected(documentResp);
|
||||||
@@ -645,17 +645,17 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
// get node info + path
|
// get node info + path
|
||||||
//...nodes/nodeId?select=path
|
//...nodes/nodeId?select=path
|
||||||
Map<String, String> params = Collections.singletonMap("select", "path");
|
Map<String, String> params = Collections.singletonMap("select", "path");
|
||||||
response = getSingle(NodesEntityResource.class, user1, contentNodeRef.getId(), params, 200);
|
response = getSingle(NodesEntityResource.class, user1, content1Id, params, 200);
|
||||||
documentResp = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
documentResp = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
||||||
|
|
||||||
// Expected path ...
|
// Expected path ...
|
||||||
// note: the pathInfo should only include the parents (not the requested node)
|
// note: the pathInfo should only include the parents (not the requested node)
|
||||||
List<ElementInfo> elements = new ArrayList<>(5);
|
List<ElementInfo> elements = new ArrayList<>(5);
|
||||||
elements.add(new ElementInfo(companyHomeNodeRef, "Company Home"));
|
elements.add(new ElementInfo(companyHomeNodeRef, "Company Home"));
|
||||||
elements.add(new ElementInfo(userHomesNodeRef, "User Homes"));
|
elements.add(new ElementInfo(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, userHomesId), "User Homes"));
|
||||||
elements.add(new ElementInfo(myHomeNodeRef, user1));
|
elements.add(new ElementInfo(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, myFilesNodeId), user1));
|
||||||
elements.add(new ElementInfo(folderA_Ref, folderA));
|
elements.add(new ElementInfo(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folderA_Id), folderA));
|
||||||
elements.add(new ElementInfo(folderB_Ref, folderB));
|
elements.add(new ElementInfo(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folderB_Id), folderB));
|
||||||
PathInfo expectedPath = new PathInfo("/Company Home/User Homes/"+user1+"/"+folderA+"/"+folderB, true, elements);
|
PathInfo expectedPath = new PathInfo("/Company Home/User Homes/"+user1+"/"+folderA+"/"+folderB, true, elements);
|
||||||
d1.setPath(expectedPath);
|
d1.setPath(expectedPath);
|
||||||
|
|
||||||
@@ -1023,40 +1023,33 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
{
|
{
|
||||||
long runId = System.currentTimeMillis();
|
long runId = System.currentTimeMillis();
|
||||||
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(user1);
|
|
||||||
|
|
||||||
String myNodeId = getMyNodeId(user1);
|
String myNodeId = getMyNodeId(user1);
|
||||||
NodeRef myFilesNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, myNodeId);
|
|
||||||
|
|
||||||
NodeRef content1Ref = repoService.createDocument(myFilesNodeRef,
|
String content1Id = createTextFile(user1, myNodeId, "content" + runId + "_1", "The quick brown fox jumps over the lazy dog.").getId();
|
||||||
"content" + runId + "_1", "The quick brown fox jumps over the lazy dog.");
|
|
||||||
String content1Id = content1Ref.getId();
|
|
||||||
|
|
||||||
// delete file
|
// delete file
|
||||||
delete("nodes", user1, content1Ref.getId(), 204);
|
delete("nodes", user1, content1Id, 204);
|
||||||
|
|
||||||
assertTrue(existsArchiveNode(content1Id));
|
assertTrue(existsArchiveNode(user1, content1Id));
|
||||||
|
|
||||||
// -ve test
|
// -ve test
|
||||||
delete("nodes", user1, content1Ref.getId(), 404);
|
delete("nodes", user1, content1Id, 404);
|
||||||
|
|
||||||
String folder1Id = createFolder(user1, myNodeId, "folder " + runId + "_1").getId();
|
String folder1Id = createFolder(user1, myNodeId, "folder " + runId + "_1").getId();
|
||||||
String folder2Id = createFolder(user1, folder1Id, "folder " + runId + "_2").getId();
|
String folder2Id = createFolder(user1, folder1Id, "folder " + runId + "_2").getId();
|
||||||
|
|
||||||
NodeRef content2Ref = repoService.createDocument(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folder2Id),
|
String content2Id = createTextFile(user1, folder2Id, "content" + runId + "_2", "The quick brown fox jumps over the lazy dog.").getId();
|
||||||
"content " + runId + "_2", "The quick brown fox jumps over the lazy dog.");
|
|
||||||
String content2Id = content2Ref.getId();
|
|
||||||
|
|
||||||
// cascade delete folder
|
// cascade delete folder
|
||||||
delete("nodes", user1, folder1Id, 204);
|
delete("nodes", user1, folder1Id, 204);
|
||||||
|
|
||||||
assertTrue(existsArchiveNode(folder1Id));
|
assertTrue(existsArchiveNode(user1, folder1Id));
|
||||||
assertTrue(existsArchiveNode(folder2Id));
|
assertTrue(existsArchiveNode(user1, folder2Id));
|
||||||
assertTrue(existsArchiveNode(content2Id));
|
assertTrue(existsArchiveNode(user1, content2Id));
|
||||||
|
|
||||||
// -ve test
|
// -ve test
|
||||||
delete("nodes", user1, folder2Id, 404);
|
delete("nodes", user1, folder2Id, 404);
|
||||||
delete("nodes", user1, content2Ref.getId(), 404);
|
delete("nodes", user1, content2Id, 404);
|
||||||
|
|
||||||
// -ve test
|
// -ve test
|
||||||
String rootNodeId = getRootNodeId(user1);
|
String rootNodeId = getRootNodeId(user1);
|
||||||
@@ -1072,18 +1065,16 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
Map<String, String> params = Collections.singletonMap("permanent", "true");
|
Map<String, String> params = Collections.singletonMap("permanent", "true");
|
||||||
delete("nodes", user1, folder3Id, params, 204);
|
delete("nodes", user1, folder3Id, params, 204);
|
||||||
|
|
||||||
assertFalse(existsArchiveNode(folder3Id));
|
assertFalse(existsArchiveNode(user1, folder3Id));
|
||||||
assertFalse(existsArchiveNode(folder4Id));
|
assertFalse(existsArchiveNode(user1, folder4Id));
|
||||||
|
|
||||||
String sharedNodeId = getSharedNodeId(user1);
|
String sharedNodeId = getSharedNodeId(user1);
|
||||||
String folder5Id = createFolder(user1, sharedNodeId, "folder " + runId + "_5").getId();
|
String folder5Id = createFolder(user1, sharedNodeId, "folder " + runId + "_5").getId();
|
||||||
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(user2);
|
|
||||||
|
|
||||||
// -ve test - another user cannot delete
|
// -ve test - another user cannot delete
|
||||||
delete("nodes", user2, folder5Id, 403);
|
delete("nodes", user2, folder5Id, 403);
|
||||||
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(user1);
|
|
||||||
|
|
||||||
Map<String, Object> props = new HashMap<>();
|
Map<String, Object> props = new HashMap<>();
|
||||||
props.put(PROP_OWNER, user2);
|
props.put(PROP_OWNER, user2);
|
||||||
@@ -1097,6 +1088,7 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
// -ve test - user1 can no longer delete
|
// -ve test - user1 can no longer delete
|
||||||
delete("nodes", user1, folder5Id, 403);
|
delete("nodes", user1, folder5Id, 403);
|
||||||
|
|
||||||
|
// TODO refactor with remote permission api calls (use v0 until we have v1 ?)
|
||||||
permissionService.setPermission(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folder5Id), user1, PermissionService.DELETE, true);
|
permissionService.setPermission(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folder5Id), user1, PermissionService.DELETE, true);
|
||||||
|
|
||||||
// -ve test - non-owner cannot bypass trashcan
|
// -ve test - non-owner cannot bypass trashcan
|
||||||
@@ -1116,12 +1108,20 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
checkStatus(204, response.getStatusCode());
|
checkStatus(204, response.getStatusCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean existsArchiveNode(String nodeId)
|
private boolean existsArchiveNode(String userId, String nodeId)
|
||||||
{
|
{
|
||||||
// TODO replace with calls to future V1 REST API for Trashcan
|
// TODO replace with calls to future V1 REST API for Trashcan
|
||||||
NodeRef originalNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
|
try
|
||||||
NodeRef archiveNodeRef = nodeArchiveService.getArchivedNode(originalNodeRef);
|
{
|
||||||
return nodeService.exists(archiveNodeRef);
|
AuthenticationUtil.setFullyAuthenticatedUser(userId);
|
||||||
|
NodeRef originalNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
|
||||||
|
NodeRef archiveNodeRef = nodeArchiveService.getArchivedNode(originalNodeRef);
|
||||||
|
return nodeService.exists(archiveNodeRef);
|
||||||
|
}
|
||||||
|
finally
|
||||||
|
{
|
||||||
|
AuthenticationUtil.clearCurrentSecurityContext();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -1132,8 +1132,6 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
@Test
|
@Test
|
||||||
public void testMove() throws Exception
|
public void testMove() throws Exception
|
||||||
{
|
{
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(user1);
|
|
||||||
|
|
||||||
// create folder f1
|
// create folder f1
|
||||||
Folder folderResp = createFolder(user1, Nodes.PATH_MY, "f1");
|
Folder folderResp = createFolder(user1, Nodes.PATH_MY, "f1");
|
||||||
String f1Id = folderResp.getId();
|
String f1Id = folderResp.getId();
|
||||||
@@ -1143,16 +1141,12 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
String f2Id = folderResp.getId();
|
String f2Id = folderResp.getId();
|
||||||
|
|
||||||
// create doc d1
|
// create doc d1
|
||||||
NodeRef f1Ref = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, f1Id);
|
|
||||||
String d1Name = "content" + System.currentTimeMillis() + "_1";
|
String d1Name = "content" + System.currentTimeMillis() + "_1";
|
||||||
NodeRef d1Ref = repoService.createDocument(f1Ref, d1Name, "The quick brown fox jumps over the lazy dog.");
|
String d1Id = createTextFile(user1, f1Id, d1Name, "The quick brown fox jumps over the lazy dog 1.").getId();
|
||||||
String d1Id = d1Ref.getId();
|
|
||||||
|
|
||||||
// create doc d2
|
// create doc d2
|
||||||
NodeRef f2Ref = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, f2Id);
|
|
||||||
String d2Name = "content" + System.currentTimeMillis() + "_2";
|
String d2Name = "content" + System.currentTimeMillis() + "_2";
|
||||||
NodeRef d2Ref = repoService.createDocument(f2Ref, d2Name, "The quick brown fox jumps over the lazy dog 2.");
|
String d2Id = createTextFile(user1, f2Id, d2Name, "The quick brown fox jumps over the lazy dog 2.").getId();
|
||||||
String d2Id = d2Ref.getId();
|
|
||||||
|
|
||||||
// move file (without rename)
|
// move file (without rename)
|
||||||
|
|
||||||
@@ -1241,49 +1235,43 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
@Test
|
@Test
|
||||||
public void testCopy() throws Exception
|
public void testCopy() throws Exception
|
||||||
{
|
{
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(user1);
|
|
||||||
|
|
||||||
// create folder
|
// create folder
|
||||||
Folder folderResp = createFolder(user1, Nodes.PATH_MY, "fsource");
|
Folder folderResp = createFolder(user1, Nodes.PATH_MY, "fsource");
|
||||||
String source = folderResp.getId();
|
String sourceId = folderResp.getId();
|
||||||
NodeRef sourceRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, source);
|
|
||||||
|
|
||||||
// create folder
|
// create folder
|
||||||
folderResp = createFolder(user1, Nodes.PATH_MY, "ftarget");
|
folderResp = createFolder(user1, Nodes.PATH_MY, "ftarget");
|
||||||
String target = folderResp.getId();
|
String targetId = folderResp.getId();
|
||||||
NodeRef targetRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, target);
|
|
||||||
|
|
||||||
// create doc d1
|
// create doc d1
|
||||||
String d1Name = "content" + System.currentTimeMillis() + "_1";
|
String d1Name = "content" + System.currentTimeMillis() + "_1";
|
||||||
NodeRef d1Ref = repoService.createDocument(sourceRef, d1Name, "The quick brown fox jumps over the lazy dog.");
|
String d1Id = createTextFile(user1, sourceId, d1Name, "The quick brown fox jumps over the lazy dog 1.").getId();
|
||||||
String d1Id = d1Ref.getId();
|
|
||||||
|
|
||||||
// create doc d2
|
// create doc d2
|
||||||
String d2Name = "content" + System.currentTimeMillis() + "_2";
|
String d2Name = "content" + System.currentTimeMillis() + "_2";
|
||||||
NodeRef d2Ref = repoService.createDocument(sourceRef, d2Name, "The quick brown fox jumps over the lazy dog 2.");
|
String d2Id = createTextFile(user1, sourceId, d2Name, "The quick brown fox jumps over the lazy dog 2.").getId();
|
||||||
String d2Id = d2Ref.getId();
|
|
||||||
|
|
||||||
Map<String, String> body = new HashMap<>();
|
Map<String, String> body = new HashMap<>();
|
||||||
body.put("targetParentId", target);
|
body.put("targetParentId", targetId);
|
||||||
|
|
||||||
HttpResponse response = post(user1, "nodes", d1Id, "copy", toJsonAsStringNonNull(body).getBytes(), null, null, 201);
|
HttpResponse response = post(user1, "nodes", d1Id, "copy", toJsonAsStringNonNull(body).getBytes(), null, null, 201);
|
||||||
Document documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
|
Document documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
|
||||||
|
|
||||||
assertEquals(d1Name, documentResp.getName());
|
assertEquals(d1Name, documentResp.getName());
|
||||||
assertEquals(target, documentResp.getParentId());
|
assertEquals(targetId, documentResp.getParentId());
|
||||||
|
|
||||||
// copy file (with rename)
|
// copy file (with rename)
|
||||||
String newD2Name = d2Name + " updated !!";
|
String newD2Name = d2Name + " updated !!";
|
||||||
|
|
||||||
body = new HashMap<>();
|
body = new HashMap<>();
|
||||||
body.put("targetParentId", target);
|
body.put("targetParentId", targetId);
|
||||||
body.put("name", newD2Name);
|
body.put("name", newD2Name);
|
||||||
|
|
||||||
response = post(user1, "nodes", d2Id, "copy", toJsonAsStringNonNull(body).getBytes(), null, null, 201);
|
response = post(user1, "nodes", d2Id, "copy", toJsonAsStringNonNull(body).getBytes(), null, null, 201);
|
||||||
documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
|
documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
|
||||||
|
|
||||||
assertEquals(newD2Name, documentResp.getName());
|
assertEquals(newD2Name, documentResp.getName());
|
||||||
assertEquals(target, documentResp.getParentId());
|
assertEquals(targetId, documentResp.getParentId());
|
||||||
|
|
||||||
// -ve tests
|
// -ve tests
|
||||||
|
|
||||||
@@ -1295,12 +1283,12 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
// name already exists
|
// name already exists
|
||||||
tgt = new NodeTarget();
|
tgt = new NodeTarget();
|
||||||
tgt.setName(newD2Name);
|
tgt.setName(newD2Name);
|
||||||
tgt.setTargetParentId(target);
|
tgt.setTargetParentId(targetId);
|
||||||
post("nodes/"+d1Id+"/copy", user1, toJsonAsStringNonNull(tgt), null, 409);
|
post("nodes/"+d1Id+"/copy", user1, toJsonAsStringNonNull(tgt), null, 409);
|
||||||
|
|
||||||
// unknown source nodeId
|
// unknown source nodeId
|
||||||
tgt = new NodeTarget();
|
tgt = new NodeTarget();
|
||||||
tgt.setTargetParentId(target);
|
tgt.setTargetParentId(targetId);
|
||||||
post("nodes/"+UUID.randomUUID().toString()+"/copy", user1, toJsonAsStringNonNull(tgt), null, 404);
|
post("nodes/"+UUID.randomUUID().toString()+"/copy", user1, toJsonAsStringNonNull(tgt), null, 404);
|
||||||
|
|
||||||
// unknown target nodeId
|
// unknown target nodeId
|
||||||
@@ -1942,8 +1930,6 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
@Test
|
@Test
|
||||||
public void testUpdateOwner() throws Exception
|
public void testUpdateOwner() throws Exception
|
||||||
{
|
{
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(user1);
|
|
||||||
|
|
||||||
// create folder f1
|
// create folder f1
|
||||||
String folderName = "f1 "+System.currentTimeMillis();
|
String folderName = "f1 "+System.currentTimeMillis();
|
||||||
Folder folderResp = createFolder(user1, Nodes.PATH_SHARED, folderName);
|
Folder folderResp = createFolder(user1, Nodes.PATH_SHARED, folderName);
|
||||||
@@ -1963,16 +1949,16 @@ public class NodeApiTest extends AbstractBaseApiTest
|
|||||||
assertEquals(user1, ((Map)folderResp.getProperties().get(PROP_OWNER)).get("id"));
|
assertEquals(user1, ((Map)folderResp.getProperties().get(PROP_OWNER)).get("id"));
|
||||||
|
|
||||||
// create doc d1
|
// create doc d1
|
||||||
NodeRef f1Ref = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, f1Id);
|
|
||||||
String d1Name = "content1 " + System.currentTimeMillis();
|
String d1Name = "content1 " + System.currentTimeMillis();
|
||||||
NodeRef d1Ref = repoService.createDocument(f1Ref, d1Name, "The quick brown fox jumps over the lazy dog.");
|
String d1Id = createTextFile(user1, f1Id, d1Name, "The quick brown fox jumps over the lazy dog.").getId();
|
||||||
String d1Id = d1Ref.getId();
|
|
||||||
|
|
||||||
// get node info
|
// get node info
|
||||||
response = getSingle(NodesEntityResource.class, user1, d1Id, null, 200);
|
response = getSingle(NodesEntityResource.class, user1, d1Id, null, 200);
|
||||||
Document documentResp = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
Document documentResp = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
|
||||||
|
|
||||||
assertNull(user1, documentResp.getProperties()); // owner is implied
|
// note: owner is implied
|
||||||
|
assertEquals(1, documentResp.getProperties().size());
|
||||||
|
assertEquals("1.0", documentResp.getProperties().get("cm:versionLabel"));
|
||||||
|
|
||||||
props = new HashMap<>();
|
props = new HashMap<>();
|
||||||
props.put(PROP_OWNER, user1);
|
props.put(PROP_OWNER, user1);
|
||||||
|
@@ -18,72 +18,30 @@
|
|||||||
*/
|
*/
|
||||||
package org.alfresco.rest.api.tests;
|
package org.alfresco.rest.api.tests;
|
||||||
|
|
||||||
import org.alfresco.model.ContentModel;
|
|
||||||
import org.alfresco.model.ForumModel;
|
|
||||||
import org.alfresco.repo.content.ContentLimitProvider.SimpleFixedLimitProvider;
|
|
||||||
import org.alfresco.repo.content.MimetypeMap;
|
import org.alfresco.repo.content.MimetypeMap;
|
||||||
import org.alfresco.repo.node.archive.NodeArchiveService;
|
|
||||||
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
import org.alfresco.repo.security.authentication.AuthenticationUtil;
|
||||||
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback;
|
||||||
import org.alfresco.rest.api.Nodes;
|
|
||||||
import org.alfresco.rest.api.QuickShareLinks;
|
|
||||||
import org.alfresco.rest.api.impl.QuickShareLinksImpl;
|
import org.alfresco.rest.api.impl.QuickShareLinksImpl;
|
||||||
import org.alfresco.rest.api.model.NodeTarget;
|
|
||||||
import org.alfresco.rest.api.model.QuickShareLink;
|
import org.alfresco.rest.api.model.QuickShareLink;
|
||||||
import org.alfresco.rest.api.nodes.NodesEntityResource;
|
import org.alfresco.rest.api.nodes.NodesEntityResource;
|
||||||
import org.alfresco.rest.api.quicksharelinks.QuickShareLinkEntityResource;
|
import org.alfresco.rest.api.quicksharelinks.QuickShareLinkEntityResource;
|
||||||
import org.alfresco.rest.api.tests.RepoService.TestNetwork;
|
|
||||||
import org.alfresco.rest.api.tests.RepoService.TestPerson;
|
|
||||||
import org.alfresco.rest.api.tests.RepoService.TestSite;
|
|
||||||
import org.alfresco.rest.api.tests.client.HttpResponse;
|
import org.alfresco.rest.api.tests.client.HttpResponse;
|
||||||
import org.alfresco.rest.api.tests.client.PublicApiClient.ExpectedPaging;
|
|
||||||
import org.alfresco.rest.api.tests.client.PublicApiClient.Paging;
|
import org.alfresco.rest.api.tests.client.PublicApiClient.Paging;
|
||||||
import org.alfresco.rest.api.tests.client.PublicApiHttpClient.BinaryPayload;
|
|
||||||
import org.alfresco.rest.api.tests.client.RequestContext;
|
|
||||||
import org.alfresco.rest.api.tests.client.data.ContentInfo;
|
|
||||||
import org.alfresco.rest.api.tests.client.data.Document;
|
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.Node;
|
||||||
import org.alfresco.rest.api.tests.client.data.PathInfo;
|
|
||||||
import org.alfresco.rest.api.tests.client.data.PathInfo.ElementInfo;
|
|
||||||
import org.alfresco.rest.api.tests.client.data.SiteRole;
|
|
||||||
import org.alfresco.rest.api.tests.client.data.UserInfo;
|
|
||||||
import org.alfresco.rest.api.tests.util.JacksonUtil;
|
|
||||||
import org.alfresco.rest.api.tests.util.MultiPartBuilder;
|
|
||||||
import org.alfresco.rest.api.tests.util.MultiPartBuilder.FileData;
|
|
||||||
import org.alfresco.rest.api.tests.util.MultiPartBuilder.MultiPartRequest;
|
|
||||||
import org.alfresco.rest.api.tests.util.RestApiUtil;
|
import org.alfresco.rest.api.tests.util.RestApiUtil;
|
||||||
import org.alfresco.rest.framework.jacksonextensions.JacksonHelper;
|
|
||||||
import org.alfresco.service.cmr.repository.NodeRef;
|
|
||||||
import org.alfresco.service.cmr.repository.NodeService;
|
|
||||||
import org.alfresco.service.cmr.repository.StoreRef;
|
|
||||||
import org.alfresco.service.cmr.security.MutableAuthenticationService;
|
import org.alfresco.service.cmr.security.MutableAuthenticationService;
|
||||||
import org.alfresco.service.cmr.security.PermissionService;
|
|
||||||
import org.alfresco.service.cmr.security.PersonService;
|
import org.alfresco.service.cmr.security.PersonService;
|
||||||
import org.alfresco.service.cmr.site.SiteVisibility;
|
|
||||||
import org.alfresco.util.TempFileProvider;
|
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
|
||||||
import java.io.File;
|
|
||||||
import java.io.Serializable;
|
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
|
||||||
import java.util.Set;
|
|
||||||
import java.util.UUID;
|
|
||||||
|
|
||||||
import static org.alfresco.rest.api.tests.util.RestApiUtil.parsePaging;
|
|
||||||
import static org.alfresco.rest.api.tests.util.RestApiUtil.toJsonAsStringNonNull;
|
import static org.alfresco.rest.api.tests.util.RestApiUtil.toJsonAsStringNonNull;
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
|
|
||||||
@@ -109,13 +67,13 @@ public class SharedLinkApiTest extends AbstractBaseApiTest
|
|||||||
|
|
||||||
private final String RUNID = System.currentTimeMillis()+"";
|
private final String RUNID = System.currentTimeMillis()+"";
|
||||||
|
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setup() throws Exception
|
public void setup() throws Exception
|
||||||
{
|
{
|
||||||
authenticationService = applicationContext.getBean("authenticationService", MutableAuthenticationService.class);
|
authenticationService = applicationContext.getBean("authenticationService", MutableAuthenticationService.class);
|
||||||
personService = applicationContext.getBean("personService", PersonService.class);
|
personService = applicationContext.getBean("personService", PersonService.class);
|
||||||
|
|
||||||
|
// note: createUser currently relies on repoService
|
||||||
user1 = createUser("user1-" + RUNID);
|
user1 = createUser("user1-" + RUNID);
|
||||||
user2 = createUser("user2-" + RUNID);
|
user2 = createUser("user2-" + RUNID);
|
||||||
|
|
||||||
@@ -167,29 +125,19 @@ public class SharedLinkApiTest extends AbstractBaseApiTest
|
|||||||
{
|
{
|
||||||
// As user 1 ...
|
// As user 1 ...
|
||||||
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(user1);
|
|
||||||
|
|
||||||
// create doc d1
|
// create doc d1
|
||||||
|
|
||||||
String sharedFolderNodeId = getSharedNodeId(user1);
|
String sharedFolderNodeId = getSharedNodeId(user1);
|
||||||
|
String content1Text = "The quick brown fox jumps over the lazy dog 1.";
|
||||||
String contentText = "The quick brown fox jumps over the lazy dog.";
|
|
||||||
|
|
||||||
String docName1 = "content" + RUNID + "_1.txt";
|
String docName1 = "content" + RUNID + "_1.txt";
|
||||||
NodeRef d1Ref = repoService.createDocument(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, sharedFolderNodeId),
|
Document doc1 = createTextFile(user1, sharedFolderNodeId, docName1, content1Text);
|
||||||
docName1, contentText);
|
String d1Id = doc1.getId();
|
||||||
String d1Id = d1Ref.getId();
|
|
||||||
|
|
||||||
// create doc d2
|
// create doc d2
|
||||||
|
|
||||||
String myFolderNodeId = getMyNodeId(user1);
|
String myFolderNodeId = getMyNodeId(user1);
|
||||||
|
String content2Text = "The quick brown fox jumps over the lazy dog 1.";
|
||||||
String docName2 = "content" + RUNID + "_2.txt";
|
String docName2 = "content" + RUNID + "_2.txt";
|
||||||
NodeRef d2Ref = repoService.createDocument(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, myFolderNodeId),
|
Document doc2 = createTextFile(user1, myFolderNodeId, docName2, content2Text);
|
||||||
docName2, contentText);
|
String d2Id = doc2.getId();
|
||||||
String d2Id = d2Ref.getId();
|
|
||||||
|
|
||||||
AuthenticationUtil.clearCurrentSecurityContext();
|
|
||||||
|
|
||||||
// As user 2 ...
|
// As user 2 ...
|
||||||
|
|
||||||
@@ -212,11 +160,11 @@ public class SharedLinkApiTest extends AbstractBaseApiTest
|
|||||||
assertEquals(d1Id, resp.getNodeId());
|
assertEquals(d1Id, resp.getNodeId());
|
||||||
assertEquals(docName1, resp.getName());
|
assertEquals(docName1, resp.getName());
|
||||||
|
|
||||||
// hmm
|
String expectedMimeType = MimetypeMap.MIMETYPE_TEXT_PLAIN;
|
||||||
assertEquals(MimetypeMap.MIMETYPE_BINARY, resp.getContent().getMimeType());
|
assertEquals(expectedMimeType, resp.getContent().getMimeType());
|
||||||
assertEquals("Binary File (Octet Stream)", resp.getContent().getMimeTypeName());
|
assertEquals("Plain Text", resp.getContent().getMimeTypeName());
|
||||||
|
|
||||||
assertEquals(new Long(contentText.length()), resp.getContent().getSizeInBytes());
|
assertEquals(new Long(content1Text.length()), resp.getContent().getSizeInBytes());
|
||||||
assertEquals("UTF-8", resp.getContent().getEncoding());
|
assertEquals("UTF-8", resp.getContent().getEncoding());
|
||||||
|
|
||||||
assertEquals(docModifiedAt.getTime(), resp.getModifiedAt().getTime()); // not changed
|
assertEquals(docModifiedAt.getTime(), resp.getModifiedAt().getTime()); // not changed
|
||||||
@@ -259,7 +207,8 @@ public class SharedLinkApiTest extends AbstractBaseApiTest
|
|||||||
// unauth access to get shared link file content
|
// unauth access to get shared link file content
|
||||||
response = getSingle(QuickShareLinkEntityResource.class, null, sharedId + "/content", null, 200);
|
response = getSingle(QuickShareLinkEntityResource.class, null, sharedId + "/content", null, 200);
|
||||||
|
|
||||||
assertEquals(contentText, response.getResponse());
|
assertEquals(content1Text, response.getResponse());
|
||||||
|
assertEquals(expectedMimeType+";charset=UTF-8", response.getHeaders().get("Content-Type"));
|
||||||
assertEquals("attachment; filename=\"" + docName1 + "\"; filename*=UTF-8''" + docName1 + "", response.getHeaders().get("Content-Disposition"));
|
assertEquals("attachment; filename=\"" + docName1 + "\"; filename*=UTF-8''" + docName1 + "", response.getHeaders().get("Content-Disposition"));
|
||||||
|
|
||||||
|
|
||||||
@@ -366,29 +315,19 @@ public class SharedLinkApiTest extends AbstractBaseApiTest
|
|||||||
|
|
||||||
// As user 1 ...
|
// As user 1 ...
|
||||||
|
|
||||||
AuthenticationUtil.setFullyAuthenticatedUser(user1);
|
|
||||||
|
|
||||||
// create doc d1
|
// create doc d1
|
||||||
|
|
||||||
String sharedFolderNodeId = getSharedNodeId(user1);
|
String sharedFolderNodeId = getSharedNodeId(user1);
|
||||||
|
String content1Text = "The quick brown fox jumps over the lazy dog 1.";
|
||||||
String contentText = "The quick brown fox jumps over the lazy dog.";
|
|
||||||
|
|
||||||
String docName1 = "content" + RUNID + "_1.txt";
|
String docName1 = "content" + RUNID + "_1.txt";
|
||||||
NodeRef d1Ref = repoService.createDocument(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, sharedFolderNodeId),
|
Document doc1 = createTextFile(sharedFolderNodeId, user1, docName1, content1Text);
|
||||||
docName1, contentText);
|
String d1Id = doc1.getId();
|
||||||
String d1Id = d1Ref.getId();
|
|
||||||
|
|
||||||
// create doc d2
|
// create doc d2
|
||||||
|
|
||||||
String myFolderNodeId = getMyNodeId(user1);
|
String myFolderNodeId = getMyNodeId(user1);
|
||||||
|
String content2Text = "The quick brown fox jumps over the lazy dog 1.";
|
||||||
String docName2 = "content" + RUNID + "_2.txt";
|
String docName2 = "content" + RUNID + "_2.txt";
|
||||||
NodeRef d2Ref = repoService.createDocument(new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, myFolderNodeId),
|
Document doc2 = createTextFile(myFolderNodeId, user1, docName2, content2Text);
|
||||||
docName2, contentText);
|
String d2Id = doc2.getId();
|
||||||
String d2Id = d2Ref.getId();
|
|
||||||
|
|
||||||
AuthenticationUtil.clearCurrentSecurityContext();
|
|
||||||
|
|
||||||
// As user 2 ...
|
// As user 2 ...
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user