From 68ee56182228aca11a7f72daf73318351bbc7d02 Mon Sep 17 00:00:00 2001 From: Silviu Dinuta Date: Wed, 2 Nov 2016 18:17:15 +0200 Subject: [PATCH 1/2] RM-4311: fixed the issue and added an unit test for it --- .../rm/rest/api/impl/RMNodesImpl.java | 4 +- .../rm/rest/api/impl/RMNodesImplUnitTest.java | 39 +++++++++++++++++++ 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java index a9e1e10546..d0059819bb 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/rm/rest/api/impl/RMNodesImpl.java @@ -128,7 +128,7 @@ public class RMNodesImpl extends NodesImpl implements RMNodes } //TODO to remove this part of code after isSpecialNode will be made protected on core, will not need this anymore since the right allowed operations will be returned from core(REPO-1459). - if (includeParam.contains(PARAM_INCLUDE_ALLOWABLEOPERATIONS)) + if (includeParam.contains(PARAM_INCLUDE_ALLOWABLEOPERATIONS) && originalNode.getAllowableOperations() != null) { List allowableOperations = originalNode.getAllowableOperations(); List modifiedAllowableOperations = new ArrayList<>(); @@ -256,7 +256,7 @@ public class RMNodesImpl extends NodesImpl implements RMNodes return super.validateNode(nodeId); } - + private RMNodeType getType(QName typeQName, NodeRef nodeRef) { // quick check for common types diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java index 4bfecd6161..5fc65166cd 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java @@ -30,6 +30,7 @@ package org.alfresco.rm.rest.api.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.Matchers.any; @@ -187,6 +188,44 @@ public class RMNodesImplUnitTest extends BaseUnitTest assertFalse("Delete operation should note be available for FilePlan.", allowableOperations.contains(RMNodes.OP_DELETE)); } + @Test + public void testGetFilePlanAllowableOperationsWithoutPermissions() throws Exception + { + NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService); + QName mockedType = AlfMock.generateQName(); + when(mockedNodeService.getType(nodeRef)).thenReturn(mockedType); + when(mockedDictionaryService.isSubClass(mockedType, ContentModel.TYPE_CMOBJECT)).thenReturn(true); + when(mockedDictionaryService.isSubClass(mockedType, ContentModel.TYPE_SYSTEM_FOLDER)).thenReturn(false); + when(mockedDictionaryService.isSubClass(mockedType, ContentModel.TYPE_FOLDER)).thenReturn(true); + + NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); + when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); + NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); + ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); + when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); + when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + + when(mockedFilePlanService.isFilePlanComponent(nodeRef)).thenReturn(true); + List includeParamList = new ArrayList(); + includeParamList.add(RMNodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS); + + when(mockedPermissionService.hasPermission(nodeRef, PermissionService.WRITE)).thenReturn(AccessStatus.DENIED); + when(mockedPermissionService.hasPermission(nodeRef, PermissionService.DELETE)).thenReturn(AccessStatus.DENIED); + when(mockedPermissionService.hasPermission(nodeRef, PermissionService.ADD_CHILDREN)).thenReturn(AccessStatus.DENIED); + + when(mockedFilePlanService.getFilePlanBySiteId(RM_SITE_ID)).thenReturn(nodeRef); + Node folderOrDocument = rmNodesImpl.getFolderOrDocument(nodeRef, null, null, includeParamList, null); + assertNotNull(folderOrDocument); + assertTrue(FileplanComponentNode.class.isInstance(folderOrDocument)); + + FileplanComponentNode resultNode = (FileplanComponentNode) folderOrDocument; + assertEquals(false, resultNode.getIsRecordFolder()); + assertEquals(false, resultNode.getIsFile()); + assertEquals(false, resultNode.getIsCategory()); + List allowableOperations = resultNode.getAllowableOperations(); + assertNull(allowableOperations); + } + @Test public void testGetTransferContainerAllowableOperations() throws Exception { From a92dfe0d4812d5e42a7b2938f075d33f7ab20ca4 Mon Sep 17 00:00:00 2001 From: Silviu Dinuta Date: Thu, 3 Nov 2016 13:19:29 +0200 Subject: [PATCH 2/2] RM-4311: extracted some of the common code in private methods --- .../rm/rest/api/impl/RMNodesImplUnitTest.java | 186 +++++------------- 1 file changed, 54 insertions(+), 132 deletions(-) diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java index 5fc65166cd..5dc05ded3d 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/rm/rest/api/impl/RMNodesImplUnitTest.java @@ -129,12 +129,7 @@ public class RMNodesImplUnitTest extends BaseUnitTest when(mockedDictionaryService.isSubClass(mockedType, ContentModel.TYPE_CMOBJECT)).thenReturn(true); when(mockedDictionaryService.isSubClass(mockedType, ContentModel.TYPE_SYSTEM_FOLDER)).thenReturn(false); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); when(mockedFilePlanService.isFilePlanComponent(nodeRef)).thenReturn(true); List includeParamList = new ArrayList(); @@ -158,20 +153,13 @@ public class RMNodesImplUnitTest extends BaseUnitTest when(mockedDictionaryService.isSubClass(mockedType, ContentModel.TYPE_SYSTEM_FOLDER)).thenReturn(false); when(mockedDictionaryService.isSubClass(mockedType, ContentModel.TYPE_FOLDER)).thenReturn(true); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); when(mockedFilePlanService.isFilePlanComponent(nodeRef)).thenReturn(true); List includeParamList = new ArrayList(); includeParamList.add(RMNodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.WRITE)).thenReturn(AccessStatus.ALLOWED); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.DELETE)).thenReturn(AccessStatus.ALLOWED); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.ADD_CHILDREN)).thenReturn(AccessStatus.ALLOWED); + setPermissions(nodeRef, AccessStatus.ALLOWED); when(mockedFilePlanService.getFilePlanBySiteId(RM_SITE_ID)).thenReturn(nodeRef); Node folderOrDocument = rmNodesImpl.getFolderOrDocument(nodeRef, null, null, includeParamList, null); @@ -198,20 +186,13 @@ public class RMNodesImplUnitTest extends BaseUnitTest when(mockedDictionaryService.isSubClass(mockedType, ContentModel.TYPE_SYSTEM_FOLDER)).thenReturn(false); when(mockedDictionaryService.isSubClass(mockedType, ContentModel.TYPE_FOLDER)).thenReturn(true); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); when(mockedFilePlanService.isFilePlanComponent(nodeRef)).thenReturn(true); List includeParamList = new ArrayList(); includeParamList.add(RMNodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.WRITE)).thenReturn(AccessStatus.DENIED); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.DELETE)).thenReturn(AccessStatus.DENIED); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.ADD_CHILDREN)).thenReturn(AccessStatus.DENIED); + setPermissions(nodeRef, AccessStatus.DENIED); when(mockedFilePlanService.getFilePlanBySiteId(RM_SITE_ID)).thenReturn(nodeRef); Node folderOrDocument = rmNodesImpl.getFolderOrDocument(nodeRef, null, null, includeParamList, null); @@ -233,36 +214,19 @@ public class RMNodesImplUnitTest extends BaseUnitTest when(mockedNodeService.getType(nodeRef)).thenReturn(RecordsManagementModel.TYPE_RECORD_CATEGORY); when(mockedDictionaryService.isSubClass(RecordsManagementModel.TYPE_RECORD_CATEGORY, ContentModel.TYPE_FOLDER)).thenReturn(true); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); List includeParamList = new ArrayList(); includeParamList.add(RMNodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.WRITE)).thenReturn(AccessStatus.ALLOWED); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.DELETE)).thenReturn(AccessStatus.ALLOWED); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.ADD_CHILDREN)).thenReturn(AccessStatus.ALLOWED); + setPermissions(nodeRef, AccessStatus.ALLOWED); NodeRef filePlanNodeRef = AlfMock.generateNodeRef(mockedNodeService); when(mockedFilePlanService.getFilePlanBySiteId(RM_SITE_ID)).thenReturn(filePlanNodeRef); when(mockedFilePlanService.getTransferContainer(filePlanNodeRef)).thenReturn(nodeRef); Node folderOrDocument = rmNodesImpl.getFolderOrDocument(nodeRef, null, null, includeParamList, null); - assertNotNull(folderOrDocument); - assertTrue(RecordCategoryNode.class.isInstance(folderOrDocument)); - - RecordCategoryNode resultNode = (RecordCategoryNode) folderOrDocument; - assertEquals(false, resultNode.getIsRecordFolder()); - assertEquals(false, resultNode.getIsFile()); - assertEquals(true, resultNode.getIsCategory()); - List allowableOperations = resultNode.getAllowableOperations(); - assertTrue("Create operation should be available for Transfers container.", allowableOperations.contains(RMNodes.OP_CREATE)); - assertTrue("Update operation should be available for Transfers container.", allowableOperations.contains(RMNodes.OP_UPDATE)); - assertFalse("Delete operation should note be available for Transfers container.", allowableOperations.contains(RMNodes.OP_DELETE)); + checkSpecialContainersAllowedOperations(folderOrDocument); } @Test @@ -272,19 +236,12 @@ public class RMNodesImplUnitTest extends BaseUnitTest when(mockedNodeService.getType(nodeRef)).thenReturn(RecordsManagementModel.TYPE_RECORD_CATEGORY); when(mockedDictionaryService.isSubClass(RecordsManagementModel.TYPE_RECORD_CATEGORY, ContentModel.TYPE_FOLDER)).thenReturn(true); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); List includeParamList = new ArrayList(); includeParamList.add(RMNodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.WRITE)).thenReturn(AccessStatus.ALLOWED); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.DELETE)).thenReturn(AccessStatus.ALLOWED); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.ADD_CHILDREN)).thenReturn(AccessStatus.ALLOWED); + setPermissions(nodeRef, AccessStatus.ALLOWED); NodeRef filePlanNodeRef = AlfMock.generateNodeRef(mockedNodeService); when(mockedFilePlanService.getFilePlanBySiteId(RM_SITE_ID)).thenReturn(filePlanNodeRef); @@ -295,17 +252,7 @@ public class RMNodesImplUnitTest extends BaseUnitTest when(mockedFilePlanService.getHoldContainer(filePlanNodeRef)).thenReturn(nodeRef); Node folderOrDocument = rmNodesImpl.getFolderOrDocument(nodeRef, null, null, includeParamList, null); - assertNotNull(folderOrDocument); - assertTrue(RecordCategoryNode.class.isInstance(folderOrDocument)); - - RecordCategoryNode resultNode = (RecordCategoryNode) folderOrDocument; - assertEquals(false, resultNode.getIsRecordFolder()); - assertEquals(false, resultNode.getIsFile()); - assertEquals(true, resultNode.getIsCategory()); - List allowableOperations = resultNode.getAllowableOperations(); - assertTrue("Create operation should be available for Holds container.", allowableOperations.contains(RMNodes.OP_CREATE)); - assertTrue("Update operation should be available for Holds container.", allowableOperations.contains(RMNodes.OP_UPDATE)); - assertFalse("Delete operation should note be available for Holds container.", allowableOperations.contains(RMNodes.OP_DELETE)); + checkSpecialContainersAllowedOperations(folderOrDocument); } @Test @@ -315,19 +262,12 @@ public class RMNodesImplUnitTest extends BaseUnitTest when(mockedNodeService.getType(nodeRef)).thenReturn(RecordsManagementModel.TYPE_RECORD_CATEGORY); when(mockedDictionaryService.isSubClass(RecordsManagementModel.TYPE_RECORD_CATEGORY, ContentModel.TYPE_FOLDER)).thenReturn(true); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); List includeParamList = new ArrayList(); includeParamList.add(RMNodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.WRITE)).thenReturn(AccessStatus.ALLOWED); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.DELETE)).thenReturn(AccessStatus.ALLOWED); - when(mockedPermissionService.hasPermission(nodeRef, PermissionService.ADD_CHILDREN)).thenReturn(AccessStatus.ALLOWED); + setPermissions(nodeRef, AccessStatus.ALLOWED); NodeRef filePlanNodeRef = AlfMock.generateNodeRef(mockedNodeService); when(mockedFilePlanService.getFilePlanBySiteId(RM_SITE_ID)).thenReturn(filePlanNodeRef); @@ -341,17 +281,7 @@ public class RMNodesImplUnitTest extends BaseUnitTest when(mockedFilePlanService.getUnfiledContainer(filePlanNodeRef)).thenReturn(nodeRef); Node folderOrDocument = rmNodesImpl.getFolderOrDocument(nodeRef, null, null, includeParamList, null); - assertNotNull(folderOrDocument); - assertTrue(RecordCategoryNode.class.isInstance(folderOrDocument)); - - RecordCategoryNode resultNode = (RecordCategoryNode) folderOrDocument; - assertEquals(false, resultNode.getIsRecordFolder()); - assertEquals(false, resultNode.getIsFile()); - assertEquals(true, resultNode.getIsCategory()); - List allowableOperations = resultNode.getAllowableOperations(); - assertTrue("Create operation should be available for Unfiled Records container.", allowableOperations.contains(RMNodes.OP_CREATE)); - assertTrue("Update operation should be available for Unfiled Records container.", allowableOperations.contains(RMNodes.OP_UPDATE)); - assertFalse("Delete operation should note be available for Unfiled Records container.", allowableOperations.contains(RMNodes.OP_DELETE)); + checkSpecialContainersAllowedOperations(folderOrDocument); } @Test @@ -363,12 +293,7 @@ public class RMNodesImplUnitTest extends BaseUnitTest when(mockedDictionaryService.isSubClass(mockedType, ContentModel.TYPE_CMOBJECT)).thenReturn(true); when(mockedDictionaryService.isSubClass(mockedType, ContentModel.TYPE_SYSTEM_FOLDER)).thenReturn(false); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); when(mockedFilePlanService.isFilePlanComponent(nodeRef)).thenReturn(false); List includeParamList = new ArrayList(); @@ -390,12 +315,7 @@ public class RMNodesImplUnitTest extends BaseUnitTest NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService); when(mockedNodeService.getType(nodeRef)).thenReturn(RecordsManagementModel.TYPE_RECORD_CATEGORY); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); List includeParamList = new ArrayList(); Node folderOrDocument = rmNodesImpl.getFolderOrDocument(nodeRef, null, null, includeParamList, null); @@ -414,12 +334,7 @@ public class RMNodesImplUnitTest extends BaseUnitTest NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService); when(mockedNodeService.getType(nodeRef)).thenReturn(RecordsManagementModel.TYPE_RECORD_CATEGORY); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); List includeParamList = new ArrayList(); includeParamList.add(RMNodes.PARAM_INCLUDE_HAS_RETENTION_SCHEDULE); @@ -456,12 +371,7 @@ public class RMNodesImplUnitTest extends BaseUnitTest NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService); when(mockedNodeService.getType(nodeRef)).thenReturn(RecordsManagementModel.TYPE_RECORD_FOLDER); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); List includeParamList = new ArrayList(); Node folderOrDocument = rmNodesImpl.getFolderOrDocument(nodeRef, null, null, includeParamList, null); @@ -480,12 +390,7 @@ public class RMNodesImplUnitTest extends BaseUnitTest NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService); when(mockedNodeService.getType(nodeRef)).thenReturn(RecordsManagementModel.TYPE_RECORD_FOLDER); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); List includeParamList = new ArrayList(); includeParamList.add(RMNodes.PARAM_INCLUDE_IS_CLOSED); @@ -521,12 +426,7 @@ public class RMNodesImplUnitTest extends BaseUnitTest NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService); when(mockedNodeService.getType(nodeRef)).thenReturn(ContentModel.TYPE_CONTENT); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); List includeParamList = new ArrayList(); Node folderOrDocument = rmNodesImpl.getFolderOrDocument(nodeRef, null, null, includeParamList, null); @@ -545,12 +445,7 @@ public class RMNodesImplUnitTest extends BaseUnitTest NodeRef nodeRef = AlfMock.generateNodeRef(mockedNodeService); when(mockedNodeService.getType(nodeRef)).thenReturn(ContentModel.TYPE_CONTENT); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); List includeParamList = new ArrayList(); @@ -723,12 +618,7 @@ public class RMNodesImplUnitTest extends BaseUnitTest QName mockedType = AlfMock.generateQName(); when(mockedNodeService.getType(nodeRef)).thenReturn(mockedType); - NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); - when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); - NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); - ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); - when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); - when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + setupCompanyHomeAndPrimaryParent(nodeRef); rmNodesImpl.deleteNode(nodeRef.getId(), mockedParameters); verify(mockedFileFolderService, times(1)).delete(nodeRef); @@ -860,4 +750,36 @@ public class RMNodesImplUnitTest extends BaseUnitTest isRMSite = rmNodesImpl.isRMSite(parentNodeRef.getId()); assertEquals("Should return true.", true, isRMSite); } + + private void setupCompanyHomeAndPrimaryParent(NodeRef nodeRef) + { + NodeRef companyHomeNodeRef = AlfMock.generateNodeRef(mockedNodeService); + when(mockedRepositoryHelper.getCompanyHome()).thenReturn(companyHomeNodeRef); + NodeRef parentNodeRef = AlfMock.generateNodeRef(mockedNodeService); + ChildAssociationRef mockedChildAssoc = mock(ChildAssociationRef.class); + when(mockedChildAssoc.getParentRef()).thenReturn(parentNodeRef); + when(mockedNodeService.getPrimaryParent(nodeRef)).thenReturn(mockedChildAssoc); + } + + private void setPermissions(NodeRef nodeRef, AccessStatus permissionToSet) + { + when(mockedPermissionService.hasPermission(nodeRef, PermissionService.WRITE)).thenReturn(permissionToSet); + when(mockedPermissionService.hasPermission(nodeRef, PermissionService.DELETE)).thenReturn(permissionToSet); + when(mockedPermissionService.hasPermission(nodeRef, PermissionService.ADD_CHILDREN)).thenReturn(permissionToSet); + } + + private void checkSpecialContainersAllowedOperations(Node containerNode) + { + assertNotNull(containerNode); + assertTrue(RecordCategoryNode.class.isInstance(containerNode)); + + RecordCategoryNode resultNode = (RecordCategoryNode) containerNode; + assertEquals(false, resultNode.getIsRecordFolder()); + assertEquals(false, resultNode.getIsFile()); + assertEquals(true, resultNode.getIsCategory()); + List allowableOperations = resultNode.getAllowableOperations(); + assertTrue("Create operation should be available for provided container.", allowableOperations.contains(RMNodes.OP_CREATE)); + assertTrue("Update operation should be available for provided container.", allowableOperations.contains(RMNodes.OP_UPDATE)); + assertFalse("Delete operation should note be available for provided container.", allowableOperations.contains(RMNodes.OP_DELETE)); + } }