use of org.alfresco.rest.api.tests.client.data.Folder in project alfresco-remote-api by Alfresco.
the class NodeApiTest method testLockFileCreatedByDeletedUser.
@Test
public void testLockFileCreatedByDeletedUser() throws Exception {
// Create temp user
String user = createUser("userRND-" + RUNID, "userRNDPassword", networkOne);
setRequestContext(user);
// Create folder
Folder folderResp = createFolder(Nodes.PATH_MY, "folderRND" + RUNID);
String folderId = folderResp.getId();
// Create doc d1
String d1Name = "content" + RUNID + "_1l";
Document d1 = createTextFile(folderId, d1Name, "The quick brown fox jumps over the lazy dog 1.");
String d1Id = d1.getId();
setRequestContext(networkAdmin);
transactionHelper.doInTransaction(() -> {
deleteUser(user, networkOne);
return null;
});
// Lock d1 document
LockInfo lockInfo = new LockInfo();
lockInfo.setTimeToExpire(30);
lockInfo.setType("FULL");
lockInfo.setLifetime("PERSISTENT");
HttpResponse response = post(getNodeOperationUrl(d1Id, "lock"), toJsonAsStringNonNull(lockInfo), null, 200);
Document documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
// Check that the lock was successful - from default response
assertEquals(d1Name, documentResp.getName());
assertEquals(d1Id, documentResp.getId());
assertEquals(LockType.READ_ONLY_LOCK.toString(), documentResp.getProperties().get("cm:lockType"));
assertNotNull(documentResp.getProperties().get("cm:lockOwner"));
assertNull(documentResp.getIsLocked());
// Get node info (ensure rollback didn't happen)
Map<String, String> params = Collections.singletonMap("include", "isLocked");
response = getSingle(NodesEntityResource.class, d1Id, params, 200);
documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
// Check that the lock was successful - from get info call response
assertEquals(d1Name, documentResp.getName());
assertEquals(d1Id, documentResp.getId());
assertEquals(LockType.READ_ONLY_LOCK.toString(), documentResp.getProperties().get("cm:lockType"));
assertNotNull(documentResp.getProperties().get("cm:lockOwner"));
assertTrue(documentResp.getIsLocked());
// Clean up
unlock(d1Id);
// Get node info (ensure rollback didn't happen)
response = getSingle(NodesEntityResource.class, d1Id, params, 200);
documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
// Check that the unlock was successful
assertEquals(d1Name, documentResp.getName());
assertEquals(d1Id, documentResp.getId());
assertEquals(null, documentResp.getProperties().get("cm:lockType"));
assertNull(documentResp.getProperties().get("cm:lockOwner"));
assertFalse(documentResp.getIsLocked());
deleteNode(folderId);
}
use of org.alfresco.rest.api.tests.client.data.Folder in project alfresco-remote-api by Alfresco.
the class NodeApiTest method testUpdateFileWithBinaryUpload.
/**
* Tests update file content
* <p>PUT:</p>
* {@literal <host>:<port>/alfresco/api/-default-/public/alfresco/versions/1/nodes/<nodeId>/content}
*/
@Test
public void testUpdateFileWithBinaryUpload() throws Exception {
setRequestContext(user1);
String myNodeId = getMyNodeId();
String folderName = "f1-testUpdateFileWithBinaryUpload-" + RUNID;
Folder folderResp = createFolder(myNodeId, folderName);
String f1_nodeId = folderResp.getId();
String anoNodeName = "another";
createFolder(f1_nodeId, anoNodeName);
Document doc = new Document();
final String docName = "testdoc.txt";
doc.setName(docName);
doc.setNodeType(TYPE_CM_CONTENT);
doc.setProperties(Collections.singletonMap("cm:title", (Object) "test title"));
ContentInfo contentInfo = new ContentInfo();
doc.setContent(contentInfo);
// create an empty file within F1 folder
HttpResponse response = post(getNodeChildrenUrl(f1_nodeId), toJsonAsStringNonNull(doc), 201);
Document docResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
assertEquals(docName, docResp.getName());
assertNotNull(docResp.getContent());
assertEquals(0, docResp.getContent().getSizeInBytes().intValue());
assertEquals(MimetypeMap.MIMETYPE_TEXT_PLAIN, docResp.getContent().getMimeType());
// Default encoding
assertEquals("UTF-8", docResp.getContent().getEncoding());
// Update the empty node's content
String content = "The quick brown fox jumps over the lazy dog.";
ByteArrayInputStream inputStream = new ByteArrayInputStream(content.getBytes());
File txtFile = TempFileProvider.createTempFile(inputStream, getClass().getSimpleName(), ".txt");
BinaryPayload payload = new BinaryPayload(txtFile);
// Try to update a folder!
putBinary(getNodeContentUrl(f1_nodeId), payload, null, null, 400);
// Try to update a non-existent file
putBinary(getNodeContentUrl(UUID.randomUUID().toString()), payload, null, null, 404);
final String url = getNodeContentUrl(docResp.getId());
// Update the empty file
response = putBinary(url, payload, null, null, 200);
docResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
assertEquals(docName, docResp.getName());
assertNotNull(docResp.getId());
assertNotNull(docResp.getCreatedAt());
assertNotNull(docResp.getCreatedByUser());
assertNotNull(docResp.getModifiedAt());
assertNotNull(docResp.getModifiedByUser());
assertFalse(docResp.getIsFolder());
assertTrue(docResp.getIsFile());
assertNull(docResp.getIsLink());
assertEquals(TYPE_CM_CONTENT, docResp.getNodeType());
assertNotNull(docResp.getParentId());
assertEquals(f1_nodeId, docResp.getParentId());
assertNotNull(docResp.getProperties());
assertNotNull(docResp.getAspectNames());
contentInfo = docResp.getContent();
assertNotNull(contentInfo);
assertNotNull(contentInfo.getEncoding());
assertTrue(contentInfo.getSizeInBytes() > 0);
assertEquals(MimetypeMap.MIMETYPE_TEXT_PLAIN, contentInfo.getMimeType());
assertNotNull(contentInfo.getMimeTypeName());
assertEquals("ISO-8859-1", contentInfo.getEncoding());
// path is not part of the default response
assertNull(docResp.getPath());
// Download the file
response = getSingle(url, user1, null, 200);
assertEquals(content, response.getResponse());
// Update the node's content again. Also make the response return the path!
content = "The quick brown fox jumps over the lazy dog updated !";
inputStream = new ByteArrayInputStream(content.getBytes());
txtFile = TempFileProvider.createTempFile(inputStream, getClass().getSimpleName(), ".txt");
payload = new BinaryPayload(txtFile);
response = putBinary(url + "?include=path", payload, null, null, 200);
docResp = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
assertEquals(docName, docResp.getName());
assertNotNull(docResp.getContent());
assertTrue(docResp.getContent().getSizeInBytes().intValue() > 0);
assertEquals(MimetypeMap.MIMETYPE_TEXT_PLAIN, docResp.getContent().getMimeType());
assertEquals("ISO-8859-1", docResp.getContent().getEncoding());
PathInfo pathInfo = docResp.getPath();
assertNotNull(pathInfo);
assertTrue(pathInfo.getIsComplete());
List<ElementInfo> pathElements = pathInfo.getElements();
assertNotNull(pathElements);
assertTrue(pathElements.size() > 0);
// check the last element is F1
assertEquals(folderResp.getName(), pathElements.get(pathElements.size() - 1).getName());
// Download the file
response = getSingle(url, user1, null, 200);
assertEquals(content, response.getResponse());
// Update the node's content again. Also rename the file !
content = "The quick brown fox jumps over the lazy dog updated again !";
inputStream = new ByteArrayInputStream(content.getBytes());
txtFile = TempFileProvider.createTempFile(inputStream, getClass().getSimpleName(), ".txt");
payload = new BinaryPayload(txtFile);
String docName2 = "hello-world.txt";
Map params = new HashMap<>();
params.put(Nodes.PARAM_NAME, docName2);
response = putBinary(url, payload, null, params, 200);
docResp = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class);
assertEquals(docName2, docResp.getName());
// Download the file
response = getSingle(url, user1, null, 200);
assertEquals(content, response.getResponse());
// -ve - optional "name" is invalid
params = new HashMap<>();
params.put(Nodes.PARAM_NAME, "hello/world.txt");
payload = new BinaryPayload(txtFile);
putBinary(url, payload, null, params, 422);
// -ve - optional "name" already exists ...
params = new HashMap<>();
params.put(Nodes.PARAM_NAME, anoNodeName);
payload = new BinaryPayload(txtFile);
putBinary(url, payload, null, params, 409);
// -ve - try to update content using multi-part form data
payload = new BinaryPayload(txtFile, "multipart/form-data", null);
putBinary(url, payload, null, null, 415);
// -ve - try to invalid media type argument (when parsing request)
payload = new BinaryPayload(txtFile, "/jpeg", null);
putBinary(url, payload, null, null, 415);
}
use of org.alfresco.rest.api.tests.client.data.Folder in project alfresco-remote-api by Alfresco.
the class NodeApiTest method createContentWithAllParametersAccepted.
@Test
public void createContentWithAllParametersAccepted() throws Exception {
setRequestContext(user1);
// Let's start with creating a folder in our home folder.
String folderName = "My Folder" + GUID.generate();
// -my- (eg. User's Home for on-prem)
String myNodeId = getMyNodeId();
Folder folder = new Folder();
folder.setName(folderName);
folder.setNodeType(TYPE_CM_FOLDER);
HttpResponse response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(folder), 201);
Folder folderResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Folder.class);
// Check the upload response
assertEquals(folderName, folderResponse.getName());
assertEquals(TYPE_CM_FOLDER, folderResponse.getNodeType());
// Let's now create an empty file within our home folder.
String fileName = "myfile" + GUID.generate() + ".txt";
Document document = new Document();
document.setName(fileName);
document.setNodeType(TYPE_CM_CONTENT);
response = post(getNodeChildrenUrl(myNodeId), toJsonAsStringNonNull(document), 201);
Document documentResponse = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
// Check the upload response
assertEquals(fileName, documentResponse.getName());
assertEquals(TYPE_CM_CONTENT, documentResponse.getNodeType());
// multipart/form-data upload with known parameters
/*
* case "name": case "filedata": case "autorename": case "nodetype":
* case "overwrite": case "majorversion": case "comment": case
* "relativepath": case "renditions":
*/
fileName = "quick-2.pdf";
File file = getResourceFile(fileName);
MultiPartBuilder multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
multiPartBuilder.setAutoRename(true);
multiPartBuilder.setNodeType(TYPE_CM_CONTENT);
multiPartBuilder.setOverwrite(false);
multiPartBuilder.setMajorVersion(true);
multiPartBuilder.setDescription("test");
// multiPartBuilder.setRelativePath("/");
multiPartBuilder.setRenditions(Collections.singletonList("doclib"));
MultiPartRequest reqBody = multiPartBuilder.build();
response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201);
document = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
ContentInfo contentInfo = document.getContent();
assertEquals(MimetypeMap.MIMETYPE_PDF, contentInfo.getMimeType());
assertEquals("UTF-8", contentInfo.getEncoding());
// multipart/form-data upload with unknown parameters
/*
*
* setPropeties custom
*/
document.setNodeType("custom:destination");
multiPartBuilder = MultiPartBuilder.create().setFileData(new FileData(fileName, file));
multiPartBuilder.setAutoRename(true);
multiPartBuilder.setNodeType("custom:destination");
Map<String, String> props = new MultiValueMap();
props.put("cm:title", "test title");
props.put("custom:locations", "loc1");
props.put("custom:locations", "loc2");
props.put("custom:locations", "loc3");
multiPartBuilder.setProperties(props);
reqBody = multiPartBuilder.build();
response = post(getNodeChildrenUrl(myNodeId), reqBody.getBody(), null, reqBody.getContentType(), 201);
document = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
contentInfo = document.getContent();
assertEquals(MimetypeMap.MIMETYPE_PDF, contentInfo.getMimeType());
assertEquals("UTF-8", contentInfo.getEncoding());
}
use of org.alfresco.rest.api.tests.client.data.Folder in project alfresco-remote-api by Alfresco.
the class NodeApiTest method testPrimaryPath.
@Test
public void testPrimaryPath() throws Exception {
setRequestContext(user1);
AuthenticationUtil.setFullyAuthenticatedUser(user1);
String myNodeId = getMyNodeId();
String nameA = "folder_A";
String nameA01 = "folder_A01";
String nameA02 = "folder_A02";
String nameA03 = "folder_A03";
String nameB = "folder_B";
// /Company Home/User Homes/user<timestamp>/folder_A/folder_B
Folder folderA = createFolder(myNodeId, nameA);
Folder folderB = createFolder(folderA.getId(), nameB);
NodeRef folderANodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folderA.getId());
NodeRef folderBNodeRef = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folderB.getId());
folderA.setName(nameA01);
put(URL_NODES, folderA.getId(), toJsonAsStringNonNull(folderA), null, 200);
Path folderAPath = nodeService.getPath(folderANodeRef);
Path.ChildAssocElement pathElement = (Path.ChildAssocElement) folderAPath.last();
String localNameForFolderA = pathElement.getRef().getQName().getLocalName();
assertFalse(nameA.equals(localNameForFolderA));
folderA.setName(nameA02);
Map<String, Object> properties = new HashMap<>();
properties.put("cm:name", nameA03);
folderA.setProperties(properties);
put(URL_NODES, folderA.getId(), toJsonAsStringNonNull(folderA), null, 200);
folderAPath = nodeService.getPath(folderANodeRef);
pathElement = (Path.ChildAssocElement) folderAPath.last();
localNameForFolderA = pathElement.getRef().getQName().getLocalName();
assertFalse(nameA.equals(localNameForFolderA));
assertFalse(nameA03.equals(localNameForFolderA));
assertTrue(nameA02.equals(localNameForFolderA));
Path folderBPath = nodeService.getPath(folderBNodeRef);
Path.ChildAssocElement pathBLastElement = (Path.ChildAssocElement) folderBPath.last();
String currentPath = folderBPath.toDisplayPath(nodeService, permissionService) + "/" + pathBLastElement.getRef().getQName().getLocalName();
String expectedPath = "/Company Home/User Homes/" + user1 + "/" + nameA02 + "/" + nameB;
assertTrue(currentPath.equals(expectedPath));
}
use of org.alfresco.rest.api.tests.client.data.Folder in project alfresco-remote-api by Alfresco.
the class NodeApiTest method testLinkCRUD.
// note: app:folderlink & app:filelink both extend cm:link (which in turn extends cm:cmobject)
// (see applicationModel.xml / contentModel.xml)
@Test
public void testLinkCRUD() throws Exception {
setRequestContext(user1);
String myNodeId = getMyNodeId();
UserInfo expectedUser = new UserInfo(user1);
String myChildrenUrl = getNodeChildrenUrl(myNodeId);
// create folder f1
Folder folderResp = createFolder(myNodeId, "f1 " + RUNID);
String f1Id = folderResp.getId();
// create empty file d1 in f1
Document d1 = new Document();
d1.setName("d1.txt");
d1.setNodeType(TYPE_CM_CONTENT);
HttpResponse response = post(getNodeChildrenUrl(f1Id), toJsonAsStringNonNull(d1), 201);
Document documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
String d1Id = documentResp.getId();
// create folder f2
folderResp = createFolder(myNodeId, "f2 " + RUNID);
String f2Id = folderResp.getId();
// create folder link node in f2 (pointing to f1)
String nodeName = "f1 link";
String nodeType = "app:folderlink";
Map<String, Object> props = new HashMap<>();
props.put("cm:destination", f1Id);
Node nodeResp = createNode(f2Id, nodeName, nodeType, props);
String n1Id = nodeResp.getId();
Node n1 = new Node();
n1.setName(nodeName);
n1.setNodeType(nodeType);
n1.setIsFolder(true);
// note: parent of the link (not where it is pointing)
n1.setParentId(f2Id);
n1.setAspectNames(Collections.singletonList("cm:auditable"));
n1.setProperties(props);
n1.setCreatedByUser(expectedUser);
n1.setModifiedByUser(expectedUser);
n1.expected(nodeResp);
// get node info
response = getSingle(NodesEntityResource.class, n1Id, null, 200);
nodeResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class);
n1.expected(nodeResp);
// create file link node in f2 pointing to d1
nodeName = "d1 link";
nodeType = "app:filelink";
props = new HashMap<>();
props.put("cm:destination", d1Id);
nodeResp = createNode(f2Id, nodeName, nodeType, props);
String n2Id = nodeResp.getId();
Node n2 = new Node();
n2.setName(nodeName);
n2.setNodeType(nodeType);
n2.setIsFolder(false);
// note: parent of the link (not where it is pointing)
n2.setParentId(f2Id);
n2.setAspectNames(Collections.singletonList("cm:auditable"));
n2.setProperties(props);
n2.setCreatedByUser(expectedUser);
n2.setModifiedByUser(expectedUser);
n2.expected(nodeResp);
// get node info
response = getSingle(NodesEntityResource.class, n2Id, null, 200);
nodeResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class);
n2.expected(nodeResp);
// update node - rename
String updatedName = "f1 link renamed";
Node nUpdate = new Node();
nUpdate.setName(updatedName);
response = put(URL_NODES, n1Id, toJsonAsStringNonNull(nUpdate), null, 200);
nodeResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class);
n1.setName(updatedName);
n1.expected(nodeResp);
// filtering, via where clause (nodeType + optionally including sub-types)
List<String> linkIds = Arrays.asList(n1Id, n2Id);
Map<String, String> params = new HashMap<>();
params.put("where", "(nodeType='cm:link')");
Paging paging = getPaging(0, Integer.MAX_VALUE);
response = getAll(getNodeChildrenUrl(f2Id), paging, params, 200);
List<Node> nodes = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), Node.class);
assertEquals(0, nodes.size());
// filter by including sub-types - note: includesubtypes is case-insensitive
params = new HashMap<>();
params.put("where", "(nodeType='cm:link INCLUDESUBTYPES')");
paging = getPaging(0, Integer.MAX_VALUE);
response = getAll(getNodeChildrenUrl(f2Id), paging, params, 200);
nodes = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), Node.class);
assertEquals(linkIds.size(), nodes.size());
assertTrue(linkIds.contains(nodes.get(0).getId()));
assertTrue(linkIds.contains(nodes.get(1).getId()));
params = new HashMap<>();
params.put("where", "(nodeType='cm:link includeSubTypes')");
paging = getPaging(0, Integer.MAX_VALUE);
response = getAll(getNodeChildrenUrl(f2Id), paging, params, 200);
nodes = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), Node.class);
assertEquals(linkIds.size(), nodes.size());
assertTrue(linkIds.contains(nodes.get(0).getId()));
assertTrue(linkIds.contains(nodes.get(1).getId()));
// delete link
deleteNode(n1Id);
// -ve test - delete - cannot delete nonexistent link
deleteNode(n1Id, 404);
// -ve test - create - name is mandatory
Node invalid = new Node();
invalid.setNodeType("cm:link");
post(myChildrenUrl, toJsonAsStringNonNull(invalid), 400);
// -ve test - create - node type is mandatory
invalid = new Node();
invalid.setName("my node");
post(myChildrenUrl, toJsonAsStringNonNull(invalid), 400);
// -ve test - create - unsupported node type
invalid = new Node();
invalid.setName("my node");
invalid.setNodeType("sys:base");
post(myChildrenUrl, toJsonAsStringNonNull(invalid), 400);
// -ve test - create - duplicate name
post(getNodeChildrenUrl(f2Id), toJsonAsStringNonNull(n2), 409);
// -ve test - unknown nodeType when filtering
params = new HashMap<>();
params.put("where", "(nodeType='my:unknown'");
getAll(getNodeChildrenUrl(f2Id), paging, params, 400);
// -ver test - invalid node type localname format and suffix is not ' includesubtypes'
params = new HashMap<>();
params.put("where", "(nodeType='cm:link ')");
getAll(getNodeChildrenUrl(f2Id), paging, params, 400);
params = new HashMap<>();
params.put("where", "(nodeType='cm:link blah')");
getAll(getNodeChildrenUrl(f2Id), paging, params, 400);
}
Aggregations