From ebeb96f5767cc58023c191a113dc3ebdf1b3baf1 Mon Sep 17 00:00:00 2001 From: Martin Muller Date: Fri, 5 Aug 2016 13:47:03 +0000 Subject: [PATCH] Merged RETURN-OF-THE-API (5.2.0) to 5.2.N (5.2.1) 128537 jvonka: V1 REST API: Api Test cleanup and rationalisation (re: helper methods / runAs user / admin) - round 1 REPO-113 git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/BRANCHES/DEV/5.2.N/root@129171 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261 --- .../org/alfresco/rest/DeletedNodesTest.java | 19 +- .../rest/api/tests/AbstractBaseApiTest.java | 276 +++++++---- .../rest/api/tests/ActivitiesPostingTest.java | 23 +- .../rest/api/tests/AuthenticationsTest.java | 59 +-- .../alfresco/rest/api/tests/NodeApiTest.java | 442 ++++++++---------- .../api/tests/NodeAssociationsApiTest.java | 134 ++---- .../rest/api/tests/NodeVersionsApiTest.java | 135 ++---- .../rest/api/tests/QueriesApiTest.java | 96 +--- .../rest/api/tests/RenditionsTest.java | 21 +- .../rest/api/tests/SharedLinkApiTest.java | 183 +++----- 10 files changed, 639 insertions(+), 749 deletions(-) diff --git a/source/test-java/org/alfresco/rest/DeletedNodesTest.java b/source/test-java/org/alfresco/rest/DeletedNodesTest.java index ce24e1ac2f..07ca58f31a 100644 --- a/source/test-java/org/alfresco/rest/DeletedNodesTest.java +++ b/source/test-java/org/alfresco/rest/DeletedNodesTest.java @@ -75,14 +75,15 @@ public class DeletedNodesTest extends AbstractSingleNetworkSiteTest @Test public void testCreateAndDelete() throws Exception { - publicApiClient.setRequestContext(new RequestContext(u1.getId())); + setRequestContext(u1.getId()); + Date now = new Date(); String folder1 = "folder" + now.getTime() + "_1"; - Folder createdFolder = createFolder(u1.getId(), docLibNodeRef.getId(), folder1, null); + Folder createdFolder = createFolder(docLibNodeRef.getId(), folder1, null); assertNotNull(createdFolder); //Create a folder outside a site - Folder createdFolderNonSite = createFolder(u1.getId(), Nodes.PATH_MY, folder1, null); + Folder createdFolderNonSite = createFolder(Nodes.PATH_MY, folder1, null); assertNotNull(createdFolderNonSite); Document document = createDocument(createdFolder, "d1.txt"); @@ -160,14 +161,15 @@ public class DeletedNodesTest extends AbstractSingleNetworkSiteTest @Test public void testCreateAndRestore() throws Exception { - publicApiClient.setRequestContext(new RequestContext(u1.getId())); + setRequestContext(u1.getId()); + Date now = new Date(); String folder1 = "folder" + now.getTime() + "_1"; - Folder createdFolder = createFolder(u1.getId(), docLibNodeRef.getId(), folder1, null); + Folder createdFolder = createFolder(docLibNodeRef.getId(), folder1, null); assertNotNull(createdFolder); //Create a folder outside a site - Folder createdFolderNonSite = createFolder(u1.getId(), Nodes.PATH_MY, folder1, null); + Folder createdFolderNonSite = createFolder(Nodes.PATH_MY, folder1, null); assertNotNull(createdFolderNonSite); Document document = createDocument(createdFolder, "restoreme.txt"); @@ -204,10 +206,11 @@ public class DeletedNodesTest extends AbstractSingleNetworkSiteTest @Test public void testCreateAndPurge() throws Exception { - publicApiClient.setRequestContext(new RequestContext(u1.getId())); + setRequestContext(u1.getId()); + Date now = new Date(); String folder1 = "folder" + now.getTime() + "_1"; - Folder createdFolder = createFolder(u1.getId(), docLibNodeRef.getId(), folder1, null); + Folder createdFolder = createFolder(docLibNodeRef.getId(), folder1, null); assertNotNull(createdFolder); delete(URL_NODES, u1.getId(), createdFolder.getId(), 204); diff --git a/source/test-java/org/alfresco/rest/api/tests/AbstractBaseApiTest.java b/source/test-java/org/alfresco/rest/api/tests/AbstractBaseApiTest.java index 88002a37e2..42407a61b2 100644 --- a/source/test-java/org/alfresco/rest/api/tests/AbstractBaseApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/AbstractBaseApiTest.java @@ -31,9 +31,11 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.fail; -import org.alfresco.repo.content.MimetypeMap; + +import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.repo.tenant.TenantUtil; import org.alfresco.repo.tenant.TenantUtil.TenantRunAsWork; +import org.alfresco.repo.transaction.RetryingTransactionHelper; import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.model.Site; import org.alfresco.rest.api.nodes.NodesEntityResource; @@ -53,9 +55,12 @@ import org.alfresco.rest.api.tests.client.data.Rendition; import org.alfresco.rest.api.tests.client.data.SiteRole; import org.alfresco.rest.api.tests.util.MultiPartBuilder; import org.alfresco.rest.api.tests.util.RestApiUtil; -import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.cmr.security.MutableAuthenticationService; +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.Before; import org.springframework.util.ResourceUtils; import java.io.ByteArrayInputStream; @@ -63,7 +68,9 @@ import java.io.File; import java.io.FileNotFoundException; import java.io.IOException; import java.net.URL; +import java.util.ArrayList; import java.util.Collections; +import java.util.List; import java.util.Map; /** @@ -90,10 +97,89 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi protected static final String ASSOC_TYPE_CM_PREFERENCE_IMAGE = "cm:preferenceImage"; protected static final String ASSOC_TYPE_CM_CONTAINS = "cm:contains"; + + // TODO improve admin-related tests, including ability to override default admin un/pw + protected static final String DEFAULT_ADMIN = "admin"; + private static final String DEFAULT_ADMIN_PWD = "admin"; + protected TestNetwork networkOne; + + /** + * User one from network one + */ + protected TestPerson userOneN1; + + /** + * User two from network one + */ + protected TestPerson userTwoN1; + protected TestSite userOneN1Site; + + protected String user1; + protected String user2; + + private List users = new ArrayList<>(); + + protected MutableAuthenticationService authenticationService; + protected PersonService personService; + + protected final String RUNID = System.currentTimeMillis()+""; + + + @Before + public void setup() throws Exception + { + authenticationService = applicationContext.getBean("authenticationService", MutableAuthenticationService.class); + personService = applicationContext.getBean("personService", PersonService.class); + + // note: createUser currently relies on repoService + user1 = createUser("user1-" + RUNID); + user2 = createUser("user2-" + RUNID); + + // to enable admin access via test calls - eg. after clean/purge + getOrCreateUser("admin", "admin"); + + // We just need to clean the on-premise-users, + // so the tests for the specific network would work. + users.add(user1); + users.add(user2); + + networkOne = getTestFixture().getRandomNetwork(); + userOneN1 = networkOne.createUser(); + userTwoN1 = networkOne.createUser(); + + userOneN1Site = createSite(networkOne, userOneN1, SiteVisibility.PRIVATE); + } + + @After + public void tearDown() throws Exception + { + deleteSite(networkOne.getId(), userOneN1.getId(), userOneN1Site.getSiteId(), 204); + + AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser(); + for (final String user : users) + { + transactionHelper.doInTransaction(new RetryingTransactionHelper.RetryingTransactionCallback() + { + @Override + public Void execute() throws Throwable + { + if (personService.personExists(user)) + { + authenticationService.deleteAuthentication(user); + personService.deletePerson(user); + } + return null; + } + }); + } + users.clear(); + AuthenticationUtil.clearCurrentSecurityContext(); + } /** * The api scope. either public or private + * * @return public or private */ public abstract String getScope(); @@ -111,20 +197,20 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi protected HttpResponse post(String url, String runAsUser, String body, Map params, Map headers, String apiName, int expectedStatus) throws Exception { RequestBuilder requestBuilder = httpClient.new PostRequestBuilder() - .setBodyAsString(body) - .setRequestContext(new RequestContext(runAsUser)) - .setScope(getScope()) - .setApiName(apiName) - .setEntityCollectionName(url) - .setHeaders(headers) - .setParams(params); + .setBodyAsString(body) + .setRequestContext(new RequestContext(runAsUser)) + .setScope(getScope()) + .setApiName(apiName) + .setEntityCollectionName(url) + .setHeaders(headers) + .setParams(params); HttpResponse response = publicApiClient.execute(requestBuilder); checkStatus(expectedStatus, response.getStatusCode()); return response; } - protected HttpResponse post(String url, String runAsUser, String body, String queryString, int expectedStatus) throws Exception + protected HttpResponse post(String url, String runAsUser, String body, String queryString, int expectedStatus) throws Exception { publicApiClient.setRequestContext(new RequestContext(runAsUser)); if (queryString != null) @@ -207,12 +293,12 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi { Map params = createParams(paging, otherParams); RequestBuilder requestBuilder = httpClient.new GetRequestBuilder() - .setRequestContext(new RequestContext(runAsUser)) - .setScope(getScope()) - .setApiName(apiName) - .setEntityCollectionName(url) - .setParams(params) - .setHeaders(headers); + .setRequestContext(new RequestContext(runAsUser)) + .setScope(getScope()) + .setApiName(apiName) + .setEntityCollectionName(url) + .setParams(params) + .setHeaders(headers); HttpResponse response = publicApiClient.execute(requestBuilder); checkStatus(expectedStatus, response.getStatusCode()); @@ -253,13 +339,13 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi protected HttpResponse getSingle(String url, String runAsUser, String entityId, Map params, Map headers, String apiName, int expectedStatus) throws Exception { RequestBuilder requestBuilder = httpClient.new GetRequestBuilder() - .setRequestContext(new RequestContext(runAsUser)) - .setScope(getScope()) - .setApiName(apiName) - .setEntityCollectionName(url) - .setEntityId(entityId) - .setParams(params) - .setHeaders(headers); + .setRequestContext(new RequestContext(runAsUser)) + .setScope(getScope()) + .setApiName(apiName) + .setEntityCollectionName(url) + .setEntityId(entityId) + .setParams(params) + .setHeaders(headers); HttpResponse response = publicApiClient.execute(requestBuilder); checkStatus(expectedStatus, response.getStatusCode()); @@ -268,7 +354,7 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi } protected HttpResponse getSingleWithDelayRetry(String url, String runAsUser, String entityId, Map params, - Map headers, int repeat, long pauseInMillisecond, int expectedStatus) throws Exception + Map headers, int repeat, long pauseInMillisecond, int expectedStatus) throws Exception { int retryCount = 0; while (retryCount < repeat) @@ -276,7 +362,7 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi try { return getSingle(url, runAsUser, entityId, params, headers, expectedStatus); - } + } catch (AssertionError ex) { retryCount++; @@ -300,7 +386,7 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi } protected HttpResponse putBinary(String url, int version, String runAsUser, BinaryPayload payload, String queryString, Map params, - int expectedStatus) throws Exception + int expectedStatus) throws Exception { publicApiClient.setRequestContext(new RequestContext(runAsUser)); if (queryString != null) @@ -315,17 +401,17 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi } protected HttpResponse putBinary(String url, String runAsUser, BinaryPayload payload, String queryString, Map params, - int expectedStatus) throws Exception + int expectedStatus) throws Exception { return putBinary(url, 1, runAsUser, payload, queryString, params, expectedStatus); } protected HttpResponse delete(String url, String runAsUser, String entityId, int expectedStatus) throws Exception { - return delete(url, runAsUser, entityId, null, expectedStatus); + return delete(url, runAsUser, entityId, null, expectedStatus); } - protected HttpResponse delete(String url, String runAsUser, String entityId, Map params, int expectedStatus) throws Exception + protected HttpResponse delete(String url, String runAsUser, String entityId, Map params, int expectedStatus) throws Exception { publicApiClient.setRequestContext(new RequestContext(runAsUser)); @@ -343,13 +429,13 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi protected HttpResponse delete(String url, String runAsUser, String entityId, Map params, Map headers, String apiName, int expectedStatus) throws Exception { RequestBuilder requestBuilder = httpClient.new DeleteRequestBuilder() - .setRequestContext(new RequestContext(runAsUser)) - .setScope(getScope()) - .setApiName(apiName) - .setEntityCollectionName(url) - .setEntityId(entityId) - .setParams(params) - .setHeaders(headers); + .setRequestContext(new RequestContext(runAsUser)) + .setScope(getScope()) + .setApiName(apiName) + .setEntityCollectionName(url) + .setEntityId(entityId) + .setParams(params) + .setHeaders(headers); HttpResponse response = publicApiClient.execute(requestBuilder); checkStatus(expectedStatus, response.getStatusCode()); @@ -420,16 +506,16 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi /** * Helper: to get site container id (see also RepoService.getContainerNodeRef -> SiteService.getContainer) - * - * GET /nodes/-root?relativePath=/Sites/siteId/documentLibrary - * + *

+ * GET /nodes/-root?relativePath=/Sites/siteId/documentLibrary + *

* alternatively: - * - * GET /nodes/siteNodeId?relativePath=documentLibrary + *

+ * GET /nodes/siteNodeId?relativePath=documentLibrary */ protected String getSiteContainerNodeId(String networkId, String runAsUserId, String siteId, String containerNameId) throws Exception { - Map params = Collections.singletonMap(Nodes.PARAM_RELATIVE_PATH, "/Sites/"+siteId+"/"+containerNameId); + Map params = Collections.singletonMap(Nodes.PARAM_RELATIVE_PATH, "/Sites/" + siteId + "/" + containerNameId); publicApiClient.setRequestContext(new RequestContext(networkId, runAsUserId)); @@ -447,12 +533,7 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi return null; }, testSite.getNetworkId()); } - - protected NodeRef getSiteDocLib(final TestSite testSite) - { - return TenantUtil.runAsTenant(() -> testSite.getContainerNodeRef(("documentLibrary")), testSite.getNetworkId()); - } - + protected void checkStatus(int expectedStatus, int actualStatus) { if (expectedStatus > 0 && expectedStatus != actualStatus) @@ -461,46 +542,60 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi } } - // -root- (eg. Company Home for on-prem) - protected String getRootNodeId(String runAsUserId) throws Exception + protected void setRequestContext(String runAsUser) { - HttpResponse response = getSingle(NodesEntityResource.class, runAsUserId, Nodes.PATH_ROOT, null, 200); + if ((runAsUser != null) && runAsUser.equals(DEFAULT_ADMIN)) + { + // TODO improve "admin" related tests + publicApiClient.setRequestContext(new RequestContext("-default-", DEFAULT_ADMIN, DEFAULT_ADMIN_PWD)); + + } + else + { + publicApiClient.setRequestContext(new RequestContext(runAsUser)); + } + } + + // -root- (eg. Company Home for on-prem) + protected String getRootNodeId() throws Exception + { + HttpResponse response = getSingle(NodesEntityResource.class, publicApiClient.getRequestContext().getRunAsUser(), Nodes.PATH_ROOT, null, 200); Node node = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); return node.getId(); } // -my- (eg. User's Home for on-prem) - protected String getMyNodeId(String runAsUserId) throws Exception + protected String getMyNodeId() throws Exception { - HttpResponse response = getSingle(NodesEntityResource.class, runAsUserId, Nodes.PATH_MY, null, 200); + HttpResponse response = getSingle(NodesEntityResource.class, publicApiClient.getRequestContext().getRunAsUser(), Nodes.PATH_MY, null, 200); Node node = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); return node.getId(); } // -shared- (eg. "Shared" folder for on-prem) - protected String getSharedNodeId(String runAsUserId) throws Exception + protected String getSharedNodeId() throws Exception { - HttpResponse response = getSingle(NodesEntityResource.class, runAsUserId, Nodes.PATH_SHARED, null, 200); + HttpResponse response = getSingle(NodesEntityResource.class, publicApiClient.getRequestContext().getRunAsUser(), Nodes.PATH_SHARED, null, 200); Node node = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); return node.getId(); } - protected Folder createFolder(String runAsUserId, String parentId, String folderName) throws Exception + protected Folder createFolder(String parentId, String folderName) throws Exception { - return createFolder(runAsUserId, parentId, folderName, null); + return createFolder(parentId, folderName, null); + } + + protected Folder createFolder(String parentId, String folderName, Map props) throws Exception + { + return createNode(parentId, folderName, TYPE_CM_FOLDER, props, Folder.class); } - protected Folder createFolder(String runAsUserId, String parentId, String folderName, Map props) throws Exception + protected Node createNode(String parentId, String nodeName, String nodeType, Map props) throws Exception { - return createNode(runAsUserId, parentId, folderName, TYPE_CM_FOLDER, props, Folder.class); + return createNode(parentId, nodeName, nodeType, props, Node.class); } - protected Node createNode(String runAsUserId, String parentId, String nodeName, String nodeType, Map props) throws Exception - { - return createNode(runAsUserId, parentId, nodeName, nodeType, props, Node.class); - } - - protected T createNode(String runAsUserId, String parentId, String nodeName, String nodeType, Map props, Class returnType) + protected T createNode(String parentId, String nodeName, String nodeType, Map props, Class returnType) throws Exception { Node n = new Node(); @@ -509,22 +604,43 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi n.setProperties(props); // create node - HttpResponse response = post(getNodeChildrenUrl(parentId), runAsUserId, RestApiUtil.toJsonAsStringNonNull(n), 201); + HttpResponse response = post(getNodeChildrenUrl(parentId), publicApiClient.getRequestContext().getRunAsUser(), RestApiUtil.toJsonAsStringNonNull(n), 201); return RestApiUtil.parseRestApiEntry(response.getJsonResponse(), returnType); } - - protected Document createTextFile(String userId, String parentId, String fileName, String textContent) throws IOException, Exception + + protected void deleteNode(String nodeId) throws Exception { - return createTextFile(userId, parentId, fileName, textContent, "UTF-8", null); + deleteNode(nodeId, 204); } - protected Document createTextFile(String userId, String parentId, String fileName, String textContent, String encoding, Map props) throws IOException, Exception + protected void deleteNode(String nodeId, int expectedStatus) throws Exception { - return createTextFile(userId, parentId, fileName, textContent, encoding, props, 201); + deleteNode(nodeId, false, expectedStatus); } - protected Document createTextFile(String userId, String parentId, String fileName, String textContent, String encoding, Map props, int expectedStatus) throws IOException, Exception + protected void deleteNode(String nodeId, boolean permanent, int expectedStatus) throws Exception + { + Map params = null; + if (permanent == true) + { + params = Collections.singletonMap("permanent", "true"); + } + + delete(URL_NODES, publicApiClient.getRequestContext().getRunAsUser(), nodeId, params, expectedStatus); + } + + protected Document createTextFile(String parentId, String fileName, String textContent) throws IOException, Exception + { + return createTextFile(parentId, fileName, textContent, "UTF-8", null); + } + + protected Document createTextFile(String parentId, String fileName, String textContent, String encoding, Map props) throws IOException, Exception + { + return createTextFile(parentId, fileName, textContent, encoding, props, 201); + } + + protected Document createTextFile(String parentId, String fileName, String textContent, String encoding, Map props, int expectedStatus) throws IOException, Exception { if (props == null) { @@ -540,7 +656,7 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi .setProperties(props) .build(); - HttpResponse response = post(getNodeChildrenUrl(parentId), userId, reqBody.getBody(), null, reqBody.getContentType(), expectedStatus); + HttpResponse response = post(getNodeChildrenUrl(parentId), publicApiClient.getRequestContext().getRunAsUser(), reqBody.getBody(), null, reqBody.getContentType(), expectedStatus); if (response.getJsonResponse().get("error") != null) { @@ -550,13 +666,13 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi return RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); } - protected Document updateTextFile(String userId, String contentId, String textContent, Map parameters) throws IOException, Exception + protected Document updateTextFile(String contentId, String textContent, Map parameters) throws IOException, Exception { ByteArrayInputStream inputStream = new ByteArrayInputStream(textContent.getBytes()); File txtFile = TempFileProvider.createTempFile(inputStream, getClass().getSimpleName(), ".txt"); BinaryPayload payload = new BinaryPayload(txtFile); - HttpResponse response = putBinary(getNodeContentUrl(contentId), userId, payload, null, parameters, 200); + HttpResponse response = putBinary(getNodeContentUrl(contentId), publicApiClient.getRequestContext().getRunAsUser(), payload, null, parameters, 200); return RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Document.class); } @@ -573,14 +689,14 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi protected static final long PAUSE_TIME = 5000; //millisecond protected static final int MAX_RETRY = 20; - protected Rendition waitAndGetRendition(String userId, String sourceNodeId, String renditionId) throws Exception + protected Rendition waitAndGetRendition(String sourceNodeId, String renditionId) throws Exception { int retryCount = 0; while (retryCount < MAX_RETRY) { try { - HttpResponse response = getSingle(getNodeRenditionsUrl(sourceNodeId), userId, renditionId, 200); + HttpResponse response = getSingle(getNodeRenditionsUrl(sourceNodeId), publicApiClient.getRequestContext().getRunAsUser(), renditionId, 200); Rendition rendition = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Rendition.class); assertNotNull(rendition); assertEquals(Rendition.RenditionStatus.CREATED, rendition.getStatus()); @@ -600,7 +716,7 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi return null; } - protected Rendition createAndGetRendition(String userId, String sourceNodeId, String renditionId) throws Exception + protected Rendition createAndGetRendition(String sourceNodeId, String renditionId) throws Exception { Rendition renditionRequest = new Rendition(); renditionRequest.setId(renditionId); @@ -610,7 +726,7 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi { try { - HttpResponse res = post(getNodeRenditionsUrl(sourceNodeId), userId, toJsonAsString(renditionRequest), 202); + HttpResponse res = post(getNodeRenditionsUrl(sourceNodeId), publicApiClient.getRequestContext().getRunAsUser(), toJsonAsString(renditionRequest), 202); assertNull(res.getJsonResponse()); break; } @@ -625,7 +741,7 @@ public abstract class AbstractBaseApiTest extends EnterpriseTestApi } } - return waitAndGetRendition(userId, sourceNodeId, renditionId); + return waitAndGetRendition(sourceNodeId, renditionId); } protected String getNodeRenditionsUrl(String nodeId) diff --git a/source/test-java/org/alfresco/rest/api/tests/ActivitiesPostingTest.java b/source/test-java/org/alfresco/rest/api/tests/ActivitiesPostingTest.java index 5532e108bf..2d8f0505f8 100644 --- a/source/test-java/org/alfresco/rest/api/tests/ActivitiesPostingTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/ActivitiesPostingTest.java @@ -60,8 +60,10 @@ public class ActivitiesPostingTest extends AbstractSingleNetworkSiteTest @Test public void testCreateUpdate() throws Exception { + setRequestContext(u1.getId()); + String folder1 = "folder" + System.currentTimeMillis() + "_1"; - Folder createdFolder = createFolder(u1.getId(), docLibNodeRef.getId(), folder1, null); + Folder createdFolder = createFolder(docLibNodeRef.getId(), folder1, null); assertNotNull(createdFolder); String docName = "d1.txt"; @@ -77,8 +79,8 @@ public class ActivitiesPostingTest extends AbstractSingleNetworkSiteTest String textContent = response.getResponse(); assertNotNull(textContent); - delete(URL_NODES, u1.getId(), documentResp.getId(), 204); - delete(URL_NODES, u1.getId(), createdFolder.getId(), 204); + deleteNode(documentResp.getId()); + deleteNode(createdFolder.getId()); List activities = getMyActivities(); assertEquals(activities.size(),6); @@ -107,16 +109,18 @@ public class ActivitiesPostingTest extends AbstractSingleNetworkSiteTest @Test public void testNonFileActivities() throws Exception { + setRequestContext(u1.getId()); + String folder1 = "InSitefolder" + System.currentTimeMillis() + "_1"; - Folder createdFolder = createFolder(u1.getId(), docLibNodeRef.getId(), folder1, null); + Folder createdFolder = createFolder(docLibNodeRef.getId(), folder1, null); assertNotNull(createdFolder); List activities = getMyActivities(); - Node aNode = createNode(u1.getId(), createdFolder.getId(), "mynode", "cm:failedThumbnail", null); + Node aNode = createNode(createdFolder.getId(), "mynode", "cm:failedThumbnail", null); assertNotNull(aNode); - delete(URL_NODES, u1.getId(), aNode.getId(), 204); + deleteNode(aNode.getId()); List activitiesAgain = getMyActivities(); assertEquals("No activites should be created for non-file activities", activities, activitiesAgain); @@ -128,10 +132,12 @@ public class ActivitiesPostingTest extends AbstractSingleNetworkSiteTest @Test public void testNonSite() throws Exception { + setRequestContext(u1.getId()); + List activities = getMyActivities(); String folder1 = "nonSitefolder" + System.currentTimeMillis() + "_1"; //Create a folder outside a site - Folder createdFolder = createFolder(u1.getId(), Nodes.PATH_MY, folder1, null); + Folder createdFolder = createFolder(Nodes.PATH_MY, folder1, null); assertNotNull(createdFolder); String docName = "nonsite_d1.txt"; @@ -156,7 +162,8 @@ public class ActivitiesPostingTest extends AbstractSingleNetworkSiteTest { repoService.generateFeed(); - publicApiClient.setRequestContext(new RequestContext(u1.getId())); + setRequestContext(u1.getId()); + Map meParams = new HashMap<>(); meParams.put("who", String.valueOf(Activities.ActivityWho.me)); return publicApiClient.people().getActivities(u1.getId(), meParams).getList(); diff --git a/source/test-java/org/alfresco/rest/api/tests/AuthenticationsTest.java b/source/test-java/org/alfresco/rest/api/tests/AuthenticationsTest.java index 2efe94c174..ba537678d0 100644 --- a/source/test-java/org/alfresco/rest/api/tests/AuthenticationsTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/AuthenticationsTest.java @@ -27,8 +27,6 @@ package org.alfresco.rest.api.tests; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.People; import org.alfresco.rest.api.model.LoginTicket; @@ -39,14 +37,9 @@ import org.alfresco.rest.api.tests.client.PublicApiClient.Paging; import org.alfresco.rest.api.tests.client.data.Document; import org.alfresco.rest.api.tests.client.data.Folder; import org.alfresco.rest.api.tests.util.RestApiUtil; -import org.alfresco.service.cmr.security.MutableAuthenticationService; -import org.alfresco.service.cmr.security.PersonService; import org.apache.commons.codec.binary.Base64; -import org.junit.After; -import org.junit.Before; import org.junit.Test; -import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; @@ -60,51 +53,8 @@ public class AuthenticationsTest extends AbstractBaseApiTest { private static final String TICKETS_URL = "tickets"; private static final String TICKETS_API_NAME = "authentication"; - - private String user1; - private String user2; - private List users = new ArrayList<>(); - private MutableAuthenticationService authenticationService; - private PersonService personService; - - @Before - public void setup() throws Exception - { - authenticationService = applicationContext.getBean("authenticationService", MutableAuthenticationService.class); - personService = applicationContext.getBean("personService", PersonService.class); - - user1 = createUser("user1" + System.currentTimeMillis(), "user1Password"); - user2 = createUser("user2" + System.currentTimeMillis(), "user2Password"); - - users.add(user1); - users.add(user2); - AuthenticationUtil.clearCurrentSecurityContext(); - } - - @After - public void tearDown() throws Exception - { - AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser(); - for (final String user : users) - { - transactionHelper.doInTransaction(new RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - if (personService.personExists(user)) - { - authenticationService.deleteAuthentication(user); - personService.deletePerson(user); - } - return null; - } - }); - } - users.clear(); - AuthenticationUtil.clearCurrentSecurityContext(); - } - + + /** * Tests login (create ticket), logout (delete ticket), and validate (get ticket). * @@ -121,6 +71,7 @@ public class AuthenticationsTest extends AbstractBaseApiTest public void testCreateValidateDeleteTicket() throws Exception { Paging paging = getPaging(0, 100); + // Unauthorized call getAll(SiteEntityResource.class, null, paging, null, 401); @@ -188,9 +139,11 @@ public class AuthenticationsTest extends AbstractBaseApiTest /* * user2 login - Via Authorization header */ + + setRequestContext(user2); // User2 create a folder within his home folder (-my-) - Folder folderResp = createFolder(user2, Nodes.PATH_MY, "F2", null); + Folder folderResp = createFolder(Nodes.PATH_MY, "F2", null); assertNotNull(folderResp.getId()); getAll(getNodeChildrenUrl(Nodes.PATH_MY), null, paging, 401); 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 674a739da3..b7d038c2c9 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeApiTest.java @@ -39,20 +39,15 @@ import org.alfresco.repo.content.ContentLimitProvider.SimpleFixedLimitProvider; import org.alfresco.repo.content.MimetypeMap; import org.alfresco.repo.node.archive.NodeArchiveService; import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.model.NodeTarget; -import org.alfresco.rest.api.model.Site; import org.alfresco.rest.api.nodes.NodesEntityResource; -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.PublicApiClient; 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.PublicApiHttpClient.BinaryPayload; -import org.alfresco.rest.api.tests.client.RequestContext; import org.alfresco.rest.api.tests.client.data.Association; import org.alfresco.rest.api.tests.client.data.ContentInfo; import org.alfresco.rest.api.tests.client.data.Document; @@ -72,14 +67,12 @@ 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.PermissionService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.site.SiteVisibility; import org.alfresco.util.GUID; import org.alfresco.util.TempFileProvider; import org.json.simple.JSONObject; -import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -116,29 +109,7 @@ import java.util.UUID; public class NodeApiTest extends AbstractBaseApiTest { private static final String PROP_OWNER = "cm:owner"; - - TestNetwork networkOne; - - /** - * User one from network one - */ - private TestPerson userOneN1; - - /** - * User two from network one - */ - private TestPerson userTwoN1; - - /** - * Private site of user one from network one - */ - private Site userOneN1Site; - - private String user1; - private String user2; - private List users = new ArrayList<>(); - - protected MutableAuthenticationService authenticationService; + protected PersonService personService; protected JacksonUtil jacksonUtil; protected PermissionService permissionService; @@ -146,13 +117,12 @@ public class NodeApiTest extends AbstractBaseApiTest protected NodeArchiveService nodeArchiveService; protected NodeService nodeService; - private final String RUNID = System.currentTimeMillis()+""; - @Before public void setup() throws Exception { - authenticationService = applicationContext.getBean("authenticationService", MutableAuthenticationService.class); + super.setup(); + personService = applicationContext.getBean("personService", PersonService.class); jacksonUtil = new JacksonUtil(applicationContext.getBean("jsonHelper", JacksonHelper.class)); permissionService = applicationContext.getBean("permissionService", PermissionService.class); @@ -160,53 +130,8 @@ public class NodeApiTest extends AbstractBaseApiTest // TODO replace with V1 REST API for Trashcan nodeArchiveService = applicationContext.getBean("nodeArchiveService", NodeArchiveService.class); nodeService = applicationContext.getBean("nodeService", NodeService.class); - - user1 = createUser("user1" + System.currentTimeMillis()); - user2 = createUser("user2" + System.currentTimeMillis()); - - // to enable admin access via test calls - getOrCreateUser("admin", "admin"); - - // We just need to clean the on-premise-users, - // so the tests for the specific network would work. - users.add(user1); - users.add(user2); - - getTestFixture(false); - networkOne = getRepoService().createNetwork(NodeApiTest.class.getName().toLowerCase(), true); - networkOne.create(); - userOneN1 = networkOne.createUser(); - userTwoN1 = networkOne.createUser(); - - userOneN1Site = createSite(networkOne.getId(), userOneN1.getId(), SiteVisibility.PRIVATE); } - - @After - public void tearDown() throws Exception - { - deleteSite(networkOne.getId(), userOneN1.getId(), userOneN1Site.getId(), 204); - - AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser(); - for (final String user : users) - { - transactionHelper.doInTransaction(new RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - if (personService.personExists(user)) - { - authenticationService.deleteAuthentication(user); - personService.deletePerson(user); - } - return null; - } - }); - } - users.clear(); - AuthenticationUtil.clearCurrentSecurityContext(); - } - + /** * Tests get document library children. *

