diff --git a/source/test-java/org/alfresco/rest/api/tests/RepoService.java b/source/test-java/org/alfresco/rest/api/tests/RepoService.java
index 8684c3344f..cc5e591ea6 100644
--- a/source/test-java/org/alfresco/rest/api/tests/RepoService.java
+++ b/source/test-java/org/alfresco/rest/api/tests/RepoService.java
@@ -1,28 +1,28 @@
-/*
- * #%L
- * Alfresco Remote API
- * %%
- * Copyright (C) 2005 - 2016 Alfresco Software Limited
- * %%
- * This file is part of the Alfresco software.
- * If the software was purchased under a paid Alfresco license, the terms of
- * the paid license agreement will prevail. Otherwise, the software is
- * provided under the following open source license terms:
- *
- * Alfresco is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License as published by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * Alfresco is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License for more details.
- *
- * You should have received a copy of the GNU Lesser General Public License
- * along with Alfresco. If not, see .
- * #L%
- */
+/*
+ * #%L
+ * Alfresco Remote API
+ * %%
+ * Copyright (C) 2005 - 2016 Alfresco Software Limited
+ * %%
+ * This file is part of the Alfresco software.
+ * If the software was purchased under a paid Alfresco license, the terms of
+ * the paid license agreement will prevail. Otherwise, the software is
+ * provided under the following open source license terms:
+ *
+ * Alfresco is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * Alfresco is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * along with Alfresco. If not, see .
+ * #L%
+ */
package org.alfresco.rest.api.tests;
import static org.junit.Assert.assertEquals;
@@ -83,8 +83,8 @@ import org.alfresco.rest.api.impl.node.ratings.RatingScheme;
import org.alfresco.rest.api.tests.client.data.Activity;
import org.alfresco.rest.api.tests.client.data.Comment;
import org.alfresco.rest.api.tests.client.data.Company;
-import org.alfresco.rest.api.tests.client.data.FavouriteDocument;
-import org.alfresco.rest.api.tests.client.data.FavouriteFolder;
+import org.alfresco.rest.api.tests.client.data.FavouriteDocument;
+import org.alfresco.rest.api.tests.client.data.FavouriteFolder;
import org.alfresco.rest.api.tests.client.data.FavouriteSite;
import org.alfresco.rest.api.tests.client.data.MemberOfSite;
import org.alfresco.rest.api.tests.client.data.NetworkImpl;
@@ -365,14 +365,27 @@ public class RepoService
nodeService.deleteNode(nodeRef);
}
+ //
+ // TODO replace with V1 REST API to Lock/Unlock - except calls to includeChildren (which may not be exposed, initially
+ //
public void lockNode(NodeRef nodeRef)
{
- lockService.lock(nodeRef, LockType.NODE_LOCK);
+ lockNode(nodeRef, LockType.NODE_LOCK, 0, false);
+ }
+
+ public void lockNode(NodeRef nodeRef, LockType lockType, int timeToExpire, boolean includeChildren)
+ {
+ lockService.lock(nodeRef, lockType, timeToExpire, includeChildren);
}
public void unlockNode(NodeRef nodeRef)
{
- lockService.unlock(nodeRef);
+ unlockNode(nodeRef, false);
+ }
+
+ public void unlockNode(NodeRef nodeRef, boolean includeChildren)
+ {
+ lockService.unlock(nodeRef, true, false);
}
public NodeRef addUserDescription(final String personId, final TestNetwork network, final String personDescription)
@@ -400,13 +413,13 @@ public class RepoService
public TestPerson createUser(final PersonInfo personInfo, final String username, final TestNetwork network)
{
- return getOrCreateUser(personInfo, username, network, true);
- }
-
- public TestPerson getOrCreateUser(final PersonInfo personInfo, final String username, final TestNetwork network)
- {
- return getOrCreateUser(personInfo, username, network, false);
- }
+ return getOrCreateUser(personInfo, username, network, true);
+ }
+
+ public TestPerson getOrCreateUser(final PersonInfo personInfo, final String username, final TestNetwork network)
+ {
+ return getOrCreateUser(personInfo, username, network, false);
+ }
public final static String DEFAULT_ADMIN = "admin";
public final static String DEFAULT_ADMIN_PWD = "admin";
@@ -423,55 +436,55 @@ public class RepoService
return ((DEFAULT_ADMIN+"@"+network.getId()).equalsIgnoreCase(username));
}
}
-
+
// TODO review delete person
- public TestPerson getOrCreateUser(final PersonInfo personInfo, final String username, final TestNetwork network, final boolean deletePerson)
- {
+ public TestPerson getOrCreateUser(final PersonInfo personInfo, final String username, final TestNetwork network, final boolean deletePerson)
+ {
return AuthenticationUtil.runAsSystem(new RunAsWork()
{
@Override
public TestPerson doWork() throws Exception
{
-
+
final TestPerson testPerson = new TestPerson(personInfo.getFirstName(), personInfo.getLastName(), username, personInfo.getPassword(),
personInfo.getCompany(), network, personInfo.getSkype(), personInfo.getLocation(), personInfo.getTel(),
personInfo.getMob(), personInfo.getInstantmsg(), personInfo.getGoogle());
-
+
final Map props = testPerson.getProperties();
// short-circuit for default/tenant "admin"
if (! isDefaultAdmin(username, network))
- {
- NodeRef personNodeRef = personService.getPersonOrNull(username);
+ {
+ NodeRef personNodeRef = personService.getPersonOrNull(username);
- if ((personNodeRef != null) && deletePerson)
- {
- AuthenticationUtil.runAsSystem(new RunAsWork()
- {
- @Override
- public Void doWork() throws Exception
- {
- personService.deletePerson(testPerson.getId());
- return null;
- }
- });
- }
+ if ((personNodeRef != null) && deletePerson)
+ {
+ AuthenticationUtil.runAsSystem(new RunAsWork()
+ {
+ @Override
+ public Void doWork() throws Exception
+ {
+ personService.deletePerson(testPerson.getId());
+ return null;
+ }
+ });
+ }
- if (personNodeRef == null)
- {
- personNodeRef = personService.createPerson(props);
+ if (personNodeRef == null)
+ {
+ personNodeRef = personService.createPerson(props);
- // create authentication to represent user
- authenticationService.createAuthentication(username, personInfo.getPassword().toCharArray());
+ // create authentication to represent user
+ authenticationService.createAuthentication(username, personInfo.getPassword().toCharArray());
- if (EnterpriseTestFixture.WITH_AVATAR.equals(personInfo.getInstantmsg()))
- {
- InvitationWebScriptTest.makeAvatar(nodeService, personNodeRef);
- log("Made avatar for " + testPerson.getId() + (network != null ? " in network " + network : ""));
- }
- }
- }
- log("Username " + testPerson.getId() + (network != null ? " in network " + network : ""));
+ if (EnterpriseTestFixture.WITH_AVATAR.equals(personInfo.getInstantmsg()))
+ {
+ InvitationWebScriptTest.makeAvatar(nodeService, personNodeRef);
+ log("Made avatar for " + testPerson.getId() + (network != null ? " in network " + network : ""));
+ }
+ }
+ }
+ log("Username " + testPerson.getId() + (network != null ? " in network " + network : ""));
publicApiContext.addUser(testPerson.getId());
addPerson(testPerson);
@@ -978,20 +991,20 @@ public class RepoService
return wrapProperties;
}
- public FavouriteDocument getDocument(String networkId, final NodeRef nodeRef)
+ public FavouriteDocument getDocument(String networkId, final NodeRef nodeRef)
{
- return TenantUtil.runAsSystemTenant(new TenantRunAsWork()
+ return TenantUtil.runAsSystemTenant(new TenantRunAsWork()
{
@Override
- public FavouriteDocument doWork() throws Exception
+ public FavouriteDocument doWork() throws Exception
{
- FavouriteDocument document = null;
+ FavouriteDocument document = null;
QName type = nodeService.getType(nodeRef);
if(dictionaryService.isSubClass(type, ContentModel.TYPE_CONTENT))
{
Properties properties = getProperties(nodeRef);
- document = FavouriteDocument.getDocument(nodeRef.getId(), nodeRef.getId(), properties);
+ document = FavouriteDocument.getDocument(nodeRef.getId(), nodeRef.getId(), properties);
}
else
{
@@ -1003,20 +1016,20 @@ public class RepoService
}, networkId);
}
- public FavouriteFolder getFolder(String networkId, final NodeRef nodeRef)
+ public FavouriteFolder getFolder(String networkId, final NodeRef nodeRef)
{
- return TenantUtil.runAsSystemTenant(new TenantRunAsWork()
+ return TenantUtil.runAsSystemTenant(new TenantRunAsWork()
{
@Override
- public FavouriteFolder doWork() throws Exception
+ public FavouriteFolder doWork() throws Exception
{
- FavouriteFolder folder = null;
+ FavouriteFolder folder = null;
QName type = nodeService.getType(nodeRef);
if(dictionaryService.isSubClass(type, ContentModel.TYPE_FOLDER))
{
Properties properties = getProperties(nodeRef);
- folder = FavouriteFolder.getFolder(nodeRef.getId(), nodeRef.getId(), properties);
+ folder = FavouriteFolder.getFolder(nodeRef.getId(), nodeRef.getId(), properties);
}
else
{
@@ -1362,11 +1375,11 @@ public class RepoService
public void create()
{
- if(!getId().equals(TenantService.DEFAULT_DOMAIN) && !tenantAdminService.existsTenant(getId()))
+ if(!getId().equals(TenantService.DEFAULT_DOMAIN) && !tenantAdminService.existsTenant(getId()))
{
tenantAdminService.createTenant(getId(), DEFAULT_ADMIN_PWD.toCharArray());
- numNetworks++;
- log("Created network " + getId());
+ numNetworks++;
+ log("Created network " + getId());
}
}
diff --git a/source/test-java/org/alfresco/rest/api/tests/TestNodeComments.java b/source/test-java/org/alfresco/rest/api/tests/TestNodeComments.java
index 344fb8969f..eb4d85b35e 100644
--- a/source/test-java/org/alfresco/rest/api/tests/TestNodeComments.java
+++ b/source/test-java/org/alfresco/rest/api/tests/TestNodeComments.java
@@ -57,6 +57,7 @@ import org.alfresco.rest.api.tests.client.data.Activity;
import org.alfresco.rest.api.tests.client.data.Comment;
import org.alfresco.rest.api.tests.client.data.SiteRole;
import org.alfresco.rest.api.tests.client.data.Tag;
+import org.alfresco.service.cmr.lock.LockType;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.site.SiteVisibility;
import org.alfresco.util.GUID;
@@ -91,6 +92,7 @@ public class TestNodeComments extends EnterpriseTestApi
private NodeRef nodeRef4;
private NodeRef cmObjectNodeRef;
private NodeRef customTypeObject;
+ private NodeRef nodeRef5;
@Override
@Before
@@ -170,7 +172,8 @@ public class TestNodeComments extends EnterpriseTestApi
{
NodeRef nodeRef = repoService.createDocument(site1.getContainerNodeRef("documentLibrary"), "Test Doc", "Test Content");
nodes.add(nodeRef);
- nodeRef = repoService.createFolder(site1.getContainerNodeRef("documentLibrary"), "Test Folder");
+ NodeRef folderNodeRef = repoService.createFolder(site1.getContainerNodeRef("documentLibrary"), "Test Folder");
+ nodeRef = folderNodeRef;
nodes.add(nodeRef);
nodeRef = repoService.createDocument(site1.getContainerNodeRef("documentLibrary"), "Test Doc 1", "Test Content 1");
nodes.add(nodeRef);
@@ -182,6 +185,8 @@ public class TestNodeComments extends EnterpriseTestApi
nodes.add(nodeRef);
nodeRef = repoService.createObjectOfCustomType(site1.getContainerNodeRef("documentLibrary"), "Custom type object", "{custom.model}sop");
nodes.add(nodeRef);
+ nodeRef = repoService.createDocument(folderNodeRef, "Test Doc 4", "Test Content 4 - in Test Folder");
+ nodes.add(nodeRef);
return null;
}
@@ -194,6 +199,7 @@ public class TestNodeComments extends EnterpriseTestApi
this.nodeRef4 = nodes.get(4);
this.cmObjectNodeRef = nodes.get(5);
this.customTypeObject = nodes.get(6);
+ this.nodeRef5 = nodes.get(7);
}
@Test
@@ -771,16 +777,23 @@ public class TestNodeComments extends EnterpriseTestApi
{
assertEquals(HttpStatus.SC_BAD_REQUEST, e.getHttpResponse().getStatusCode());
}
+ }
+
+ @Test
+ public void testNodeCommentsAndLocking() throws Exception
+ {
+ Comments commentsProxy = publicApiClient.comments();
// locked node - cannot add/edit/delete comments (MNT-14945, MNT-16446)
+
try
{
publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId()));
-
+
Comment comment = new Comment();
comment.setContent("my comment");
Comment createdComment = commentsProxy.createNodeComment(nodeRef1.getId(), comment);
-
+
TenantUtil.runAsUserTenant(new TenantRunAsWork()
{
@Override
@@ -797,7 +810,7 @@ public class TestNodeComments extends EnterpriseTestApi
int skipCount = 0;
int maxItems = Integer.MAX_VALUE;
- Paging paging = getPaging(skipCount, maxItems, expectedComments.size(), expectedComments.size());
+ Paging paging = getPaging(skipCount, maxItems);
commentsProxy.getNodeComments(nodeRef1.getId(), createParams(paging, null));
// test POST for a locked node
@@ -809,7 +822,7 @@ public class TestNodeComments extends EnterpriseTestApi
fail("");
}
- catch(PublicApiException e)
+ catch (PublicApiException e)
{
assertEquals(HttpStatus.SC_CONFLICT, e.getHttpResponse().getStatusCode());
}
@@ -820,10 +833,10 @@ public class TestNodeComments extends EnterpriseTestApi
Comment updatedComment = new Comment();
updatedComment.setContent("my comment");
commentsProxy.updateNodeComment(nodeRef1.getId(), createdComment.getId(), updatedComment);
-
+
fail("");
}
- catch(PublicApiException e)
+ catch (PublicApiException e)
{
assertEquals(HttpStatus.SC_CONFLICT, e.getHttpResponse().getStatusCode());
}
@@ -835,7 +848,7 @@ public class TestNodeComments extends EnterpriseTestApi
fail("");
}
- catch(PublicApiException e)
+ catch (PublicApiException e)
{
assertEquals(HttpStatus.SC_CONFLICT, e.getHttpResponse().getStatusCode());
}
@@ -853,7 +866,49 @@ public class TestNodeComments extends EnterpriseTestApi
}, person11.getId(), network1.getId());
}
}
-
+
+ // lock recursively (MNT-14945, MNT-16446, REPO-1150)
+ @Test
+ public void testNodeCommentsAndLockingIncludingChildren() throws Exception
+ {
+ Comments commentsProxy = publicApiClient.comments();
+
+ // TODO push-down to future CommentServiceImplTest (see ACE-5437) - since includeChildren is via LockService api only
+
+ try
+ {
+ publicApiClient.setRequestContext(new RequestContext(network1.getId(), person11.getId()));
+
+ Comment comment = new Comment();
+ comment.setContent("my comment");
+ Comment createdComment = commentsProxy.createNodeComment(nodeRef5.getId(), comment);
+
+ // recursive lock (folderRef1, nodeRef5)
+ TenantUtil.runAsUserTenant(new TenantRunAsWork()
+ {
+ @Override
+ public Void doWork() throws Exception
+ {
+ repoService.lockNode(folderNodeRef1, LockType.WRITE_LOCK, 0, true);
+ return null;
+ }
+ }, person11.getId(), network1.getId());
+
+ }
+ finally
+ {
+ TenantUtil.runAsSystemTenant(new TenantRunAsWork()
+ {
+ @Override
+ public Void doWork() throws Exception
+ {
+ repoService.unlockNode(folderNodeRef1, true);
+ return null;
+ }
+ }, network1.getId());
+ }
+ }
+
@Test
public void test_MNT_16446() throws Exception
{