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..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 @@ -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; @@ -128,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(); @@ -157,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); @@ -187,6 +176,37 @@ 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); + + setupCompanyHomeAndPrimaryParent(nodeRef); + + when(mockedFilePlanService.isFilePlanComponent(nodeRef)).thenReturn(true); + List includeParamList = new ArrayList(); + includeParamList.add(RMNodes.PARAM_INCLUDE_ALLOWABLEOPERATIONS); + + setPermissions(nodeRef, 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 { @@ -194,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 @@ -233,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); @@ -256,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 @@ -276,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); @@ -302,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 @@ -324,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(); @@ -351,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); @@ -375,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); @@ -417,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); @@ -441,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); @@ -482,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); @@ -506,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(); @@ -684,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); @@ -821,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)); + } }