diff --git a/config/alfresco/model/permissionDefinitions.xml b/config/alfresco/model/permissionDefinitions.xml
index f7a0eea6c9..84ad844a2e 100644
--- a/config/alfresco/model/permissionDefinitions.xml
+++ b/config/alfresco/model/permissionDefinitions.xml
@@ -480,6 +480,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -494,17 +512,6 @@
-
-
-
-
-
-
-
-
-
-
-
diff --git a/config/alfresco/public-services-security-context.xml b/config/alfresco/public-services-security-context.xml
index 4764206686..0d2db80f95 100644
--- a/config/alfresco/public-services-security-context.xml
+++ b/config/alfresco/public-services-security-context.xml
@@ -691,8 +691,8 @@
org.alfresco.service.cmr.coci.CheckOutCheckInService.checkout=ACL_NODE.0.cm:lockable.CheckOut
- org.alfresco.service.cmr.coci.CheckOutCheckInService.checkin=ACL_NODE.0.cm:lockable.CheckIn
- org.alfresco.service.cmr.coci.CheckOutCheckInService.cancelCheckout=ACL_NODE.0.cm:lockable.CancelCheckOut
+ org.alfresco.service.cmr.coci.CheckOutCheckInService.checkin=ACL_NODE.0.cm:workingcopy.CheckIn
+ org.alfresco.service.cmr.coci.CheckOutCheckInService.cancelCheckout=ACL_NODE.0.cm:workingcopy.CancelCheckOut
org.alfresco.service.cmr.coci.CheckOutCheckInService.getWorkingCopy=ACL_NODE.0.sys:base.Read
org.alfresco.service.cmr.coci.CheckOutCheckInService.getCheckedOut=ACL_NODE.0.sys:base.Read
org.alfresco.service.cmr.coci.CheckOutCheckInService.isWorkingCopy=ACL_NODE.0.sys:base.Read
diff --git a/source/test-java/org/alfresco/repo/coci/CheckOutCheckInServiceImplTest.java b/source/test-java/org/alfresco/repo/coci/CheckOutCheckInServiceImplTest.java
index a84d08d2e8..2c0efba14b 100644
--- a/source/test-java/org/alfresco/repo/coci/CheckOutCheckInServiceImplTest.java
+++ b/source/test-java/org/alfresco/repo/coci/CheckOutCheckInServiceImplTest.java
@@ -39,6 +39,7 @@ import org.alfresco.repo.version.VersionModel;
import org.alfresco.service.ServiceRegistry;
import org.alfresco.service.cmr.coci.CheckOutCheckInService;
import org.alfresco.service.cmr.lock.LockService;
+import org.alfresco.service.cmr.lock.LockType;
import org.alfresco.service.cmr.lock.NodeLockedException;
import org.alfresco.service.cmr.model.FileFolderService;
import org.alfresco.service.cmr.repository.AssociationRef;
@@ -1131,7 +1132,6 @@ public class CheckOutCheckInServiceImplTest extends BaseSpringTest
assertTrue(thrown);
////////////////////////////////////////////////
- // testing "move" actions with non-owner user //
////////////////////////////////////////////////
// create another person
@@ -1187,8 +1187,6 @@ public class CheckOutCheckInServiceImplTest extends BaseSpringTest
/**
* MNT-2641
- *
- * Original cannot be deleted while it is checked out. No one should be able to delete or update the original.
*/
public void testDeleteUpdateOriginalOfCheckedOutDocument()
{
@@ -1398,7 +1396,6 @@ public class CheckOutCheckInServiceImplTest extends BaseSpringTest
{
return nodeService.createNode(parentRef, ContentModel.ASSOC_CONTAINS, QName.createQName(contentName), ContentModel.TYPE_CONTENT).getChildRef();
}
-
private void createPerson(String userName)
{
// if user with given user name doesn't already exist then create user
@@ -1433,4 +1430,27 @@ public class CheckOutCheckInServiceImplTest extends BaseSpringTest
}
}
+ /**
+ *
+ * Creating node - CheckOut - Add write lock to working copy - Unlock working copy - CancelCheckOut
+ */
+ public void testCancelCheckoutUnlockedWCopy()
+ {
+ ServiceRegistry serviceRegistry = (ServiceRegistry)this.applicationContext.getBean(ServiceRegistry.SERVICE_REGISTRY);
+ CheckOutCheckInService securityCOCIService = serviceRegistry.getCheckOutCheckInService();
+ NodeRef folderA = createFolder(rootNodeRef, "testMnt9502_" + System.currentTimeMillis());
+ assertNotNull(folderA);
+ NodeRef clucc = createContent("checkout_lock_unlock_cancelCO", folderA);
+ assertNotNull(clucc);
+
+ NodeRef wc = securityCOCIService.checkout(clucc);
+ lockService.lock(wc, LockType.WRITE_LOCK, 60*60);
+ lockService.unlock(wc);
+ securityCOCIService.cancelCheckout(wc);
+ }
+
+ private NodeRef createFolder(NodeRef rootNodeRef, String fName)
+ {
+ return nodeService.createNode(rootNodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName(fName), ContentModel.TYPE_FOLDER).getChildRef();
+ }
}