From c13683eea17bae1ca52f4befac5264c7414df7ce Mon Sep 17 00:00:00 2001 From: Martin Muller Date: Fri, 5 Aug 2016 10:10:41 +0000 Subject: [PATCH] Merged RETURN-OF-THE-API (5.2.0) to 5.2.N (5.2.1) 128122 jvonka: v1 REST API: minor bug fix(es) to update http error code mappings (to 4xx rather than 500) + sanity api tests REPO-475, REPO-512, REPO-516, REPO-473 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@129125 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- config/alfresco/public-rest-context.xml | 6 ++++ .../org/alfresco/rest/api/impl/NodesImpl.java | 5 ---- .../alfresco/rest/api/tests/NodeApiTest.java | 20 +++++++++++++ .../api/tests/NodeAssociationsApiTest.java | 10 +++++++ .../alfresco/rest/api/tests/TestSites.java | 30 +++++++++++++++++-- 5 files changed, 63 insertions(+), 8 deletions(-) diff --git a/config/alfresco/public-rest-context.xml b/config/alfresco/public-rest-context.xml index 97f0de875b..9312b52125 100644 --- a/config/alfresco/public-rest-context.xml +++ b/config/alfresco/public-rest-context.xml @@ -136,6 +136,11 @@ + + + + + @@ -153,6 +158,7 @@ + diff --git a/source/java/org/alfresco/rest/api/impl/NodesImpl.java b/source/java/org/alfresco/rest/api/impl/NodesImpl.java index edc828a422..09c128977e 100644 --- a/source/java/org/alfresco/rest/api/impl/NodesImpl.java +++ b/source/java/org/alfresco/rest/api/impl/NodesImpl.java @@ -107,7 +107,6 @@ import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ContentData; import org.alfresco.service.cmr.repository.ContentService; import org.alfresco.service.cmr.repository.ContentWriter; -import org.alfresco.service.cmr.repository.CyclicChildRelationshipException; import org.alfresco.service.cmr.repository.DuplicateChildNodeNameException; import org.alfresco.service.cmr.repository.InvalidNodeRefException; import org.alfresco.service.cmr.repository.MimetypeService; @@ -2162,10 +2161,6 @@ public class NodesImpl implements Nodes { throw new InvalidArgumentException("Invalid type of target parent: "+targetParentId); } - catch (CyclicChildRelationshipException ccre) - { - throw new InvalidArgumentException("Parent/child cycle detected: "+targetParentId); - } } @Override 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 48bcb3795f..a15c2c9e7b 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java @@ -1908,6 +1908,15 @@ public class NodeApiTest extends AbstractBaseApiTest n.setNodeType(TYPE_CM_FOLDER); n.setRelativePath("d1.txt"); post(getNodeChildrenUrl(myNodeId), user1, RestApiUtil.toJsonAsStringNonNull(n), 409); + + // -ve test - minor: error code if trying to create with property with invalid format (REPO-473) + props = new HashMap<>(); + props.put("exif:pixelYDimension", "my unknown property"); + n = new Folder(); + n.setName("fZ"); + n.setNodeType(TYPE_CM_FOLDER); + n.setProperties(props); + post(getNodeChildrenUrl(myNodeId), user1, RestApiUtil.toJsonAsStringNonNull(n), 400); } /** @@ -2736,6 +2745,13 @@ public class NodeApiTest extends AbstractBaseApiTest fUpdate = new Folder(); fUpdate.setParentId(myNodeId); put(URL_NODES, user1, fId, toJsonAsStringNonNull(fUpdate), null, 200); + + // -ve test - minor: error code if trying to update property with invalid format (REPO-473) + props = new HashMap<>(); + props.put("exif:pixelYDimension", "my unknown property"); + fUpdate = new Folder(); + fUpdate.setProperties(props); + put(URL_NODES, user1, f2Id, toJsonAsStringNonNull(fUpdate), null, 400); } /** @@ -2962,6 +2978,10 @@ public class NodeApiTest extends AbstractBaseApiTest // -ve - try to update content using multi-part form data payload = new BinaryPayload(txtFile, "multipart/form-data", null); putBinary(url, user1, payload, null, null, 415); + + // -ve - try to invalid media type argument (when parsing request) + payload = new BinaryPayload(txtFile, "/jpeg", null); + putBinary(url, user1, payload, null, null, 415); } /** diff --git a/source/test-java/org/alfresco/rest/api/tests/NodeAssociationsApiTest.java b/source/test-java/org/alfresco/rest/api/tests/NodeAssociationsApiTest.java index 7ec2dee076..39389adf6c 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeAssociationsApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeAssociationsApiTest.java @@ -1503,6 +1503,16 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest assertEquals(o2Id, nodes.get(0).getId()); // TODO test model with mandatory aspect + + + // -ve test - minor: error code if creating a cyclic child assoc (REPO-475) + String myNodeId = getMyNodeId(user1); + n = new Node(); + n.setName("my-folder-1"); + n.setNodeType(TYPE_CM_FOLDER); + AssocChild assocChild = new AssocChild(myNodeId, "cm:contains"); + n.setSecondaryChildren(Collections.singletonList(assocChild)); + post(getNodeChildrenUrl(myNodeId), user1, RestApiUtil.toJsonAsStringNonNull(n), 400); } finally { diff --git a/source/test-java/org/alfresco/rest/api/tests/TestSites.java b/source/test-java/org/alfresco/rest/api/tests/TestSites.java index 2ad135e539..08119e9e21 100644 --- a/source/test-java/org/alfresco/rest/api/tests/TestSites.java +++ b/source/test-java/org/alfresco/rest/api/tests/TestSites.java @@ -29,14 +29,11 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; -import java.util.Collections; import java.util.Iterator; import java.util.List; -import java.util.Map; import org.alfresco.repo.tenant.TenantUtil; import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork; -import org.alfresco.rest.api.tests.RepoService.SiteInformation; import org.alfresco.rest.api.tests.RepoService.TestNetwork; import org.alfresco.rest.api.tests.RepoService.TestSite; import org.alfresco.rest.api.tests.client.PublicApiClient.ListResponse; @@ -50,6 +47,7 @@ import org.alfresco.rest.api.tests.client.data.SiteRole; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.util.GUID; import org.apache.commons.httpclient.HttpStatus; +import org.json.simple.JSONObject; import org.junit.Before; import org.junit.Test; @@ -289,7 +287,33 @@ public class TestSites extends EnterpriseTestApi sitesProxy.createSite(site); } + // -ve - minor: error code if updating via nodes api (REPO-512) { + String siteId = "zzz"; + String siteTitle = "ZZZ site"; + + Site site = new SiteImpl(null, siteId, null, siteTitle, null, SiteVisibility.PRIVATE.toString(), null, null); + String siteNodeId = sitesProxy.createSite(site).getGuid(); + + // try to update to invalid site visibility + JSONObject prop = new JSONObject(); + prop.put("st:siteVisibility","INVALID"); + JSONObject properties = new JSONObject(); + properties.put("properties", new JSONObject(prop)); + try + { + sitesProxy.update("nodes", siteNodeId, null, null, properties.toJSONString(), null); + fail(); + } catch (PublicApiException e) + { + assertEquals(HttpStatus.SC_BAD_REQUEST, e.getHttpResponse().getStatusCode()); + } + + sitesProxy.removeSite(siteId); // cleanup + } + + // -ve tests - belts-and-braces for unsupported methods + { publicApiClient.setRequestContext(new RequestContext(network1.getId(), person1Id)); // -ve - cannot call POST method on /sites/siteId