GET:

@@ -218,22 +143,24 @@ public class NodeApiTest extends AbstractBaseApiTest String userOneId = userOneN1.getId(); String userTwoId = userTwoN1.getId(); - String docLibNodeId = getSiteContainerNodeId(networkOne.getId(), userOneId, userOneN1Site.getId(), "documentLibrary"); + setRequestContext(userOneId); + + String docLibNodeId = getSiteContainerNodeId(networkOne.getId(), userOneId, userOneN1Site.getSiteId(), "documentLibrary"); String folder1 = "folder" + System.currentTimeMillis() + "_1"; - createFolder(userOneId, docLibNodeId, folder1, null).getId(); + createFolder(docLibNodeId, folder1, null).getId(); String folder2 = "folder" + System.currentTimeMillis() + "_2"; - createFolder(userOneId, docLibNodeId, folder2, null).getId(); + createFolder(docLibNodeId, folder2, null).getId(); String content1 = "content" + System.currentTimeMillis() + "_1"; - createTextFile(userOneId, docLibNodeId, content1, "The quick brown fox jumps over the lazy dog 1.").getId(); + createTextFile(docLibNodeId, content1, "The quick brown fox jumps over the lazy dog 1.").getId(); String content2 = "content" + System.currentTimeMillis() + "_2"; - createTextFile(userOneId, docLibNodeId, content2, "The quick brown fox jumps over the lazy dog 2.").getId(); + createTextFile(docLibNodeId, content2, "The quick brown fox jumps over the lazy dog 2.").getId(); String forum1 = "forum" + System.currentTimeMillis() + "_1"; - createNode(userOneId, docLibNodeId, forum1, "fm:topic", null); + createNode(docLibNodeId, forum1, "fm:topic", null); Paging paging = getPaging(0, 100); HttpResponse response = getAll(getNodeChildrenUrl(docLibNodeId), userOneId, paging, 200); @@ -340,12 +267,15 @@ public class NodeApiTest extends AbstractBaseApiTest assertEquals(100, expectedPaging.getMaxItems().intValue()); assertFalse(expectedPaging.getHasMoreItems().booleanValue()); + setRequestContext(userTwoId); // userTwoN1 tries to access userOneN1's docLib AuthenticationUtil.setFullyAuthenticatedUser(userTwoId); paging = getPaging(0, Integer.MAX_VALUE); getAll(getNodeChildrenUrl(docLibNodeId), userTwoId, paging, 403); + setRequestContext(userOneId); + // -ve test - paging (via list children) cannot have skipCount < 0 paging = getPaging(-1, 4); getAll(getNodeChildrenUrl(docLibNodeId), userOneId, paging, orderBy, 400); @@ -364,7 +294,9 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testListMyFilesChildren() throws Exception { - String myNodeId = getMyNodeId(user1); + setRequestContext(user1); + + String myNodeId = getMyNodeId(); String myChildrenUrl = getNodeChildrenUrl(Nodes.PATH_MY); String rootChildrenUrl = getNodeChildrenUrl(Nodes.PATH_ROOT); @@ -372,21 +304,21 @@ public class NodeApiTest extends AbstractBaseApiTest Map props = new HashMap<>(1); props.put("cm:title", "This is folder 1"); String folder1 = "folder " + System.currentTimeMillis() + " 1"; - String folder1_Id = createFolder(user1, myNodeId, folder1, props).getId(); + String folder1_Id = createFolder(myNodeId, folder1, props).getId(); String contentF1 = "content" + System.currentTimeMillis() + " in folder 1"; - String contentF1_Id = createTextFile(user1, folder1_Id, contentF1, "The quick brown fox jumps over the lazy dog 1.").getId(); + String contentF1_Id = createTextFile(folder1_Id, contentF1, "The quick brown fox jumps over the lazy dog 1.").getId(); props = new HashMap<>(1); props.put("cm:title", "This is folder 2"); String folder2 = "folder " + System.currentTimeMillis() + " 2"; - String folder2_Id = createFolder(user1, myNodeId, folder2, props).getId(); + String folder2_Id = createFolder(myNodeId, folder2, props).getId(); String contentF2 = "content" + System.currentTimeMillis() + " in folder 2.txt"; - String contentF2_Id = createTextFile(user1, folder2_Id, contentF2, "The quick brown fox jumps over the lazy dog 2.").getId(); + String contentF2_Id = createTextFile(folder2_Id, contentF2, "The quick brown fox jumps over the lazy dog 2.").getId(); String content1 = "content" + System.currentTimeMillis() + " 1.txt"; - String content1_Id = createTextFile(user1, myNodeId, content1, "The quick brown fox jumps over the lazy dog.").getId(); + String content1_Id = createTextFile(myNodeId, content1, "The quick brown fox jumps over the lazy dog.").getId(); props = new HashMap<>(); props.put(PROP_OWNER, user1); @@ -595,29 +527,30 @@ public class NodeApiTest extends AbstractBaseApiTest { String userId = userOneN1.getId(); - publicApiClient.setRequestContext(new RequestContext(userOneN1.getId())); + setRequestContext(userId); + PublicApiClient.Sites sitesProxy = publicApiClient.sites(); - sitesProxy.createSiteMember(userOneN1Site.getId(), new SiteMember(userTwoN1.getId(), SiteRole.SiteConsumer.toString())); + sitesProxy.createSiteMember(userOneN1Site.getSiteId(), new SiteMember(userTwoN1.getId(), SiteRole.SiteConsumer.toString())); - String docLibNodeId = getSiteContainerNodeId(networkOne.getId(), userOneN1.getId(), userOneN1Site.getId(), "documentLibrary"); + String docLibNodeId = getSiteContainerNodeId(networkOne.getId(), userOneN1.getId(), userOneN1Site.getSiteId(), "documentLibrary"); // /Company Home/Sites/RandomSite/documentLibrary/folder_A String folderA = "folder" + System.currentTimeMillis() + "_A"; - String folderA_Id = createFolder(userId, docLibNodeId, folderA).getId(); + String folderA_Id = createFolder(docLibNodeId, folderA).getId(); // /Company Home/Sites/RandomSite/documentLibrary/folder_A/folder_B String folderB = "folder" + System.currentTimeMillis() + "_B"; - String folderB_Id = createFolder(userId, folderA_Id, folderB).getId(); + String folderB_Id = createFolder(folderA_Id, folderB).getId(); NodeRef folderB_Ref = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folderB_Id); // /Company Home/Sites/RandomSite/documentLibrary/folder_A/folder_B/folder_C String folderC = "folder" + System.currentTimeMillis() + "_C"; - String folderC_Id = createFolder(userId, folderB_Id, folderC).getId(); + String folderC_Id = createFolder(folderB_Id, folderC).getId(); NodeRef folderC_Ref = new NodeRef(StoreRef.STORE_REF_WORKSPACE_SPACESSTORE, folderC_Id); // /Company Home/Sites/RandomSite/documentLibrary/folder_A/folder_B/folder_C/content String content = "content" + System.currentTimeMillis(); - String content1_Id = createTextFile(userId, folderC_Id, content, "The quick brown fox jumps over the lazy dog.").getId(); + String content1_Id = createTextFile(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 ?) @@ -642,13 +575,15 @@ public class NodeApiTest extends AbstractBaseApiTest assertEquals(7, pathElements.size()); assertEquals("Company Home", pathElements.get(0).getName()); assertEquals("Sites", pathElements.get(1).getName()); - assertEquals(userOneN1Site.getId(), pathElements.get(2).getName()); + assertEquals(userOneN1Site.getSiteId(), pathElements.get(2).getName()); assertEquals("documentLibrary", pathElements.get(3).getName()); assertEquals(folderA, pathElements.get(4).getName()); assertEquals(folderB, pathElements.get(5).getName()); assertEquals(folderC, pathElements.get(6).getName()); // Try the above tests with userTwoN1 (site consumer) + setRequestContext(userTwoN1.getId()); + AuthenticationUtil.setFullyAuthenticatedUser(userTwoN1.getId()); response = getSingle(NodesEntityResource.class, userTwoN1.getId(), content1_Id, params, 200); node = jacksonUtil.parseEntry(response.getJsonResponse(), Document.class); @@ -674,7 +609,7 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testGetNodeInfo() throws Exception { - AuthenticationUtil.setFullyAuthenticatedUser(user1); + setRequestContext(user1); HttpResponse response = getSingle(NodesEntityResource.class, user1, Nodes.PATH_ROOT, null, 200); Node node = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); @@ -692,18 +627,18 @@ public class NodeApiTest extends AbstractBaseApiTest // /Company Home/User Homes/user/folder_A String folderA = "folder" + System.currentTimeMillis() + "_A"; - String folderA_Id = createFolder(user1, myFilesNodeId, folderA).getId(); + String folderA_Id = createFolder(myFilesNodeId, folderA).getId(); // /Company Home/User Homes/user/folder_A/folder_B String folderB = "folder" + System.currentTimeMillis() + "_B"; - String folderB_Id = createFolder(user1, folderA_Id, folderB).getId(); + String folderB_Id = createFolder(folderA_Id, folderB).getId(); // /Company Home/User Homes/user/folder_A/folder_B/content String title = "test title"; Map docProps = new HashMap<>(); docProps.put("cm:title", title); String contentName = "content " + System.currentTimeMillis() + ".txt"; - String content1Id = createTextFile(user1, folderB_Id, contentName, "The quick brown fox jumps over the lazy dog.", "UTF-8", docProps).getId(); + String content1Id = createTextFile(folderB_Id, contentName, "The quick brown fox jumps over the lazy dog.", "UTF-8", docProps).getId(); // get node info @@ -774,7 +709,7 @@ public class NodeApiTest extends AbstractBaseApiTest // test path with utf-8 encoded param (eg. ¢ => ) String folderC = "folder" + System.currentTimeMillis() + " ¢"; - String folderC_Id = createFolder(user1, folderB_Id, folderC).getId(); + String folderC_Id = createFolder(folderB_Id, folderC).getId(); params = Collections.singletonMap(Nodes.PARAM_RELATIVE_PATH, "/"+folderA+"/"+folderB+"/"+folderC); response = getSingle(NodesEntityResource.class, user1, Nodes.PATH_MY, params, 200); @@ -813,6 +748,8 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testGetNodeWithKnownAlias() throws Exception { + setRequestContext(user1); + HttpResponse response = getSingle(NodesEntityResource.class, user1, Nodes.PATH_ROOT, null, 200); Node node = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); assertEquals("Company Home", node.getName()); @@ -841,9 +778,10 @@ public class NodeApiTest extends AbstractBaseApiTest assertNull(node.getPath()); //Delete user1's home - delete(URL_NODES, "admin", myFilesNodeId, 204); - - AuthenticationUtil.setFullyAuthenticatedUser(user1); + setRequestContext(DEFAULT_ADMIN); + deleteNode(myFilesNodeId); + + setRequestContext(user1); getSingle(NodesEntityResource.class, user1, Nodes.PATH_MY, null, 404); // Not found } @@ -857,7 +795,9 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testGuessMimeTypeAndEncoding() throws Exception { - String fId = createFolder(user1, getMyNodeId(user1), "test-folder-guess-"+System.currentTimeMillis()).getId(); + setRequestContext(user1); + + String fId = createFolder(getMyNodeId(), "test-folder-guess-"+System.currentTimeMillis()).getId(); // create empty files @@ -1038,7 +978,7 @@ public class NodeApiTest extends AbstractBaseApiTest assertEquals("UTF-8", contentInfo.getEncoding()); // cleanup - delete(URL_NODES, user1, fId, 204); + deleteNode(fId); } /** @@ -1049,6 +989,8 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testUploadToMyFiles() throws Exception { + setRequestContext(user1); + final String fileName = "quick.pdf"; final File file = getResourceFile(fileName); @@ -1221,13 +1163,15 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testUploadToSite() throws Exception { + setRequestContext(userOneN1.getId()); + final String fileName = "quick-1.txt"; final File file = getResourceFile(fileName); - String docLibNodeId = getSiteContainerNodeId(networkOne.getId(), userOneN1.getId(), userOneN1Site.getId(), "documentLibrary"); + String docLibNodeId = getSiteContainerNodeId(networkOne.getId(), userOneN1.getId(), userOneN1Site.getSiteId(), "documentLibrary"); String folderA = "folder" + System.currentTimeMillis() + "_A"; - String folderA_id = createFolder(userOneN1.getId(), docLibNodeId, folderA).getId(); + String folderA_id = createFolder(docLibNodeId, folderA).getId(); Paging paging = getPaging(0, Integer.MAX_VALUE); HttpResponse response = getAll(getNodeChildrenUrl(folderA_id), userOneN1.getId(), paging, 200); @@ -1398,60 +1342,63 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testDelete() throws Exception { + setRequestContext(user1); + long runId = System.currentTimeMillis(); - String myNodeId = getMyNodeId(user1); + String myNodeId = getMyNodeId(); - String content1Id = createTextFile(user1, myNodeId, "content" + runId + "_1", "The quick brown fox jumps over the lazy dog.").getId(); + String content1Id = createTextFile(myNodeId, "content" + runId + "_1", "The quick brown fox jumps over the lazy dog.").getId(); // delete file - delete(URL_NODES, user1, content1Id, 204); + deleteNode(content1Id); assertTrue(existsArchiveNode(user1, content1Id)); // -ve test - delete(URL_NODES, user1, content1Id, 404); + deleteNode(content1Id, 404); - String folder1Id = createFolder(user1, myNodeId, "folder " + runId + "_1").getId(); - String folder2Id = createFolder(user1, folder1Id, "folder " + runId + "_2").getId(); + String folder1Id = createFolder(myNodeId, "folder " + runId + "_1").getId(); + String folder2Id = createFolder(folder1Id, "folder " + runId + "_2").getId(); - String content2Id = createTextFile(user1, folder2Id, "content" + runId + "_2", "The quick brown fox jumps over the lazy dog.").getId(); + String content2Id = createTextFile(folder2Id, "content" + runId + "_2", "The quick brown fox jumps over the lazy dog.").getId(); // cascade delete folder - delete(URL_NODES, user1, folder1Id, 204); + deleteNode(folder1Id); assertTrue(existsArchiveNode(user1, folder1Id)); assertTrue(existsArchiveNode(user1, folder2Id)); assertTrue(existsArchiveNode(user1, content2Id)); // -ve test - delete(URL_NODES, user1, folder2Id, 404); - delete(URL_NODES, user1, content2Id, 404); + deleteNode(folder2Id, 404); + deleteNode(content2Id, 404); // -ve test - String rootNodeId = getRootNodeId(user1); - delete(URL_NODES, user1, rootNodeId, 403); + String rootNodeId = getRootNodeId(); + deleteNode(rootNodeId, 403); // // permanently delete - ie. bypass trashcan (archive store) // - String folder3Id = createFolder(user1, myNodeId, "folder " + runId + "_3").getId(); - String folder4Id = createFolder(user1, folder3Id, "folder " + runId + "_4").getId(); - - Map params = Collections.singletonMap("permanent", "true"); - delete(URL_NODES, user1, folder3Id, params, 204); + String folder3Id = createFolder(myNodeId, "folder " + runId + "_3").getId(); + String folder4Id = createFolder(folder3Id, "folder " + runId + "_4").getId(); + + deleteNode(folder3Id, true, 204); assertFalse(existsArchiveNode(user1, folder3Id)); assertFalse(existsArchiveNode(user1, folder4Id)); - String sharedNodeId = getSharedNodeId(user1); - String folder5Id = createFolder(user1, sharedNodeId, "folder " + runId + "_5").getId(); + String sharedNodeId = getSharedNodeId(); + String folder5Id = createFolder(sharedNodeId, "folder " + runId + "_5").getId(); // -ve test - another user cannot delete - delete(URL_NODES, user2, folder5Id, 403); + setRequestContext(user2); + deleteNode(folder5Id, 403); + setRequestContext(user1); Map props = new HashMap<>(); props.put(PROP_OWNER, user2); @@ -1463,43 +1410,35 @@ public class NodeApiTest extends AbstractBaseApiTest assertEquals(user2, ((Map)nodeResp.getProperties().get(PROP_OWNER)).get("id")); // -ve test - user1 can no longer delete - delete(URL_NODES, user1, folder5Id, 403); + deleteNode(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); // -ve test - non-owner cannot bypass trashcan - params = Collections.singletonMap("permanent", "true"); - delete(URL_NODES, user1, folder5Id, params, 403); + deleteNode(folder5Id, true, 403); // user1 has permission to delete (via trashcan) - delete(URL_NODES, user1, folder5Id, 204); + deleteNode(folder5Id); // admin can permanently delete - String folder6Id = createFolder(user1, sharedNodeId, "folder " + runId + "_6").getId(); - - params = Collections.singletonMap("permanent", "true"); - - // TODO improve - admin-related tests - publicApiClient.setRequestContext(new RequestContext("-default-", "admin", "admin")); - response = publicApiClient.delete(getScope(), 1, URL_NODES, folder6Id, null, null, params); - checkStatus(204, response.getStatusCode()); + String folder6Id = createFolder(sharedNodeId, "folder " + runId + "_6").getId(); + + setRequestContext(DEFAULT_ADMIN); + + deleteNode(folder6Id, true, 204); // -ve - cannot delete Company Home root node - publicApiClient.setRequestContext(new RequestContext("-default-", "admin", "admin")); - response = publicApiClient.delete(getScope(), 1, URL_NODES, rootNodeId, null, null, params); - checkStatus(403, response.getStatusCode()); + deleteNode(rootNodeId, true, 403); - params = new HashMap<>(); + Map params = new HashMap<>(); params.put(Nodes.PARAM_RELATIVE_PATH, "/Sites"); response = getSingle(NodesEntityResource.class, user1, rootNodeId, params, 200); nodeResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); String sitesNodeId = nodeResp.getId(); // -ve - cannot delete Sites node - publicApiClient.setRequestContext(new RequestContext("-default-", "admin", "admin")); - response = publicApiClient.delete(getScope(), 1, URL_NODES, sitesNodeId, null, null, params); - checkStatus(403, response.getStatusCode()); + deleteNode(sitesNodeId, true, 403); params = new HashMap<>(); params.put(Nodes.PARAM_RELATIVE_PATH, "/Data Dictionary"); @@ -1508,9 +1447,7 @@ public class NodeApiTest extends AbstractBaseApiTest String ddNodeId = nodeResp.getId(); // -ve - cannot delete Data Dictionary node - publicApiClient.setRequestContext(new RequestContext("-default-", "admin", "admin")); - response = publicApiClient.delete(getScope(), 1, URL_NODES, ddNodeId, null, null, params); - checkStatus(403, response.getStatusCode()); + deleteNode(ddNodeId, true, 403); } private boolean existsArchiveNode(String userId, String nodeId) @@ -1537,21 +1474,23 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testMove() throws Exception { + setRequestContext(user1); + // create folder f1 - Folder folderResp = createFolder(user1, Nodes.PATH_MY, "f1"); + Folder folderResp = createFolder(Nodes.PATH_MY, "f1"); String f1Id = folderResp.getId(); // create folder f2 - folderResp = createFolder(user1, Nodes.PATH_MY, "f2"); + folderResp = createFolder(Nodes.PATH_MY, "f2"); String f2Id = folderResp.getId(); // create doc d1 String d1Name = "content" + System.currentTimeMillis() + "_1"; - String d1Id = createTextFile(user1, f1Id, d1Name, "The quick brown fox jumps over the lazy dog 1.").getId(); + String d1Id = createTextFile(f1Id, d1Name, "The quick brown fox jumps over the lazy dog 1.").getId(); // create doc d2 String d2Name = "content" + System.currentTimeMillis() + "_2"; - String d2Id = createTextFile(user1, f2Id, d2Name, "The quick brown fox jumps over the lazy dog 2.").getId(); + String d2Id = createTextFile(f2Id, d2Name, "The quick brown fox jumps over the lazy dog 2.").getId(); // move file (without rename) @@ -1606,10 +1545,10 @@ public class NodeApiTest extends AbstractBaseApiTest tgt.setTargetParentId(d2Id); post("nodes/"+d1Id+"/move", user1, toJsonAsStringNonNull(tgt), null, 400); - String rootNodeId = getRootNodeId(user1); + String rootNodeId = getRootNodeId(); // create folder f3 (sub-folder of f2) - folderResp = createFolder(user1, f2Id, "f3"); + folderResp = createFolder(f2Id, "f3"); String f3Id = folderResp.getId(); // can't create cycle (move into own subtree) @@ -1624,20 +1563,19 @@ public class NodeApiTest extends AbstractBaseApiTest AuthenticationUtil.setFullyAuthenticatedUser(user2); - String my2NodeId = getMyNodeId(user2); + String my2NodeId = getMyNodeId(); // no (write/delete) permissions to move source tgt = new NodeTarget(); tgt.setTargetParentId(my2NodeId); post("nodes/"+f1Id+"/move", user2, toJsonAsStringNonNull(tgt), null, 403); - - // TODO improve - admin-related tests - + // -ve - cannot move (delete) Company Home root node - publicApiClient.setRequestContext(new RequestContext("-default-", "admin", "admin")); - response = publicApiClient.post(getScope(), "nodes/"+rootNodeId+"/move", null, null, null, toJsonAsStringNonNull(tgt)); - checkStatus(403, response.getStatusCode()); - + setRequestContext(DEFAULT_ADMIN); + post("nodes/"+rootNodeId+"/move", DEFAULT_ADMIN, toJsonAsStringNonNull(tgt), null, 403); + + setRequestContext("user1"); + Map params = new HashMap<>(); params.put(Nodes.PARAM_RELATIVE_PATH, "/Sites"); response = getSingle(NodesEntityResource.class, user1, rootNodeId, params, 200); @@ -1645,10 +1583,11 @@ public class NodeApiTest extends AbstractBaseApiTest String sitesNodeId = nodeResp.getId(); // -ve - cannot move (delete) Sites node - publicApiClient.setRequestContext(new RequestContext("-default-", "admin", "admin")); - response = publicApiClient.post(getScope(), "nodes/"+sitesNodeId+"/move", null, null, null, toJsonAsStringNonNull(tgt)); - checkStatus(403, response.getStatusCode()); + setRequestContext(DEFAULT_ADMIN); + post("nodes/"+sitesNodeId+"/move", DEFAULT_ADMIN, toJsonAsStringNonNull(tgt), null, 403); + setRequestContext("user1"); + params = new HashMap<>(); params.put(Nodes.PARAM_RELATIVE_PATH, "/Data Dictionary"); response = getSingle(NodesEntityResource.class, user1, rootNodeId, params, 200); @@ -1656,9 +1595,8 @@ public class NodeApiTest extends AbstractBaseApiTest String ddNodeId = nodeResp.getId(); // -ve - cannot move (delete) Data Dictionary node - publicApiClient.setRequestContext(new RequestContext("-default-", "admin", "admin")); - response = publicApiClient.post(getScope(), "nodes/"+ddNodeId+"/move", null, null, null, toJsonAsStringNonNull(tgt)); - checkStatus(403, response.getStatusCode()); + setRequestContext(DEFAULT_ADMIN); + post("nodes/"+ddNodeId+"/move", DEFAULT_ADMIN, toJsonAsStringNonNull(tgt), null, 403); // -ve test - cannot move to multiple destinations in single POST call (unsupported) List nodeDestinations = new ArrayList<>(2); @@ -1680,21 +1618,23 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testCopy() throws Exception { + setRequestContext(user1); + // create folder - Folder folderResp = createFolder(user1, Nodes.PATH_MY, "fsource"); + Folder folderResp = createFolder(Nodes.PATH_MY, "fsource"); String sourceId = folderResp.getId(); // create folder - folderResp = createFolder(user1, Nodes.PATH_MY, "ftarget"); + folderResp = createFolder(Nodes.PATH_MY, "ftarget"); String targetId = folderResp.getId(); // create doc d1 String d1Name = "content" + System.currentTimeMillis() + "_1"; - String d1Id = createTextFile(user1, sourceId, d1Name, "The quick brown fox jumps over the lazy dog 1.").getId(); + String d1Id = createTextFile(sourceId, d1Name, "The quick brown fox jumps over the lazy dog 1.").getId(); // create doc d2 String d2Name = "content" + System.currentTimeMillis() + "_2"; - String d2Id = createTextFile(user1, sourceId, d2Name, "The quick brown fox jumps over the lazy dog 2.").getId(); + String d2Id = createTextFile(sourceId, d2Name, "The quick brown fox jumps over the lazy dog 2.").getId(); Map body = new HashMap<>(); body.put("targetParentId", targetId); @@ -1751,7 +1691,7 @@ public class NodeApiTest extends AbstractBaseApiTest tgt.setTargetParentId(d2Id); post("nodes/"+d1Id+"/copy", user1, toJsonAsStringNonNull(tgt), null, 400); - String rootNodeId = getRootNodeId(user1); + String rootNodeId = getRootNodeId(); // no (write/create) permissions to copy to target tgt = new NodeTarget(); @@ -1773,8 +1713,10 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testCopySite() throws Exception { + setRequestContext(userOneN1.getId()); + // create folder - Folder folderResp = createFolder(userOneN1.getId(), Nodes.PATH_MY, "siteCopytarget"); + Folder folderResp = createFolder(Nodes.PATH_MY, "siteCopytarget"); String targetId = folderResp.getId(); Map body = new HashMap<>(); @@ -1783,7 +1725,7 @@ public class NodeApiTest extends AbstractBaseApiTest //test that you can't copy a site post("nodes/"+userOneN1Site.getGuid()+"/copy", userOneN1.getId(), toJsonAsStringNonNull(body), null, 422); - String docLibNodeId = getSiteContainerNodeId(networkOne.getId(), userOneN1.getId(), userOneN1Site.getId(), "documentLibrary"); + String docLibNodeId = getSiteContainerNodeId(networkOne.getId(), userOneN1.getId(), userOneN1Site.getSiteId(), "documentLibrary"); //test that you can't copy a site doclib post("nodes/"+docLibNodeId+"/copy", userOneN1.getId(), toJsonAsStringNonNull(body), null, 422); @@ -1802,6 +1744,8 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testMoveCopyBetweenSites() throws Exception { + setRequestContext(userOneN1.getId()); + /* * Precondition - create two sites, invite users, create folders */ @@ -1811,11 +1755,11 @@ public class NodeApiTest extends AbstractBaseApiTest inviteToSite(user1Site, userTwoN1, SiteRole.SiteCollaborator); // Get user1Site's docLib node id - final String user1SiteDocLibNodeId = getSiteDocLib(user1Site).getId(); + final String user1SiteDocLibNodeId = getSiteContainerNodeId(user1Site.getNetworkId(), userOneN1.getId(), user1Site.getSiteId(), "documentLibrary"); // userOneN1 creates a folder in the docLib of his site (user1Site) String user1Folder = "folder" + System.currentTimeMillis() + "_user1"; - String user1FolderNodeId = createFolder(userOneN1.getId(), user1SiteDocLibNodeId, user1Folder, null).getId(); + String user1FolderNodeId = createFolder(user1SiteDocLibNodeId, user1Folder, null).getId(); AuthenticationUtil.setFullyAuthenticatedUser(userTwoN1.getId()); // userTwoN1 creates a public site and adds userOneN1 as a site collaborator @@ -1823,20 +1767,24 @@ public class NodeApiTest extends AbstractBaseApiTest inviteToSite(user2Site, userOneN1, SiteRole.SiteCollaborator); // Get user2Site's docLib node id - final String user2SiteDocLibNodeId = getSiteDocLib(user2Site).getId(); + final String user2SiteDocLibNodeId = getSiteContainerNodeId(user2Site.getNetworkId(), userTwoN1.getId(), user2Site.getSiteId(), "documentLibrary"); + + setRequestContext(userTwoN1.getId()); // userTwoN1 creates 2 folders within the docLib of the user1Site String user2Folder1 = "folder1" + System.currentTimeMillis() + "_user2"; - String user2FolderNodeId = createFolder(userTwoN1.getId(), user1SiteDocLibNodeId, user2Folder1, null).getId(); + String user2FolderNodeId = createFolder(user1SiteDocLibNodeId, user2Folder1, null).getId(); String user2Folder2 = "folder2" + System.currentTimeMillis() + "_user2"; - String user2Folder2NodeId = createFolder(userTwoN1.getId(), user1SiteDocLibNodeId, user2Folder2, null).getId(); + String user2Folder2NodeId = createFolder(user1SiteDocLibNodeId, user2Folder2, null).getId(); /* * Test move between sites */ // userOneN1 moves the folder created by userTwoN1 to the user2Site's docLib - AuthenticationUtil.setFullyAuthenticatedUser(userOneN1.getId()); + + setRequestContext(userTwoN1.getId()); + NodeTarget target = new NodeTarget(); target.setTargetParentId(user2SiteDocLibNodeId); HttpResponse response = post("nodes/" + user2FolderNodeId + "/move", userOneN1.getId(), toJsonAsStringNonNull(target), null, 200); @@ -1876,8 +1824,8 @@ public class NodeApiTest extends AbstractBaseApiTest assertEquals(user2SiteDocLibNodeId, copyFolderResp.getParentId()); // userOneN1 tries to undo the copy (hard deletes the created copy) - Map params = Collections.singletonMap("permanent", "true"); - delete("nodes", userOneN1.getId(), copyFolderResp.getId(), params, 204); + deleteNode( copyFolderResp.getId(), true, 204); + // Check it's deleted getSingle("nodes", userOneN1.getId(), copyFolderResp.getId(), 404); } @@ -1890,14 +1838,16 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testCreateFolder() throws Exception { - String myNodeId = getMyNodeId(user1); + setRequestContext(user1); + + String myNodeId = getMyNodeId(); UserInfo expectedUser = new UserInfo(user1, user1+" "+user1); String postUrl = getNodeChildrenUrl(myNodeId); // create folder - Folder folderResp = createFolder(user1, myNodeId, "f1"); + Folder folderResp = createFolder(myNodeId, "f1"); String f1Id = folderResp.getId(); Folder f1 = new Folder(); @@ -1918,7 +1868,7 @@ public class NodeApiTest extends AbstractBaseApiTest props.put("cm:title","my folder title"); props.put("cm:description","my folder description"); - folderResp = createFolder(user1, f1Id, "f2", props); + folderResp = createFolder(f1Id, "f2", props); String f2Id = folderResp.getId(); Folder f2 = new Folder(); @@ -2055,13 +2005,15 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testChildrenAssocType() throws Exception { - String myNodeId = getMyNodeId(user1); + setRequestContext(user1); + + String myNodeId = getMyNodeId(); String fId = null; try { - fId = createFolder(user1, myNodeId, "testChildrenAssocType folder").getId(); + fId = createFolder(myNodeId, "testChildrenAssocType folder").getId(); Node nodeUpdate = new Node(); nodeUpdate.setAspectNames(Collections.singletonList(ASPECT_CM_PREFERENCES)); @@ -2159,7 +2111,7 @@ public class NodeApiTest extends AbstractBaseApiTest // some cleanup if (fId != null) { - delete(URL_NODES, user1, fId, 204); + deleteNode(fId); } } } @@ -2169,7 +2121,9 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testListChildrenIsFileIsFolderFilter() throws Exception { - String myNodeId = getMyNodeId(user1); + setRequestContext(user1); + + String myNodeId = getMyNodeId(); String myChildrenUrl = getNodeChildrenUrl(myNodeId); long timeNow = System.currentTimeMillis(); @@ -2183,14 +2137,14 @@ public class NodeApiTest extends AbstractBaseApiTest for (int i = 1; i <= folderCnt; i++) { - folderIds.add(createFolder(user1, myNodeId, "folder "+i+" "+timeNow).getId()); + folderIds.add(createFolder(myNodeId, "folder "+i+" "+timeNow).getId()); } // create some files List fileIds = new ArrayList<>(fileCnt); for (int i = 1; i <= fileCnt; i++) { - fileIds.add(createTextFile(user1, myNodeId, "file "+i+" "+timeNow, "The quick brown fox jumps over the lazy dog "+i).getId()); + fileIds.add(createTextFile(myNodeId, "file "+i+" "+timeNow, "The quick brown fox jumps over the lazy dog "+i).getId()); } // create some nodes (cmobject) @@ -2346,16 +2300,16 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testLinkCRUD() throws Exception { - AuthenticationUtil.setFullyAuthenticatedUser(user1); + setRequestContext(user1); - String myNodeId = getMyNodeId(user1); + String myNodeId = getMyNodeId(); UserInfo expectedUser = new UserInfo(user1, user1+" "+user1); String myChildrenUrl = getNodeChildrenUrl(myNodeId); long timeNow = System.currentTimeMillis(); // create folder f1 - Folder folderResp = createFolder(user1, myNodeId, "f1 "+timeNow); + Folder folderResp = createFolder(myNodeId, "f1 "+timeNow); String f1Id = folderResp.getId(); // create empty file d1 in f1 @@ -2368,7 +2322,7 @@ public class NodeApiTest extends AbstractBaseApiTest String d1Id = documentResp.getId(); // create folder f2 - folderResp = createFolder(user1, myNodeId, "f2 "+timeNow); + folderResp = createFolder(myNodeId, "f2 "+timeNow); String f2Id = folderResp.getId(); // create folder link node in f2 (pointing to f1) @@ -2378,7 +2332,7 @@ public class NodeApiTest extends AbstractBaseApiTest Map props = new HashMap<>(); props.put("cm:destination", f1Id); - Node nodeResp = createNode(user1, f2Id, nodeName, nodeType, props); + Node nodeResp = createNode(f2Id, nodeName, nodeType, props); String n1Id = nodeResp.getId(); Node n1 = new Node(); @@ -2406,7 +2360,7 @@ public class NodeApiTest extends AbstractBaseApiTest props = new HashMap<>(); props.put("cm:destination", d1Id); - nodeResp = createNode(user1, f2Id, nodeName, nodeType, props); + nodeResp = createNode(f2Id, nodeName, nodeType, props); String n2Id = nodeResp.getId(); Node n2 = new Node(); @@ -2481,10 +2435,10 @@ public class NodeApiTest extends AbstractBaseApiTest // delete link - delete(URL_NODES, user1, n1Id, 204); + deleteNode(n1Id); // -ve test - delete - cannot delete nonexistent link - delete(URL_NODES, user1, n1Id, 404); + deleteNode(n1Id, 404); // -ve test - create - name is mandatory Node invalid = new Node(); @@ -2529,9 +2483,9 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testCreateEmptyFile() throws Exception { - AuthenticationUtil.setFullyAuthenticatedUser(user1); + setRequestContext(user1); - String myNodeId = getMyNodeId(user1); + String myNodeId = getMyNodeId(); UserInfo expectedUser = new UserInfo(user1, user1+" "+user1); @@ -2669,9 +2623,9 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testUpdateNodeInfo() throws Exception { - AuthenticationUtil.setFullyAuthenticatedUser(user1); + setRequestContext(user1); - String myNodeId = getMyNodeId(user1); + String myNodeId = getMyNodeId(); UserInfo expectedUser = new UserInfo(user1, user1+" "+user1); @@ -2680,7 +2634,7 @@ public class NodeApiTest extends AbstractBaseApiTest String folderName = "My Folder"; // create folder - Folder folderResp = createFolder(user1, myNodeId, folderName); + Folder folderResp = createFolder(myNodeId, folderName); String fId = folderResp.getId(); @@ -2858,7 +2812,7 @@ public class NodeApiTest extends AbstractBaseApiTest // -ve test - try to move to a different parent using PUT (note: should use new POST /nodes/{nodeId}/move operation instead) - folderResp = createFolder(user1, myNodeId, "folder 2"); + folderResp = createFolder(myNodeId, "folder 2"); String f2Id = folderResp.getId(); fUpdate = new Folder(); @@ -2886,9 +2840,11 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testUpdateOwner() throws Exception { + setRequestContext(user1); + // create folder f1 String folderName = "f1 "+System.currentTimeMillis(); - Folder folderResp = createFolder(user1, Nodes.PATH_SHARED, folderName); + Folder folderResp = createFolder(Nodes.PATH_SHARED, folderName); String f1Id = folderResp.getId(); assertNull(user1, folderResp.getProperties()); // owner is implied @@ -2906,7 +2862,7 @@ public class NodeApiTest extends AbstractBaseApiTest // create doc d1 String d1Name = "content1 " + System.currentTimeMillis(); - String d1Id = createTextFile(user1, f1Id, d1Name, "The quick brown fox jumps over the lazy dog.").getId(); + String d1Id = createTextFile(f1Id, d1Name, "The quick brown fox jumps over the lazy dog.").getId(); // get node info response = getSingle(NodesEntityResource.class, user1, d1Id, null, 200); @@ -2979,11 +2935,11 @@ public class NodeApiTest extends AbstractBaseApiTest assertEquals(user2, ((Map)documentResp.getProperties().get(PROP_OWNER)).get("id")); // -ve test - user2 cannot delete the test folder/file - TODO is that expected ? - delete(URL_NODES, user2, f1Id, 403); - - AuthenticationUtil.setFullyAuthenticatedUser(user1); - - delete(URL_NODES, user1, f1Id, 204); + setRequestContext(user2); + deleteNode(f1Id, 403); + + setRequestContext(user1); + deleteNode(f1Id); } @@ -2995,16 +2951,16 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testUpdateFileWithBinaryUpload() throws Exception { - AuthenticationUtil.setFullyAuthenticatedUser(user1); + setRequestContext(user1); - String myNodeId = getMyNodeId(user1); + String myNodeId = getMyNodeId(); String folderName = "f1 "+System.currentTimeMillis(); - Folder folderResp = createFolder(user1, myNodeId, folderName); + Folder folderResp = createFolder(myNodeId, folderName); String f1_nodeId = folderResp.getId(); String anoNodeName = "another"; - createFolder(user1, f1_nodeId, anoNodeName); + createFolder(f1_nodeId, anoNodeName); Document doc = new Document(); final String docName = "testdoc.txt"; @@ -3142,6 +3098,8 @@ public class NodeApiTest extends AbstractBaseApiTest @Test public void testDownloadFileContent() throws Exception { + setRequestContext(user1); + // // Test plain text // @@ -3259,9 +3217,10 @@ public class NodeApiTest extends AbstractBaseApiTest public void testAllowableOps() throws Exception { // as user1 ... + setRequestContext(user1); - String rootNodeId = getRootNodeId(user1); - String sharedNodeId = getSharedNodeId(user1); + String rootNodeId = getRootNodeId(); + String sharedNodeId = getSharedNodeId(); Map params = new HashMap<>(); params.put(Nodes.PARAM_RELATIVE_PATH, "/Sites"); @@ -3290,9 +3249,9 @@ public class NodeApiTest extends AbstractBaseApiTest assertTrue(nodeResp.getAllowableOperations().contains(Nodes.OP_CREATE)); // -ve - delete(URL_NODES, user1, sharedNodeId, 403); + deleteNode(sharedNodeId, 403); - response = getSingle(NodesEntityResource.class, user1, getMyNodeId(user1), params, 200); + response = getSingle(NodesEntityResource.class, user1, getMyNodeId(), params, 200); nodeResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); assertNotNull(nodeResp.getAllowableOperations()); assertEquals(3, nodeResp.getAllowableOperations().size()); @@ -3301,7 +3260,7 @@ public class NodeApiTest extends AbstractBaseApiTest assertTrue(nodeResp.getAllowableOperations().contains(Nodes.OP_UPDATE)); // create folder - nodeResp = createFolder(user1, sharedNodeId, "folder 1 - "+RUNID); + nodeResp = createFolder(sharedNodeId, "folder 1 - "+RUNID); String folderId = nodeResp.getId(); assertNull(nodeResp.getAllowableOperations()); @@ -3318,7 +3277,7 @@ public class NodeApiTest extends AbstractBaseApiTest assertTrue(nodeResp.getAllowableOperations().contains(Nodes.OP_UPDATE)); // create file - nodeResp = createTextFile(user1, folderId, "my file - "+RUNID+".txt", "The quick brown fox jumps over the lazy dog"); + nodeResp = createTextFile(folderId, "my file - "+RUNID+".txt", "The quick brown fox jumps over the lazy dog"); String fileId = nodeResp.getId(); assertNull(nodeResp.getAllowableOperations()); @@ -3336,6 +3295,7 @@ public class NodeApiTest extends AbstractBaseApiTest // as user2 ... + setRequestContext(user2); response = getSingle(NodesEntityResource.class, user2, folderId, params, 200); nodeResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); @@ -3344,19 +3304,17 @@ public class NodeApiTest extends AbstractBaseApiTest assertTrue(nodeResp.getAllowableOperations().contains(Nodes.OP_CREATE)); // -ve - delete(URL_NODES, user2, folderId, 403); + deleteNode(folderId, 403); response = getSingle(NodesEntityResource.class, user2, fileId, params, 200); nodeResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); assertNull(nodeResp.getAllowableOperations()); // -ve - delete(URL_NODES, user2, fileId, 403); + deleteNode(fileId, 403); // as admin ... - - // TODO improve - admin-related tests - publicApiClient.setRequestContext(new RequestContext("-default-", "admin", "admin")); + setRequestContext(DEFAULT_ADMIN); response = publicApiClient.get(NodesEntityResource.class, folderId, null, params); nodeResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); @@ -3391,8 +3349,7 @@ public class NodeApiTest extends AbstractBaseApiTest assertTrue(nodeResp.getAllowableOperations().contains(Nodes.OP_UPDATE)); // -ve - response = publicApiClient.delete(getScope(), 1, URL_NODES, rootNodeId, null, null, params); - checkStatus(403, response.getStatusCode()); + deleteNode(rootNodeId, 403); // Sites - no delete response = publicApiClient.get(NodesEntityResource.class, sitesNodeId, null, params); @@ -3403,8 +3360,7 @@ public class NodeApiTest extends AbstractBaseApiTest assertTrue(nodeResp.getAllowableOperations().contains(Nodes.OP_UPDATE)); // -ve - response = publicApiClient.delete(getScope(), 1, URL_NODES, sitesNodeId, null, null, params); - checkStatus(403, response.getStatusCode()); + deleteNode(sitesNodeId, 403); // Data Dictionary - no delete response = publicApiClient.get(NodesEntityResource.class, ddNodeId, null, params); @@ -3415,8 +3371,7 @@ public class NodeApiTest extends AbstractBaseApiTest assertTrue(nodeResp.getAllowableOperations().contains(Nodes.OP_UPDATE)); // -ve - response = publicApiClient.delete(getScope(), 1, URL_NODES, ddNodeId, null, null, params); - checkStatus(403, response.getStatusCode()); + deleteNode(ddNodeId, 403); publicApiClient.setRequestContext(null); @@ -3426,6 +3381,8 @@ public class NodeApiTest extends AbstractBaseApiTest String siteNodeId = userOneN1Site.getGuid(); AuthenticationUtil.clearCurrentSecurityContext(); + setRequestContext(userId); + response = getSingle(NodesEntityResource.class, userId, siteNodeId, params, 200); nodeResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); assertEquals(userId, nodeResp.getCreatedByUser().getId()); @@ -3435,7 +3392,9 @@ public class NodeApiTest extends AbstractBaseApiTest assertTrue(nodeResp.getAllowableOperations().contains(Nodes.OP_UPDATE)); // -ve - delete(URL_NODES, userId, siteNodeId, 403); + deleteNode(siteNodeId, 403); + + setRequestContext(user1); // fix for REPO-514 (NPE for a node that was neither a file/document nor a folder) Node n = new Node(); @@ -3452,8 +3411,7 @@ public class NodeApiTest extends AbstractBaseApiTest assertNotNull(nodeResp.getAllowableOperations()); // some cleanup - params = Collections.singletonMap("permanent", "true"); - delete(URL_NODES, user1, folderId, params, 204); + deleteNode(folderId, true, 204); } @Override 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 58ef679773..e6aaebf1e7 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeAssociationsApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeAssociationsApiTest.java @@ -26,7 +26,6 @@ package org.alfresco.rest.api.tests; import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.model.AssocChild; import org.alfresco.rest.api.model.AssocTarget; @@ -40,10 +39,7 @@ import org.alfresco.rest.api.tests.client.data.Node; import org.alfresco.rest.api.tests.util.RestApiUtil; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.StoreRef; -import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.cmr.security.PermissionService; -import org.alfresco.service.cmr.security.PersonService; -import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -100,61 +96,7 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest private static final String URL_SECONDARY_CHILDREN = "secondary-children"; private static final String URL_PARENTS = "parents"; - - - - private String user1; - private String user2; - private List users = new ArrayList<>(); - - protected MutableAuthenticationService authenticationService; - protected PermissionService permissionService; - protected PersonService personService; - - private final String RUNID = System.currentTimeMillis()+""; - - - @Before - public void setup() throws Exception - { - authenticationService = applicationContext.getBean("authenticationService", MutableAuthenticationService.class); - permissionService = applicationContext.getBean("permissionService", PermissionService.class); - personService = applicationContext.getBean("personService", PersonService.class); - - // note: createUser currently relies on repoService - user1 = createUser("user1-" + RUNID); - user2 = createUser("user2-" + RUNID); - - // We just need to clean the on-premise-users, - // so the tests for the specific network would work. - users.add(user1); - users.add(user2); - } - - @After - public void tearDown() throws Exception - { - AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser(); - for (final String user : users) - { - transactionHelper.doInTransaction(new RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - if (personService.personExists(user)) - { - authenticationService.deleteAuthentication(user); - personService.deletePerson(user); - } - return null; - } - }); - } - users.clear(); - AuthenticationUtil.clearCurrentSecurityContext(); - } - + protected String getNodeTargetsUrl(String nodeId) { return URL_NODES + "/" + nodeId + "/" + URL_TARGETS; @@ -175,6 +117,16 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest return URL_NODES + "/" + nodeId + "/" + URL_PARENTS; } + private PermissionService permissionService; + + @Before + public void setup() throws Exception + { + super.setup(); + + permissionService = applicationContext.getBean("permissionService", PermissionService.class); + } + /** * Tests basic api to manage (add, list, remove) node peer associations (ie. source node -> target node) * @@ -191,10 +143,12 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest @Test public void testNodePeerAssocs() throws Exception { - String myFolderNodeId = getMyNodeId(user1); + setRequestContext(user1); + + String myFolderNodeId = getMyNodeId(); // create folder - String f1Id = createFolder(user1, myFolderNodeId, "f1").getId(); + String f1Id = createFolder(myFolderNodeId, "f1").getId(); // create content node Node n = new Node(); @@ -205,7 +159,7 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest String o1Id = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class).getId(); // create ano' folder - String f2Id = createFolder(user1, myFolderNodeId, "f2").getId(); + String f2Id = createFolder(myFolderNodeId, "f2").getId(); // create ano' content node n = new Node(); @@ -477,11 +431,12 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest @Test public void testNodePeerAssocsPermissions() throws Exception { + setRequestContext(user1); + // as user 1 - create folder in "Shared Files" area and content within the folder + String sharedFolderNodeId = getSharedNodeId(); - String sharedFolderNodeId = getSharedNodeId(user1); - - String sf1Id = createFolder(user1, sharedFolderNodeId, "shared folder "+RUNID).getId(); + String sf1Id = createFolder(sharedFolderNodeId, "shared folder "+RUNID).getId(); Node n = new Node(); n.setName("shared content "+RUNID); @@ -493,9 +448,9 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest // as user 1 - create folder in user's home (My Files) area and content within the folder - String u1myNodeId = getMyNodeId(user1); + String u1myNodeId = getMyNodeId(); - String u1f1Id = createFolder(user1, u1myNodeId, "f1").getId(); + String u1f1Id = createFolder(u1myNodeId, "f1").getId(); n = new Node(); n.setName("o1"); @@ -506,9 +461,11 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest // as user 2 - create folder in user's home (My Files) area and content within the folder - String u2myNodeId = getMyNodeId(user2); + setRequestContext(user2); + + String u2myNodeId = getMyNodeId(); - String u2f1Id = createFolder(user2, u2myNodeId, "f1").getId(); + String u2f1Id = createFolder(u2myNodeId, "f1").getId(); n = new Node(); n.setName("o1"); @@ -519,6 +476,8 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest try { + setRequestContext(user1); + Paging paging = getPaging(0, 100); // empty lists - before @@ -675,7 +634,9 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest @Test public void testNodeSecondaryChildAssocs() throws Exception { - String myFolderNodeId = getMyNodeId(user1); + setRequestContext(user1); + + String myFolderNodeId = getMyNodeId(); // create folder Node n = new Node(); @@ -694,7 +655,7 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest String o1Id = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class).getId(); // create ano' folder - String f2Id = createFolder(user1, myFolderNodeId, "f2").getId(); + String f2Id = createFolder(myFolderNodeId, "f2").getId(); // create ano' content node String o2Name = "o2"; @@ -705,9 +666,9 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest String o2Id = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class).getId(); - String f3Id = createFolder(user1, myFolderNodeId, "f3").getId(); + String f3Id = createFolder(myFolderNodeId, "f3").getId(); - String f4Id = createFolder(user1, myFolderNodeId, "f4").getId(); + String f4Id = createFolder(myFolderNodeId, "f4").getId(); try @@ -1053,7 +1014,7 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest for (int j = 0; j < parentCnt; j++) { String parentName = "parent "+j; - parentIds[j] = createFolder(user1, f4Id, parentName).getId(); + parentIds[j] = createFolder(f4Id, parentName).getId(); secChild = new AssocChild(childId, ASSOC_TYPE_CM_CONTAINS); post(getNodeSecondaryChildrenUrl(parentIds[j]), user1, toJsonAsStringNonNull(secChild), 201); @@ -1227,24 +1188,25 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest public void testDeleteAndRestoreNodeWithAssocs() throws Exception { // as user 1 ... - + setRequestContext(user1); + String f1Id = null; String f2Id = null; String f3Id = null; try { - String myFolderNodeId = getMyNodeId(user1); + String myFolderNodeId = getMyNodeId(); // create primary parent-child hierarchy - f1Id = createFolder(user1, myFolderNodeId, "f1").getId(); - String f1bId = createFolder(user1, f1Id, "f1b").getId(); - String f1cId = createFolder(user1, f1bId, "f1c").getId(); - String f1dId = createFolder(user1, f1cId, "f1d").getId(); - String c1eId = createTextFile(user1, f1dId, "c1e", "some text content").getId(); + f1Id = createFolder(myFolderNodeId, "f1").getId(); + String f1bId = createFolder(f1Id, "f1b").getId(); + String f1cId = createFolder(f1bId, "f1c").getId(); + String f1dId = createFolder(f1cId, "f1d").getId(); + String c1eId = createTextFile(f1dId, "c1e", "some text content").getId(); - f2Id = createFolder(user1, myFolderNodeId, "f2").getId(); - f3Id = createFolder(user1, myFolderNodeId, "f3").getId(); + f2Id = createFolder(myFolderNodeId, "f2").getId(); + f3Id = createFolder(myFolderNodeId, "f3").getId(); HttpResponse response = getAll(getNodeParentsUrl(f1bId), user1, null, null, 200); List nodes = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), Node.class); @@ -1446,7 +1408,9 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest public void testCreateNodeWithAssocs() throws Exception { // as user 1 - String myFolderNodeId = getMyNodeId(user1); + setRequestContext(user1); + + String myFolderNodeId = getMyNodeId(); // create node with some assocs in a single call @@ -1488,7 +1452,7 @@ public class NodeAssociationsApiTest extends AbstractBaseApiTest response = post(getNodeChildrenUrl(myFolderNodeId), user1, toJsonAsStringNonNull(n), 201); String f2Id = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class).getId(); - String f3Id = createFolder(user1, myFolderNodeId, "f3").getId(); + String f3Id = createFolder(myFolderNodeId, "f3").getId(); try { diff --git a/source/test-java/org/alfresco/rest/api/tests/NodeVersionsApiTest.java b/source/test-java/org/alfresco/rest/api/tests/NodeVersionsApiTest.java index 38de871b58..de2aad6649 100644 --- a/source/test-java/org/alfresco/rest/api/tests/NodeVersionsApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/NodeVersionsApiTest.java @@ -25,8 +25,6 @@ */ package org.alfresco.rest.api.tests; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.model.VersionOptions; import org.alfresco.rest.api.nodes.NodesEntityResource; @@ -36,20 +34,13 @@ import org.alfresco.rest.api.tests.client.PublicApiClient.Paging; import org.alfresco.rest.api.tests.client.PublicApiHttpClient; import org.alfresco.rest.api.tests.client.data.Document; import org.alfresco.rest.api.tests.client.data.Node; -import org.alfresco.rest.api.tests.client.data.Rendition; import org.alfresco.rest.api.tests.util.RestApiUtil; -import org.alfresco.service.cmr.security.MutableAuthenticationService; -import org.alfresco.service.cmr.security.PermissionService; -import org.alfresco.service.cmr.security.PersonService; import org.alfresco.util.Pair; import org.alfresco.util.TempFileProvider; -import org.junit.After; -import org.junit.Before; import org.junit.Test; import java.io.ByteArrayInputStream; import java.io.File; -import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; @@ -70,58 +61,6 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest private static final String URL_DELETED_NODES = "deleted-nodes"; private static final String URL_VERSIONS = "versions"; - private String user1; - private String user2; - private List users = new ArrayList<>(); - - private final String RUNID = System.currentTimeMillis()+""; - - protected MutableAuthenticationService authenticationService; - protected PermissionService permissionService; - protected PersonService personService; - - @Before - public void setup() throws Exception - { - authenticationService = applicationContext.getBean("authenticationService", MutableAuthenticationService.class); - permissionService = applicationContext.getBean("permissionService", PermissionService.class); - personService = applicationContext.getBean("personService", PersonService.class); - - // note: createUser currently relies on repoService - user1 = createUser("user1-" + RUNID); - user2 = createUser("user2-" + RUNID); - - // We just need to clean the on-premise-users, - // so the tests for the specific network would work. - users.add(user1); - users.add(user2); - } - - @After - public void tearDown() throws Exception - { - AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser(); - for (final String user : users) - { - transactionHelper.doInTransaction(new RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - if (personService.personExists(user)) - { - authenticationService.deleteAuthentication(user); - personService.deletePerson(user); - } - return null; - } - }); - } - users.clear(); - AuthenticationUtil.clearCurrentSecurityContext(); - } - - protected String getNodeVersionRevertUrl(String nodeId, String versionId) { return getNodeVersionsUrl(nodeId) + "/" + versionId + "/revert"; @@ -146,10 +85,12 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest @Test public void testUploadFileVersionCreateWithOverwrite() throws Exception { - String myFolderNodeId = getMyNodeId(user1); + setRequestContext(user1); + + String myFolderNodeId = getMyNodeId(); // create folder - String f1Id = createFolder(user1, myFolderNodeId, "f1").getId(); + String f1Id = createFolder(myFolderNodeId, "f1").getId(); try { @@ -164,7 +105,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest String content = textContentSuffix + verCnt; // create first version (ie. 1.0) - Document documentResp = createTextFile(user1, f1Id, contentName, content, "UTF-8", null); + Document documentResp = createTextFile(f1Id, contentName, content, "UTF-8", null); String docId = documentResp.getId(); assertTrue(documentResp.getAspectNames().contains("cm:versionable")); assertNotNull(documentResp.getProperties()); @@ -196,7 +137,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest params.put(Nodes.PARAM_OVERWRITE, "true"); params.put(Nodes.PARAM_AUTO_RENAME, "true"); - createTextFile(user1, myFolderNodeId, contentName, content, "UTF-8", params, 400); + createTextFile(myFolderNodeId, contentName, content, "UTF-8", params, 400); } // remove versionable aspect @@ -223,7 +164,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest params = new HashMap<>(); params.put(Nodes.PARAM_OVERWRITE, "true"); - createTextFile(user1, f1Id, contentName, content, "UTF-8", params, 409); + createTextFile(f1Id, contentName, content, "UTF-8", params, 409); } // we do allow update of binary content with no versioning (after removing versionable) @@ -260,10 +201,12 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest @Test public void testUploadFileVersionAsMinor() throws Exception { - String myFolderNodeId = getMyNodeId(user1); + setRequestContext(user1); + + String myFolderNodeId = getMyNodeId(); // create folder - String f1Id = createFolder(user1, myFolderNodeId, "f1").getId(); + String f1Id = createFolder(myFolderNodeId, "f1").getId(); try { @@ -279,7 +222,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest params.put("majorVersion", "false"); // create a new file with a minor version (ie. 0.1) - Document documentResp = createTextFile(user1, f1Id, contentName, content, "UTF-8", params); + Document documentResp = createTextFile(f1Id, contentName, content, "UTF-8", params); String docId = documentResp.getId(); assertTrue(documentResp.getAspectNames().contains("cm:versionable")); assertNotNull(documentResp.getProperties()); @@ -319,14 +262,16 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest @Test public void testDeleteVersion() throws Exception { - String sharedFolderNodeId = getSharedNodeId(user1); + setRequestContext(user1); + + String sharedFolderNodeId = getSharedNodeId(); // create folder String f1Id = null; try { - f1Id = createFolder(user1, sharedFolderNodeId, "testDeleteVersion-f1").getId(); + f1Id = createFolder(sharedFolderNodeId, "testDeleteVersion-f1").getId(); String textContentSuffix = "Amazingly few discotheques provide jukeboxes "; String contentName = "content-1"; @@ -511,7 +456,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest String textContent = textContentPrefix + currentVersionCounter; // uses upload with overwrite here ... - Document documentResp = createTextFile(userId, parentFolderNodeId, fileName, textContent, "UTF-8", params); + Document documentResp = createTextFile(parentFolderNodeId, fileName, textContent, "UTF-8", params); docId = documentResp.getId(); assertTrue(documentResp.getAspectNames().contains("cm:versionable")); assertNotNull(documentResp.getProperties()); @@ -628,10 +573,12 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest public void testUploadFileVersionUpdate() throws Exception { // As user 1 ... - String myFolderNodeId = getMyNodeId(user1); + setRequestContext(user1); + + String myFolderNodeId = getMyNodeId(); // create folder - String f1Id = createFolder(user1, myFolderNodeId, "f1").getId(); + String f1Id = createFolder(myFolderNodeId, "f1").getId(); try { @@ -646,7 +593,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest String contentName = "content " + System.currentTimeMillis(); String content = textContentSuffix+verCnt; - Document documentResp = createTextFile(user1, myFolderNodeId, contentName, content, "UTF-8", null); + Document documentResp = createTextFile(myFolderNodeId, contentName, content, "UTF-8", null); String d1Id = documentResp.getId(); String versionId = majorVersion+"."+minorVersion; @@ -762,14 +709,16 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest public void testRevert() throws Exception { // As user 1 ... - String sharedFolderNodeId = getSharedNodeId(user1); + setRequestContext(user1); + + String sharedFolderNodeId = getSharedNodeId(); // create folder String f1Id = null; try { - f1Id = createFolder(user1, sharedFolderNodeId, "testRevert-f1-"+System.currentTimeMillis()).getId(); + f1Id = createFolder(sharedFolderNodeId, "testRevert-f1-"+System.currentTimeMillis()).getId(); int majorVersion = 1; int minorVersion = 0; @@ -784,7 +733,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest params.put(Nodes.PARAM_VERSION_COMMENT, updateVerCommentSuffix+verCnt); // Upload text file - versioning is currently auto enabled on upload (create file via multi-part/form-data) - Document documentResp = createTextFile(user1, f1Id, contentName, content, "UTF-8", params); + Document documentResp = createTextFile(f1Id, contentName, content, "UTF-8", params); String d1Id = documentResp.getId(); // Update the content @@ -946,10 +895,12 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest public void testCreateEmptyFileVersionUpdate() throws Exception { // As user 1 ... - String myFolderNodeId = getMyNodeId(user1); + setRequestContext(user1); + + String myFolderNodeId = getMyNodeId(); // create folder - String f1Id = createFolder(user1, myFolderNodeId, "f1").getId(); + String f1Id = createFolder(myFolderNodeId, "f1").getId(); try { @@ -1111,7 +1062,9 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest @Test public void testUpdateFileVersionCreate() throws Exception { - String myNodeId = getMyNodeId(user1); + setRequestContext(user1); + + String myNodeId = getMyNodeId(); Document d1 = new Document(); d1.setName("d1.txt"); @@ -1134,7 +1087,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest // Update the empty node's content - no version created String content = "The quick brown fox jumps over the lazy dog " + cnt; - documentResp = updateTextFile(user1, docId, content, null); + documentResp = updateTextFile(docId, content, null); assertFalse(documentResp.getAspectNames().contains("cm:versionable")); assertNull(documentResp.getProperties()); // no properties (ie. no "cm:versionLabel") } @@ -1150,7 +1103,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest Map params = new HashMap<>(); params.put("comment", "my version "+cnt); - documentResp = updateTextFile(user1, docId, content, params); + documentResp = updateTextFile(docId, content, params); assertTrue(documentResp.getAspectNames().contains("cm:versionable")); assertNotNull(documentResp.getProperties()); @@ -1164,7 +1117,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest params = new HashMap<>(); params.put("comment", "my version "+cnt); - documentResp = updateTextFile(user1, docId, content, params); + documentResp = updateTextFile(docId, content, params); assertTrue(documentResp.getAspectNames().contains("cm:versionable")); assertNotNull(documentResp.getProperties()); assertEquals(majorVersion+"."+minorVersion, documentResp.getProperties().get("cm:versionLabel")); @@ -1183,7 +1136,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest params.put("comment", "my version "+cnt); params.put("majorVersion", "true"); - documentResp = updateTextFile(user1, docId, content, params); + documentResp = updateTextFile(docId, content, params); assertTrue(documentResp.getAspectNames().contains("cm:versionable")); assertNotNull(documentResp.getProperties()); assertEquals(majorVersion+"."+minorVersion, documentResp.getProperties().get("cm:versionLabel")); @@ -1201,7 +1154,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest params.put("comment", "my version "+cnt); params.put("majorVersion", "false"); - documentResp = updateTextFile(user1, docId, content, params); + documentResp = updateTextFile(docId, content, params); assertTrue(documentResp.getAspectNames().contains("cm:versionable")); assertNotNull(documentResp.getProperties()); assertEquals(majorVersion+"."+minorVersion, documentResp.getProperties().get("cm:versionLabel")); @@ -1218,7 +1171,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest params.put("comment", "my version "+cnt); params.put("majorVersion", "true"); - documentResp = updateTextFile(user1, docId, content, params); + documentResp = updateTextFile(docId, content, params); assertTrue(documentResp.getAspectNames().contains("cm:versionable")); assertNotNull(documentResp.getProperties()); assertEquals(majorVersion+"."+minorVersion, documentResp.getProperties().get("cm:versionLabel")); @@ -1231,7 +1184,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest content = "The quick brown fox jumps over the lazy dog "+cnt; - documentResp = updateTextFile(user1, docId, content, null); + documentResp = updateTextFile(docId, content, null); assertTrue(documentResp.getAspectNames().contains("cm:versionable")); assertNotNull(documentResp.getProperties()); assertEquals(majorVersion+"."+minorVersion, documentResp.getProperties().get("cm:versionLabel")); @@ -1254,7 +1207,7 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest // Update the empty node's content - no version created content = "The quick brown fox jumps over the lazy dog " + cnt; - documentResp = updateTextFile(user1, docId, content, null); + documentResp = updateTextFile(docId, content, null); assertFalse(documentResp.getAspectNames().contains("cm:versionable")); assertNull(documentResp.getProperties()); // no properties (ie. no "cm:versionLabel") } @@ -1272,11 +1225,13 @@ public class NodeVersionsApiTest extends AbstractBaseApiTest public void testVersionHistoryPaging() throws Exception { // create folder + setRequestContext(user1); + String f1Id = null; try { - f1Id = createFolder(user1, Nodes.PATH_MY, "testVersionHistoryPaging-f1").getId(); + f1Id = createFolder(Nodes.PATH_MY, "testVersionHistoryPaging-f1").getId(); String textContentSuffix = "Amazingly few discotheques provide jukeboxes "; String contentName = "content-1"; diff --git a/source/test-java/org/alfresco/rest/api/tests/QueriesApiTest.java b/source/test-java/org/alfresco/rest/api/tests/QueriesApiTest.java index 9dabd08fea..4ff9442d1f 100644 --- a/source/test-java/org/alfresco/rest/api/tests/QueriesApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/QueriesApiTest.java @@ -25,8 +25,6 @@ */ package org.alfresco.rest.api.tests; -import org.alfresco.repo.security.authentication.AuthenticationUtil; -import org.alfresco.repo.transaction.RetryingTransactionHelper.RetryingTransactionCallback; import org.alfresco.rest.api.Nodes; import org.alfresco.rest.api.Queries; import org.alfresco.rest.api.tests.client.HttpResponse; @@ -38,10 +36,6 @@ 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.Tag; import org.alfresco.rest.api.tests.util.RestApiUtil; -import org.alfresco.service.cmr.security.MutableAuthenticationService; -import org.alfresco.service.cmr.security.PersonService; -import org.junit.After; -import org.junit.Before; import org.junit.Test; import java.util.ArrayList; @@ -66,56 +60,7 @@ import static org.junit.Assert.*; public class QueriesApiTest extends AbstractBaseApiTest { private static final String URL_QUERIES_LSN = "queries/live-search-nodes"; - - private String user1; - private String user2; - private List users = new ArrayList<>(); - - protected MutableAuthenticationService authenticationService; - protected PersonService personService; - - private final String RUNID = System.currentTimeMillis()+""; - - @Before - public void setup() throws Exception - { - authenticationService = applicationContext.getBean("authenticationService", MutableAuthenticationService.class); - personService = applicationContext.getBean("personService", PersonService.class); - - // note: createUser currently relies on repoService - user1 = createUser("user1-" + RUNID); - user2 = createUser("user2-" + RUNID); - - // We just need to clean the on-premise-users, - // so the tests for the specific network would work. - users.add(user1); - users.add(user2); - } - - @After - public void tearDown() throws Exception - { - AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser(); - for (final String user : users) - { - transactionHelper.doInTransaction(new RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - if (personService.personExists(user)) - { - authenticationService.deleteAuthentication(user); - personService.deletePerson(user); - } - return null; - } - }); - } - users.clear(); - AuthenticationUtil.clearCurrentSecurityContext(); - } - + public static > Map sortByValue( Map map ) { List> list = @@ -145,6 +90,8 @@ public class QueriesApiTest extends AbstractBaseApiTest @Test public void testLiveSearchNodes_FTS_and_Metadata() throws Exception { + setRequestContext(user1); + int f1Count = 5; List f1NodeIds = new ArrayList<>(f1Count); @@ -173,10 +120,10 @@ public class QueriesApiTest extends AbstractBaseApiTest List nodes = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), Node.class); assertEquals(0, nodes.size()); - String myFolderNodeId = getMyNodeId(user1); + String myFolderNodeId = getMyNodeId(); - String f1Id = createFolder(user1, myFolderNodeId, "folder 1").getId(); - String f2Id = createFolder(user1, myFolderNodeId, "folder 2").getId(); + String f1Id = createFolder(myFolderNodeId, "folder 1").getId(); + String f2Id = createFolder(myFolderNodeId, "folder 2").getId(); String name = "name"; String title = "title"; @@ -200,7 +147,7 @@ public class QueriesApiTest extends AbstractBaseApiTest docProps.put("cm:title", title+num+title); docProps.put("cm:description", descrip+num+descrip); - Document doc = createTextFile(user1, f1Id, docName, contentText, "UTF-8", docProps); + Document doc = createTextFile(f1Id, docName, contentText, "UTF-8", docProps); f1NodeIds.add(doc.getId()); idNameMap.put(doc.getId(), docName); @@ -221,7 +168,7 @@ public class QueriesApiTest extends AbstractBaseApiTest props.put("cm:title", title+num+title); props.put("cm:description", descrip+num+descrip); - Document doc = createTextFile(user1, f2Id, docName, contentText, "UTF-8", props); + Document doc = createTextFile(f2Id, docName, contentText, "UTF-8", props); f2NodeIds.add(doc.getId()); idNameMap.put(doc.getId(), docName); @@ -240,7 +187,7 @@ public class QueriesApiTest extends AbstractBaseApiTest props.put("cm:title", title+num+title); props.put("cm:description", descrip+num+descrip); - Node node = createFolder(user1, myFolderNodeId, folderName, props); + Node node = createFolder(myFolderNodeId, folderName, props); f3NodeIds.add(node.getId()); idNameMap.put(node.getId(), folderName); @@ -438,6 +385,8 @@ public class QueriesApiTest extends AbstractBaseApiTest @Test public void testLiveSearchNodes_SortPage() throws Exception { + setRequestContext(user1); + int f1Count = 5; List f1NodeIds = new ArrayList<>(f1Count); @@ -458,10 +407,10 @@ public class QueriesApiTest extends AbstractBaseApiTest Map params = new HashMap<>(1); params.put(Queries.PARAM_TERM, testTerm); - String myFolderNodeId = getMyNodeId(user1); + String myFolderNodeId = getMyNodeId(); - String f1Id = createFolder(user1, myFolderNodeId, "folder sort 1").getId(); - String f2Id = createFolder(user1, myFolderNodeId, "folder sort 2").getId(); + String f1Id = createFolder(myFolderNodeId, "folder sort 1").getId(); + String f2Id = createFolder(myFolderNodeId, "folder sort 2").getId(); String name = "name"; @@ -476,7 +425,7 @@ public class QueriesApiTest extends AbstractBaseApiTest String num = String.format("%05d", nameIdx); String docName = name+num+name+".txt"; - Document doc = createTextFile(user1, f1Id, docName, contentText, "UTF-8", null); + Document doc = createTextFile(f1Id, docName, contentText, "UTF-8", null); f1NodeIds.add(doc.getId()); idNameMap.put(doc.getId(), docName); @@ -493,7 +442,7 @@ public class QueriesApiTest extends AbstractBaseApiTest String num = String.format("%05d", nameIdx); String docName = name+num+name+".txt"; - Document doc = createTextFile(user1, f2Id, docName, contentText, "UTF-8", null); + Document doc = createTextFile(f2Id, docName, contentText, "UTF-8", null); f2NodeIds.add(doc.getId()); idNameMap.put(doc.getId(), docName); @@ -625,11 +574,13 @@ public class QueriesApiTest extends AbstractBaseApiTest getAll(URL_QUERIES_LSN, user1, paging, params, 400); // -ve test - unauthenticated - belts-and-braces ;-) + setRequestContext(null); getAll(URL_QUERIES_LSN, null, paging, params, 401); } finally { // some cleanup + setRequestContext(user1); for (String docId : allIds) { delete(URL_NODES, user1, docId, 204); @@ -640,6 +591,8 @@ public class QueriesApiTest extends AbstractBaseApiTest @Test public void testLiveSearchNodes_Tags() throws Exception { + setRequestContext(user1); + PublicApiClient.Nodes nodesProxy = publicApiClient.nodes(); int f1Count = 5; @@ -661,8 +614,8 @@ public class QueriesApiTest extends AbstractBaseApiTest Paging paging = getPaging(0, 100); - String f1Id = createFolder(user1, Nodes.PATH_MY, "folder tag 1").getId(); - String f2Id = createFolder(user1, Nodes.PATH_MY, "folder tag 2").getId(); + String f1Id = createFolder(Nodes.PATH_MY, "folder tag 1").getId(); + String f2Id = createFolder(Nodes.PATH_MY, "folder tag 2").getId(); String name = "name"; @@ -672,7 +625,7 @@ public class QueriesApiTest extends AbstractBaseApiTest String contentText = "f1 test document " + user1 + " document " + i; String docName = name+i; - Document doc = createTextFile(user1, f1Id, docName, contentText, "UTF-8", null); + Document doc = createTextFile(f1Id, docName, contentText, "UTF-8", null); publicApiClient.setRequestContext(new RequestContext("", user1)); @@ -687,7 +640,7 @@ public class QueriesApiTest extends AbstractBaseApiTest // create folder - in folder 2 String folderName = name+i; - Folder folder = createFolder(user1, f2Id, folderName, null); + Folder folder = createFolder(f2Id, folderName, null); publicApiClient.setRequestContext(new RequestContext("", user1)); @@ -723,6 +676,7 @@ public class QueriesApiTest extends AbstractBaseApiTest finally { // some cleanup + setRequestContext(user1); for (String nodeId : allIds) { delete(URL_NODES, user1, nodeId, 204); diff --git a/source/test-java/org/alfresco/rest/api/tests/RenditionsTest.java b/source/test-java/org/alfresco/rest/api/tests/RenditionsTest.java index e75b36beeb..d629dd3cc4 100644 --- a/source/test-java/org/alfresco/rest/api/tests/RenditionsTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/RenditionsTest.java @@ -114,6 +114,8 @@ public class RenditionsTest extends AbstractBaseApiTest @Test public void testListNodeRenditions() throws Exception { + setRequestContext(userOneN1.getId()); + // Create a folder within the site document's library String folderName = "folder" + System.currentTimeMillis(); String folder_Id = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_FOLDER, userOneN1.getId()); @@ -185,7 +187,7 @@ public class RenditionsTest extends AbstractBaseApiTest assertTrue(expectedPaging.getTotalItems() >= 5); // Create 'doclib' rendition - createAndGetRendition(userOneN1.getId(), contentNodeId, docLib.getId()); + createAndGetRendition(contentNodeId, docLib.getId()); // List all available renditions (includes those that have been created and those that are yet to be created) paging = getPaging(0, 50); @@ -252,6 +254,8 @@ public class RenditionsTest extends AbstractBaseApiTest @Test public void testGetNodeRendition() throws Exception { + setRequestContext(userOneN1.getId()); + // Create a folder within the site document's library String folderName = "folder" + System.currentTimeMillis(); String folder_Id = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_FOLDER, userOneN1.getId()); @@ -280,7 +284,7 @@ public class RenditionsTest extends AbstractBaseApiTest assertNull("Shouldn't have returned the size, as the rendition hasn't been created yet.", contentInfo.getSizeInBytes()); // Create and get 'doclib' rendition - rendition = createAndGetRendition(userOneN1.getId(), contentNodeId, "doclib"); + rendition = createAndGetRendition(contentNodeId, "doclib"); assertNotNull(rendition); assertEquals(RenditionStatus.CREATED, rendition.getStatus()); contentInfo = rendition.getContent(); @@ -334,6 +338,8 @@ public class RenditionsTest extends AbstractBaseApiTest @Test public void testCreateRendition() throws Exception { + setRequestContext(userOneN1.getId()); + // Create a folder within the site document's library String folderName = "folder" + System.currentTimeMillis(); String folder_Id = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_FOLDER, userOneN1.getId()); @@ -356,7 +362,7 @@ public class RenditionsTest extends AbstractBaseApiTest assertEquals(RenditionStatus.NOT_CREATED, rendition.getStatus()); // Create and get 'imgpreview' rendition - rendition = createAndGetRendition(userOneN1.getId(), contentNodeId, "imgpreview"); + rendition = createAndGetRendition(contentNodeId, "imgpreview"); assertNotNull(rendition); assertEquals(RenditionStatus.CREATED, rendition.getStatus()); ContentInfo contentInfo = rendition.getContent(); @@ -466,6 +472,7 @@ public class RenditionsTest extends AbstractBaseApiTest public void testCreateRenditionOnUpload() throws Exception { String userId = userOneN1.getId(); + setRequestContext(userId); // Create a folder within the site document's library String folderName = "folder" + System.currentTimeMillis(); @@ -486,7 +493,7 @@ public class RenditionsTest extends AbstractBaseApiTest String contentNodeId = document.getId(); // wait and check that rendition is created ... - Rendition rendition = waitAndGetRendition(userId, contentNodeId, renditionName); + Rendition rendition = waitAndGetRendition(contentNodeId, renditionName); assertNotNull(rendition); assertEquals(RenditionStatus.CREATED, rendition.getStatus()); @@ -586,6 +593,8 @@ public class RenditionsTest extends AbstractBaseApiTest @Test public void testDownloadRendition() throws Exception { + setRequestContext(userOneN1.getId()); + // Create a folder within the site document's library String folderName = "folder" + System.currentTimeMillis(); String folder_Id = addToDocumentLibrary(userOneN1Site, folderName, TYPE_CM_FOLDER, userOneN1.getId()); @@ -645,7 +654,7 @@ public class RenditionsTest extends AbstractBaseApiTest getSingle(getNodeRenditionsUrl(contentNodeId), userOneN1.getId(), "doclib/content", params, headers, 200); // Create and get 'doclib' rendition - rendition = createAndGetRendition(userOneN1.getId(), contentNodeId, "doclib"); + rendition = createAndGetRendition(contentNodeId, "doclib"); assertNotNull(rendition); assertEquals(RenditionStatus.CREATED, rendition.getStatus()); @@ -761,7 +770,7 @@ public class RenditionsTest extends AbstractBaseApiTest String networkId = repoService.tenantService.getUserDomain(userId); String parentId = getSiteContainerNodeId(networkId, userId, testSite.getId(), "documentLibrary"); - return createNode(userId, parentId, name, nodeType, null).getId(); + return createNode(parentId, name, nodeType, null).getId(); } private Rendition getRendition(List renditions, String renditionName) diff --git a/source/test-java/org/alfresco/rest/api/tests/SharedLinkApiTest.java b/source/test-java/org/alfresco/rest/api/tests/SharedLinkApiTest.java index d7125d96bc..3639aa391e 100644 --- a/source/test-java/org/alfresco/rest/api/tests/SharedLinkApiTest.java +++ b/source/test-java/org/alfresco/rest/api/tests/SharedLinkApiTest.java @@ -45,7 +45,6 @@ import org.alfresco.rest.api.tests.client.data.QuickShareLinkEmailRequest; import org.alfresco.rest.api.tests.client.data.Rendition; import org.alfresco.rest.api.tests.util.MultiPartBuilder; import org.alfresco.rest.api.tests.util.RestApiUtil; -import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.security.MutableAuthenticationService; import org.alfresco.service.cmr.security.PersonService; import org.alfresco.service.cmr.site.SiteVisibility; @@ -79,75 +78,7 @@ import static org.junit.Assert.*; public class SharedLinkApiTest extends AbstractBaseApiTest { private static final String URL_SHARED_LINKS = "shared-links"; - - TestNetwork networkOne; - - /** - * User one from network one - */ - private TestPerson userOneN1; - - /** - * User two from network one - */ - private TestPerson userTwoN1; - private TestSite userOneN1Site; - - private String user1; - private String user2; - private List users = new ArrayList<>(); - - protected MutableAuthenticationService authenticationService; - protected PersonService personService; - - private final String RUNID = System.currentTimeMillis()+""; - - @Before - public void setup() throws Exception - { - authenticationService = applicationContext.getBean("authenticationService", MutableAuthenticationService.class); - personService = applicationContext.getBean("personService", PersonService.class); - - // note: createUser currently relies on repoService - user1 = createUser("user1-" + RUNID); - user2 = createUser("user2-" + RUNID); - - // We just need to clean the on-premise-users, - // so the tests for the specific network would work. - users.add(user1); - users.add(user2); - - networkOne = getTestFixture().getRandomNetwork(); - userOneN1 = networkOne.createUser(); - userTwoN1 = networkOne.createUser(); - - userOneN1Site = createSite(networkOne, userOneN1, SiteVisibility.PRIVATE); - } - - @After - public void tearDown() throws Exception - { - AuthenticationUtil.setAdminUserAsFullyAuthenticatedUser(); - for (final String user : users) - { - transactionHelper.doInTransaction(new RetryingTransactionCallback() - { - @Override - public Void execute() throws Throwable - { - if (personService.personExists(user)) - { - authenticationService.deleteAuthentication(user); - personService.deletePerson(user); - } - return null; - } - }); - } - users.clear(); - AuthenticationUtil.clearCurrentSecurityContext(); - } - + /** * Tests shared links to file (content) * @@ -169,9 +100,10 @@ public class SharedLinkApiTest extends AbstractBaseApiTest public void testSharedLinkCreateGetDelete() throws Exception { // As user 1 ... + setRequestContext(user1); // create doc d1 - pdf - String sharedFolderNodeId = getSharedNodeId(user1); + String sharedFolderNodeId = getSharedNodeId(); String fileName1 = "quick"+RUNID+"_1.pdf"; File file1 = getResourceFile("quick.pdf"); @@ -190,17 +122,18 @@ public class SharedLinkApiTest extends AbstractBaseApiTest String d1Id = doc1.getId(); // create doc d2 - plain text - String myFolderNodeId = getMyNodeId(user1); + String myFolderNodeId = getMyNodeId(); String content2Text = "The quick brown fox jumps over the lazy dog 2."; String fileName2 = "content" + RUNID + "_2.txt"; - Document doc2 = createTextFile(user1, myFolderNodeId, fileName2, content2Text); + Document doc2 = createTextFile(myFolderNodeId, fileName2, content2Text); String d2Id = doc2.getId(); String file2_MimeType = MimetypeMap.MIMETYPE_TEXT_PLAIN; // As user 2 ... + setRequestContext(user2); response = getSingle(NodesEntityResource.class, user2, d1Id, null, 200); Node nodeResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); @@ -239,6 +172,7 @@ public class SharedLinkApiTest extends AbstractBaseApiTest // As user 1 ... + setRequestContext(user1); // create shared link to document 2 body = new HashMap<>(); @@ -287,6 +221,7 @@ public class SharedLinkApiTest extends AbstractBaseApiTest resp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), QuickShareLink.class); assertNull(resp.getAllowableOperations()); + setRequestContext(null); // unauth access to get shared link info params = Collections.singletonMap("include", "allowableOperations"); // note: this will be ignore for unauth access @@ -361,7 +296,7 @@ public class SharedLinkApiTest extends AbstractBaseApiTest assertEquals(0, renditions.size()); // create rendition of pdf doc - note: for some reason create rendition of txt doc fail on build m/c (TBC) ? - Rendition rendition = createAndGetRendition(user2, d1Id, "doclib"); + Rendition rendition = createAndGetRendition(d1Id, "doclib"); assertNotNull(rendition); assertEquals(Rendition.RenditionStatus.CREATED, rendition.getStatus()); @@ -402,14 +337,17 @@ public class SharedLinkApiTest extends AbstractBaseApiTest // -ve delete tests { - // -ve test - user1 cannot delete shared link - delete(URL_SHARED_LINKS, user1, shared1Id, 403); - // -ve test - unauthenticated - delete(URL_SHARED_LINKS, null, shared1Id, 401); + setRequestContext(null); + deleteSharedLink(shared1Id, 401); + + setRequestContext(user1); + // -ve test - user1 cannot delete shared link + deleteSharedLink(shared1Id, 403); + // -ve test - delete - cannot delete non-existent link - delete(URL_SHARED_LINKS, user1, "dummy", 404); + deleteSharedLink("dummy", 404); } @@ -432,7 +370,7 @@ public class SharedLinkApiTest extends AbstractBaseApiTest post(URL_SHARED_LINKS, user1, toJsonAsStringNonNull(body), 404); // -ve - create - try to link to folder (ie. not a file) - String f1Id = createFolder(user1, myFolderNodeId, "f1 " + RUNID).getId(); + String f1Id = createFolder(myFolderNodeId, "f1 " + RUNID).getId(); body = new HashMap<>(); body.put("nodeId", f1Id); post(URL_SHARED_LINKS, user1, toJsonAsStringNonNull(body), 400); @@ -450,11 +388,14 @@ public class SharedLinkApiTest extends AbstractBaseApiTest // delete shared link - delete(URL_SHARED_LINKS, user2, shared1Id, 204); + setRequestContext(user2); + deleteSharedLink(shared1Id); // -ve test - delete - cannot delete non-existent link - delete(URL_SHARED_LINKS, user1, shared1Id, 404); + setRequestContext(user1); + deleteSharedLink(shared1Id, 404); + setRequestContext(user2); response = getSingle(NodesEntityResource.class, user2, d1Id, null, 200); nodeResp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), Node.class); @@ -482,13 +423,15 @@ public class SharedLinkApiTest extends AbstractBaseApiTest { quickShareLinks.setEnabled(false); + setRequestContext(user1); + // -ve - disabled service tests body.put("nodeId", "dummy"); post(URL_SHARED_LINKS, user1, toJsonAsStringNonNull(body), 501); getSingle(QuickShareLinkEntityResource.class, null, "dummy", null, 501); getSingle(QuickShareLinkEntityResource.class, null, "dummy/content", null, 501); - delete(URL_SHARED_LINKS, user1, "dummy", 501); + deleteSharedLink("dummy", 501); } finally { @@ -507,32 +450,30 @@ public class SharedLinkApiTest extends AbstractBaseApiTest @Test public void testSharedLinkFind() throws Exception { + // As user 1 ... + setRequestContext(user1); + Paging paging = getPaging(0, 100); // Get all shared links visible to user 1 (note: for now assumes clean repo) HttpResponse response = getAll(URL_SHARED_LINKS, user1, paging, 200); List sharedLinks = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), QuickShareLink.class); assertEquals(0, sharedLinks.size()); - - // As user 1 ... - + // create doc d1 - in "My" folder - String myFolderNodeId = getMyNodeId(user1); + String myFolderNodeId = getMyNodeId(); String content1Text = "The quick brown fox jumps over the lazy dog 1."; String docName1 = "content" + RUNID + "_1.txt"; - Document doc1 = createTextFile(user1, myFolderNodeId, docName1, content1Text); + Document doc1 = createTextFile(myFolderNodeId, docName1, content1Text); String d1Id = doc1.getId(); // create doc d2 - in "Shared" folder - String sharedFolderNodeId = getSharedNodeId(user1); + String sharedFolderNodeId = getSharedNodeId(); String content2Text = "The quick brown fox jumps over the lazy dog 2."; String docName2 = "content" + RUNID + "_2.txt"; - Document doc2 = createTextFile(user1, sharedFolderNodeId, docName2, content1Text); + Document doc2 = createTextFile(sharedFolderNodeId, docName2, content1Text); String d2Id = doc2.getId(); - - // As user 1 ... - // create shared link to doc 1 Map body = new HashMap<>(); body.put("nodeId", d1Id); @@ -541,6 +482,7 @@ public class SharedLinkApiTest extends AbstractBaseApiTest String shared1Id = resp.getId(); // As user 2 ... + setRequestContext(user2); // create shared link to doc 2 body = new HashMap<>(); @@ -554,6 +496,8 @@ public class SharedLinkApiTest extends AbstractBaseApiTest // find links // + setRequestContext(user1); + response = getAll(URL_SHARED_LINKS, user1, paging, 200); sharedLinks = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), QuickShareLink.class); assertEquals(2, sharedLinks.size()); @@ -562,12 +506,16 @@ public class SharedLinkApiTest extends AbstractBaseApiTest assertEquals(shared1Id, sharedLinks.get(1).getId()); assertEquals(d1Id, sharedLinks.get(1).getNodeId()); + setRequestContext(user2); + response = getAll(URL_SHARED_LINKS, user2, paging, 200); sharedLinks = RestApiUtil.parseRestApiEntries(response.getJsonResponse(), QuickShareLink.class); assertEquals(1, sharedLinks.size()); assertEquals(shared2Id, sharedLinks.get(0).getId()); assertEquals(d2Id, sharedLinks.get(0).getNodeId()); + setRequestContext(user1); + // find my links Map params = new HashMap<>(); params.put("where", "("+ QuickShareLinks.PARAM_SHAREDBY+"='"+People.DEFAULT_USER+"')"); @@ -588,19 +536,25 @@ public class SharedLinkApiTest extends AbstractBaseApiTest assertEquals(shared2Id, sharedLinks.get(0).getId()); assertEquals(d2Id, sharedLinks.get(0).getNodeId()); + setRequestContext(null); // -ve test - unauthenticated getAll(URL_SHARED_LINKS, null, paging, params, 401); // delete the shared links - delete(URL_SHARED_LINKS, user1, shared1Id, 204); - delete(URL_SHARED_LINKS, user2, shared2Id, 204); + setRequestContext(user1); + deleteSharedLink(shared1Id); + + setRequestContext(user2); + deleteSharedLink(shared2Id); // TODO if and when these tests are optionally runnable via remote env then we could skip this part of the test // (else need to verify test mechanism for enterprise admin via jmx ... etc) + setRequestContext(user1); + QuickShareLinksImpl quickShareLinks = applicationContext.getBean("quickShareLinks", QuickShareLinksImpl.class); try { @@ -623,11 +577,13 @@ public class SharedLinkApiTest extends AbstractBaseApiTest @Test public void testEmailSharedLink() throws Exception { + setRequestContext(user1); + // Create plain text document - String myFolderNodeId = getMyNodeId(user1); + String myFolderNodeId = getMyNodeId(); String contentText = "The quick brown fox jumps over the lazy dog."; String fileName = "file-" + RUNID + ".txt"; - Document doc = createTextFile(user1, myFolderNodeId, fileName, contentText); + Document doc = createTextFile(myFolderNodeId, fileName, contentText); String docId = doc.getId(); // Create shared link to document @@ -714,12 +670,12 @@ public class SharedLinkApiTest extends AbstractBaseApiTest public void testSharedLinkCreateGetDelete_MultiTenant() throws Exception { // As userOneN1 - AuthenticationUtil.setFullyAuthenticatedUser(userOneN1.getId()); - NodeRef docLibNodeRef = userOneN1Site.getContainerNodeRef(("documentLibrary")); - String docLibNodeId = docLibNodeRef.getId(); + setRequestContext(userOneN1.getId()); + String docLibNodeId = getSiteContainerNodeId(userOneN1Site.getNetworkId(), userOneN1.getId(), userOneN1Site.getSiteId(), "documentLibrary"); + String folderName = "folder" + System.currentTimeMillis() + "_1"; - String folderId = createFolder(userOneN1.getId(), docLibNodeId, folderName, null).getId(); + String folderId = createFolder(docLibNodeId, folderName, null).getId(); // create doc d1 - pdf String fileName1 = "quick" + RUNID + "_1.pdf"; @@ -755,6 +711,8 @@ public class SharedLinkApiTest extends AbstractBaseApiTest resp = RestApiUtil.parseRestApiEntry(response.getJsonResponse(), QuickShareLink.class); assertNull(resp.getAllowableOperations()); + setRequestContext(null); + // unauth access to get shared link info Map params = Collections.singletonMap("include", "allowableOperations"); // note: this will be ignore for unauth access response = getSingle(QuickShareLinkEntityResource.class, null, shared1Id, params, 200); @@ -805,7 +763,7 @@ public class SharedLinkApiTest extends AbstractBaseApiTest assertEquals(0, renditions.size()); // create rendition of pdf doc - note: for some reason create rendition of txt doc fail on build m/c (TBC) ? - Rendition rendition = createAndGetRendition(userOneN1.getId(), d1Id, "doclib"); + Rendition rendition = createAndGetRendition(d1Id, "doclib"); assertNotNull(rendition); assertEquals(Rendition.RenditionStatus.CREATED, rendition.getStatus()); @@ -842,15 +800,18 @@ public class SharedLinkApiTest extends AbstractBaseApiTest // Test 304 response headers = Collections.singletonMap(IF_MODIFIED_SINCE_HEADER, lastModifiedHeader); getSingle(URL_SHARED_LINKS, null, shared1Id + "/renditions/doclib/content", null, headers, 304); - + // -ve test - userTwoN1 cannot delete shared link - delete(URL_SHARED_LINKS, userTwoN1.getId(), shared1Id, 403); + setRequestContext(userTwoN1.getId()); + deleteSharedLink(shared1Id, 403); // -ve test - unauthenticated - delete(URL_SHARED_LINKS, null, shared1Id, 401); + setRequestContext(null); + deleteSharedLink(shared1Id, 401); // delete shared link - delete(URL_SHARED_LINKS, userOneN1.getId(), shared1Id, 204); + setRequestContext(userOneN1.getId()); + deleteSharedLink(shared1Id); } @Override @@ -863,4 +824,14 @@ public class SharedLinkApiTest extends AbstractBaseApiTest { return URL_SHARED_LINKS + '/' + sharedId + "/email"; } + + private void deleteSharedLink(String sharedId) throws Exception + { + deleteSharedLink(sharedId, 204); + } + + private void deleteSharedLink(String sharedId, int expectedStatus) throws Exception + { + delete(URL_SHARED_LINKS, publicApiClient.getRequestContext().getRunAsUser(), sharedId, expectedStatus); + } }