From bcf551a6443561159cda2e695ef5e9f0729c7bf9 Mon Sep 17 00:00:00 2001 From: Martin Muller Date: Fri, 5 Aug 2016 13:47:20 +0000 Subject: [PATCH] Merged RETURN-OF-THE-API (5.2.0) to 5.2.N (5.2.1) 128597 jvonka: REPO-900: Fix "autoRename not working if using a relativePath (with create/add node via json request)" git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@129175 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/rest/api/impl/NodesImpl.java | 7 ++-- .../alfresco/rest/api/tests/NodeApiTest.java | 32 +++++++++++++++---- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java index 3100981165..83b1567b93 100644 --- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java @@ -1589,6 +1589,10 @@ public class NodesImpl implements Nodes props = mapToNodeProperties(nodeInfo.getProperties()); } + // Optionally, lookup by relative path + String relativePath = nodeInfo.getRelativePath(); + parentNodeRef = getOrCreatePath(parentNodeRef, relativePath); + // Existing file/folder name handling boolean autoRename = Boolean.valueOf(parameters.getParameter(PARAM_AUTO_RENAME)); if (autoRename && (isContent || isSubClass(nodeTypeQName, ContentModel.TYPE_FOLDER))) @@ -1601,9 +1605,6 @@ public class NodesImpl implements Nodes } } - String relativePath = nodeInfo.getRelativePath(); - parentNodeRef = getOrCreatePath(parentNodeRef, relativePath); - QName assocTypeQName = ContentModel.ASSOC_CONTAINS; if ((nodeInfo.getAssociation() != null) && (nodeInfo.getAssociation().getAssocType() != 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 5eb4a92c51..9520575d26 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java @@ -1960,17 +1960,35 @@ public class NodeApiTest extends AbstractBaseApiTest post(postUrl, user1, toJsonAsStringNonNull(f1), 409); // Create a folder with a duplicate name (f1), but set the autoRename to true - response = post(postUrl, user1, toJsonAsStringNonNull(f1), "?autoRename=true", 201); + response = post(postUrl, user1, toJsonAsStringNonNull(f1), "?"+Nodes.PARAM_AUTO_RENAME+"=true", 201); documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); assertEquals("f1-1", documentResp.getName()); // Create a folder with a duplicate name (f1) again, but set the autoRename to true - response = post(postUrl, user1, toJsonAsStringNonNull(f1), "?autoRename=true", 201); + response = post(postUrl, user1, toJsonAsStringNonNull(f1), "?"+Nodes.PARAM_AUTO_RENAME+"=true", 201); documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); assertEquals("f1-2", documentResp.getName()); // -ve test - create a folder with a duplicate name (f1), but set the autoRename to false - post(postUrl, user1, toJsonAsStringNonNull(f1), "?autoRename=false", 409); + post(postUrl, user1, toJsonAsStringNonNull(f1), "?"+Nodes.PARAM_AUTO_RENAME+"=false", 409); + + // Create folder using relative path + n = new Node(); + n.setName("fX"); + n.setNodeType(TYPE_CM_FOLDER); + n.setRelativePath("/f1/f2"); + + response = post(postUrl, user1, toJsonAsStringNonNull(n), "?"+Nodes.PARAM_AUTO_RENAME+"=true", 201); + documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); + assertEquals("fX", documentResp.getName()); + + // Create a folder using relative path, with a duplicate name (fX) but set the autoRename to true + response = post(postUrl, user1, toJsonAsStringNonNull(n), "?"+Nodes.PARAM_AUTO_RENAME+"=true", 201); + documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); + assertEquals("fX-1", documentResp.getName()); + + // -ve test - create a folder with a duplicate name (fX), but set the autoRename to false + post(postUrl, user1, toJsonAsStringNonNull(n), "?"+Nodes.PARAM_AUTO_RENAME+"=false", 409); // -ve test - invalid relative path n = new Node(); @@ -2599,23 +2617,23 @@ public class NodeApiTest extends AbstractBaseApiTest post(postUrl, user1, toJsonAsStringNonNull(d1), 409); // Create a file with a duplicate name (d1.txt), but set the autoRename to true - response = post(postUrl, user1, toJsonAsStringNonNull(d1), "?autoRename=true", 201); + response = post(postUrl, user1, toJsonAsStringNonNull(d1), "?"+Nodes.PARAM_AUTO_RENAME+"=true", 201); documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); assertEquals("d1-1.txt", documentResp.getName()); // Create a file with a duplicate name (d1.txt) again, but set the autoRename to true - response = post(postUrl, user1, toJsonAsStringNonNull(d1), "?autoRename=true", 201); + response = post(postUrl, user1, toJsonAsStringNonNull(d1), "?"+Nodes.PARAM_AUTO_RENAME+"=true", 201); documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); assertEquals("d1-2.txt", documentResp.getName()); // Create a file with a duplicate name (d1-2.txt) again, but set the autoRename to true d1.setName("d1-2.txt"); - response = post(postUrl, user1, toJsonAsStringNonNull(d1), "?autoRename=true", 201); + response = post(postUrl, user1, toJsonAsStringNonNull(d1), "?"+Nodes.PARAM_AUTO_RENAME+"=true", 201); documentResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); assertEquals("d1-2-1.txt", documentResp.getName()); // -ve test - create a file with a duplicate name (d1-2.txt), but set the autoRename to false - post(postUrl, user1, toJsonAsStringNonNull(d1), "?autoRename=false", 409); + post(postUrl, user1, toJsonAsStringNonNull(d1), "?"+Nodes.PARAM_AUTO_RENAME+"=false", 409); } /**