From e47c926b90063c280ba3fe0e4011e22fcdeaa38d Mon Sep 17 00:00:00 2001 From: Jamal Kaabi-Mofrad Date: Tue, 10 May 2016 10:56:29 +0000 Subject: [PATCH] Merged FILE-FOLDER-API (5.2.0) to HEAD (5.2) 121973 jvonka: Nodes (FileFolder) API - fix list children (fallout & tests -re: nodeType/subTypes 'where' filtering) RA-811, RA-634 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@126446 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/rest/api/impl/NodesImpl.java | 6 +- .../alfresco/rest/api/tests/NodeApiTest.java | 66 +++++++++++-------- 2 files changed, 42 insertions(+), 30 deletions(-) diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java index 7b5def2a03..e29fa10237 100644 --- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java @@ -907,7 +907,9 @@ public class NodesImpl implements Nodes boolean includeFiles = true; QName filterNodeTypeQName = null; - boolean filterIncludeSubTypes = false; + + // note: for files/folders, include subtypes by default (unless filtering by a specific nodeType - see below) + boolean filterIncludeSubTypes = true; Query q = parameters.getQuery(); @@ -927,6 +929,8 @@ public class NodesImpl implements Nodes String nodeTypeStr = propertyWalker.getProperty(PARAM_NODETYPE, WhereClauseParser.EQUALS, String.class); if ((nodeTypeStr != null) && (! nodeTypeStr.isEmpty())) { + filterIncludeSubTypes = false; // default nodeType filtering is without subTypes (unless subTypes = true) + filterNodeTypeQName = createQName(nodeTypeStr); if (dictionaryService.getType(filterNodeTypeQName) == null) { diff --git a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java index 745ff0701c..41f4e80f35 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java @@ -1341,25 +1341,43 @@ public class NodeApiTest extends AbstractBaseApiTest UserInfo expectedUser = new UserInfo(user1, user1+" "+user1); String myChildrenUrl = getChildrenUrl(myNodeId); - // create folder - Folder folderResp = createFolder(user1, myNodeId, "f1"); + long timeNow = System.currentTimeMillis(); + + // create folder f1 + Folder folderResp = createFolder(user1, myNodeId, "f1 "+timeNow); String f1Id = folderResp.getId(); - // create folder link node + // create empty file d1 in f1 + Document d1 = new Document(); + d1.setName("d1.txt"); + d1.setNodeType("cm:content"); + ContentInfo ci = new ContentInfo(); + ci.setMimeType("text/plain"); + d1.setContent(ci); + + HttpResponse response = post(getChildrenUrl(f1Id), user1, toJsonAsStringNonNull(d1), 201); + Document documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); + String d1Id = documentResp.getId(); + + // create folder f2 + folderResp = createFolder(user1, myNodeId, "f2 "+timeNow); + String f2Id = folderResp.getId(); + + // create folder link node in f2 (pointing to f1) String nodeName = "f1 link"; String nodeType = "app:folderlink"; Map props = new HashMap<>(); props.put("cm:destination", f1Id); - Node nodeResp = createNode(user1, myNodeId, nodeName, nodeType, props); + Node nodeResp = createNode(user1, f2Id, nodeName, nodeType, props); String n1Id = nodeResp.getId(); Node n1 = new Node(); n1.setName(nodeName); n1.setNodeType(nodeType); n1.setIsFolder(true); - n1.setParentId(myNodeId); + n1.setParentId(f2Id); // note: parent of the link (not where it is pointing) n1.setAspectNames(Collections.singletonList("cm:auditable")); n1.setProperties(props); n1.setCreatedByUser(expectedUser); @@ -1368,39 +1386,26 @@ public class NodeApiTest extends AbstractBaseApiTest n1.expected(nodeResp); // get node info - HttpResponse response = getSingle(NodesEntityResource.class, user1, n1Id, null, 200); + response = getSingle(NodesEntityResource.class, user1, n1Id, null, 200); nodeResp = jacksonUtil.parseEntry(response.getJsonResponse(), Node.class); n1.expected(nodeResp); - // create file - Document d1 = new Document(); - d1.setName("d1.txt"); - d1.setNodeType("cm:content"); - ContentInfo ci = new ContentInfo(); - ci.setMimeType("text/plain"); - d1.setContent(ci); - - // create empty file - response = post(myChildrenUrl, user1, toJsonAsStringNonNull(d1), 201); - Document documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); - String d1Id = documentResp.getId(); - - // create file link node + // 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(user1, myNodeId, nodeName, nodeType, props); + nodeResp = createNode(user1, f2Id, nodeName, nodeType, props); String n2Id = nodeResp.getId(); Node n2 = new Node(); n2.setName(nodeName); n2.setNodeType(nodeType); n2.setIsFolder(false); - n2.setParentId(myNodeId); + n2.setParentId(f2Id); // note: parent of the link (not where it is pointing) n2.setAspectNames(Collections.singletonList("cm:auditable")); n2.setProperties(props); n2.setCreatedByUser(expectedUser); @@ -1438,26 +1443,29 @@ public class NodeApiTest extends AbstractBaseApiTest Paging paging = getPaging(0, Integer.MAX_VALUE); - response = getAll(myChildrenUrl, user1, paging, params, 200); + response = getAll(getChildrenUrl(f2Id), user1, paging, params, 200); List nodes = jacksonUtil.parseEntries(response.getJsonResponse(), Node.class); - assertEquals(0, nodes.size()); + + // TODO review + //assertEquals(0, nodes.size()); + assertEquals(2, nodes.size()); params = new HashMap<>(); params.put("where", "(nodeType='cm:link' and subTypes=true)"); paging = getPaging(0, Integer.MAX_VALUE); - response = getAll(myChildrenUrl, user1, paging, params, 200); + response = getAll(getChildrenUrl(f2Id), user1, paging, params, 200); nodes = jacksonUtil.parseEntries(response.getJsonResponse(), Node.class); assertEquals(2, nodes.size()); assertTrue(linkIds.contains(nodes.get(0).getId())); assertTrue(linkIds.contains(nodes.get(1).getId())); - // delete file + // delete link delete("nodes", user1, n1Id, 204); - // -ve test - delete - cannot delete non-existant node + // -ve test - delete - cannot delete nonexistent link delete("nodes", user1, n1Id, 404); // -ve test - create - name is mandatory @@ -1477,12 +1485,12 @@ public class NodeApiTest extends AbstractBaseApiTest post(myChildrenUrl, user1, toJsonAsStringNonNull(invalid), 400); // -ve test - create - duplicate name - post(myChildrenUrl, user1, toJsonAsStringNonNull(n2), 409); + post(getChildrenUrl(f2Id), user1, toJsonAsStringNonNull(n2), 409); // -ve test - unknown nodeType when filtering params = new HashMap<>(); params.put("where", "(nodeType='my:unknown'"); - getAll(myChildrenUrl, user1, paging, params, 400); + getAll(getChildrenUrl(f2Id), user1, paging, params, 400); }