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:
Jamal Kaabi-Mofrad
2016-05-10 11:16:24 +00:00
parent bb9995a536
commit e9e5027d83
3 changed files with 139 additions and 184 deletions

View File

@@ -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);

View File

@@ -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,13 +1108,21 @@ 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
try
{
AuthenticationUtil.setFullyAuthenticatedUser(userId);
NodeRef originalNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId); NodeRef originalNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, nodeId);
NodeRef archiveNodeRef = nodeArchiveService.getArchivedNode(originalNodeRef); NodeRef archiveNodeRef = nodeArchiveService.getArchivedNode(originalNodeRef);
return nodeService.exists(archiveNodeRef); return nodeService.exists(archiveNodeRef);
} }
finally
{
AuthenticationUtil.clearCurrentSecurityContext();
}
}
/** /**
* Tests move (file or folder) * Tests move (file or folder)
@@ -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);

View File

@@ -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 ...