diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-record-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-record-context.xml index f3e8e1f0c1..7837d4d9d1 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-record-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-record-context.xml @@ -108,6 +108,11 @@ parent="declarativeCapability"> + + + RECORD + + @@ -119,6 +124,26 @@ + + + + + + + RECORD + + + + + + + + + + + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-reference-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-reference-context.xml index 39ec906d7a..459b7790a2 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-reference-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/capability/rm-capabilities-reference-context.xml @@ -20,26 +20,4 @@ - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/capability-service.properties b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/capability-service.properties index 39dba8ecf9..64043f45a8 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/capability-service.properties +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/messages/capability-service.properties @@ -8,6 +8,7 @@ capability.RequestRecordInformation.title=Request Record Information capability.RejectRecords.title=Reject Records capability.FileUnfiledRecords.title=File Unfiled Records capability.LinkToRecords.title=Link Records +capability.DeleteLinks.title=Unlink Records # Metadata Control capability.group.metadataControl.title=Metadata Control @@ -32,7 +33,6 @@ capability.PlanningReviewCycles.title=Planning Review Cycles # References and Links capability.group.references.title=References capability.ChangeOrDeleteReferences.title=Change or Delete References -capability.DeleteLinks.title=Delete Links # Events capability.group.events.title=Events diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml index 8824e6275c..1b19e6e9df 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-action-context.xml @@ -817,7 +817,7 @@ - + @@ -844,6 +844,31 @@ + + + + + + + + + + + + + + + + org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction.execute=RM_CAP.0.rma:filePlanComponent.DeleteLinks + org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementAction.*=RM_ALLOW + org.alfresco.repo.action.executer.ActionExecuter.*=RM_ALLOW + + + + + + + diff --git a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml index b5697229ef..fa4c0486b2 100644 --- a/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml +++ b/rm-server/config/alfresco/module/org_alfresco_module_rm/rm-service-context.xml @@ -1111,6 +1111,7 @@ org.alfresco.module.org_alfresco_module_rm.record.RecordService.addRecordType=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.record.RecordService.makeRecord=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.record.RecordService.link=RM_ALLOW + org.alfresco.module.org_alfresco_module_rm.record.RecordService.unlink=RM_ALLOW org.alfresco.module.org_alfresco_module_rm.record.RecordService.*=RM_DENY ]]> diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UnlinkFromAction.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UnlinkFromAction.java new file mode 100644 index 0000000000..91e492ad19 --- /dev/null +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UnlinkFromAction.java @@ -0,0 +1,65 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * 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 . + */ +package org.alfresco.module.org_alfresco_module_rm.action.impl; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.model.ContentModel; +import org.alfresco.module.org_alfresco_module_rm.action.RMActionExecuterAbstractBase; +import org.alfresco.service.cmr.action.Action; +import org.alfresco.service.cmr.repository.NodeRef; + +/** + * Unlink from action implementation. + * + * @author Roy Wetherall + * @since 2.3 + */ +public class UnlinkFromAction extends RMActionExecuterAbstractBase +{ + /** action name */ + public static final String NAME = "unlinkFrom"; + + /** action parameters */ + public static final String PARAM_RECORD_FOLDER = "recordFolder"; + + /** + * @see org.alfresco.repo.action.executer.ActionExecuterAbstractBase#executeImpl(org.alfresco.service.cmr.action.Action, org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + protected void executeImpl(Action action, NodeRef actionedUponNodeRef) + { + // check that the actioned upon node reference exists and is of the correct type + if (getNodeService().exists(actionedUponNodeRef) && + !getNodeService().hasAspect(actionedUponNodeRef, ContentModel.ASPECT_PENDING_DELETE) && + getRecordService().isRecord(actionedUponNodeRef)) + { + // get the record folder we are unlinking from + String recordFolderValue = (String)action.getParameterValue(PARAM_RECORD_FOLDER); + if (recordFolderValue == null || recordFolderValue.isEmpty()) + { + // indicate that the record folder is mandatory + throw new AlfrescoRuntimeException("Can't unlink, because no record folder was provided."); + } + NodeRef recordFolder = new NodeRef(recordFolderValue); + + // unlink record from record folder + getRecordService().unlink(actionedUponNodeRef, recordFolder); + } + } +} \ No newline at end of file diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java index b12b032939..9b33b71687 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordService.java @@ -54,6 +54,8 @@ public interface RecordService /** * Disables the property editable check. + * + * @since 2.2 */ void disablePropertyEditableCheck(); @@ -61,6 +63,7 @@ public interface RecordService * Disables the property editable check for a given node in this transaction only. * * @param nodeRef node reference + * * @since 2.2 */ void disablePropertyEditableCheck(NodeRef nodeRef); @@ -249,10 +252,20 @@ public interface RecordService void makeRecord(NodeRef nodeRef); /** - * Creates a link for the specified document in target + * Links a record to a record folder * - * @param nodeRef The document node reference for which a link will be created - * @param folder The folder in which the link will be created + * @param record the record to link + * @param recordFolder the record folder to link it to */ - void link(NodeRef nodeRef, NodeRef folder); + void link(NodeRef record, NodeRef recordFolder); + + /** + * Unlinks a record from a specified record folder. + * + * @param record the record to unlink + * @param recordFolder the record folder to unlink it from + * + * @since 2.3 + */ + void unlink(NodeRef record, NodeRef recordFolder); } diff --git a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java index 6cba2aaf6c..fc8c16f3f2 100644 --- a/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java +++ b/rm-server/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java @@ -1635,14 +1635,68 @@ public class RecordServiceImpl extends BaseBehaviourBean * @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#link(NodeRef, NodeRef) */ @Override - public void link(NodeRef nodeRef, NodeRef folder) + public void link(NodeRef record, NodeRef recordFolder) { - ParameterCheck.mandatory("nodeRef", nodeRef); - ParameterCheck.mandatory("folder", folder); + ParameterCheck.mandatory("record", record); + ParameterCheck.mandatory("recordFolder", recordFolder); - if(isRecord(nodeRef) && isRecordFolder(folder)) + // ensure we are linking a record to a record folder + if(isRecord(record) && isRecordFolder(recordFolder)) { - nodeService.addChild(folder, nodeRef, ContentModel.ASSOC_CONTAINS, QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, nodeService.getProperty(nodeRef, ContentModel.PROP_NAME).toString())); + // ensure that we are not linking a record to an exisiting location + List parents = nodeService.getParentAssocs(record); + for (ChildAssociationRef parent : parents) + { + if (parent.getParentRef().equals(recordFolder)) + { + // we can not link a record to the same location more than once + throw new AlfrescoRuntimeException("Can not link a record to the same record folder more than once"); + } + } + + // get the current name of the record + String name = nodeService.getProperty(record, ContentModel.PROP_NAME).toString(); + + // create a secondary link to the record folder + nodeService.addChild( + recordFolder, + record, + ContentModel.ASSOC_CONTAINS, + QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, name)); + } + else + { + // can only link a record to a record folder + throw new AlfrescoRuntimeException("Can only link a record to a record folder."); + } + } + + /** + * @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#unlink(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef) + */ + @Override + public void unlink(NodeRef record, NodeRef recordFolder) + { + ParameterCheck.mandatory("record", record); + ParameterCheck.mandatory("recordFolder", recordFolder); + + // ensure we are unlinking a record from a record folder + if(isRecord(record) && isRecordFolder(recordFolder)) + { + // check that we are not trying to unlink the primary parent + NodeRef primaryParent = nodeService.getPrimaryParent(record).getParentRef(); + if (primaryParent.equals(recordFolder)) + { + throw new AlfrescoRuntimeException("Can't unlink a record from it's owning record folder."); + } + + // remove the link + nodeService.removeChild(recordFolder, record); + } + else + { + // can only unlink a record from a record folder + throw new AlfrescoRuntimeException("Can only unlink a record from a record folder."); } } diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UnlinkFromActionUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UnlinkFromActionUnitTest.java new file mode 100644 index 0000000000..60aa6f56f0 --- /dev/null +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/action/impl/UnlinkFromActionUnitTest.java @@ -0,0 +1,140 @@ +/* + * Copyright (C) 2005-2014 Alfresco Software Limited. + * + * This file is part of Alfresco + * + * 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 . + */ +package org.alfresco.module.org_alfresco_module_rm.action.impl; + +import static org.mockito.Mockito.*; + +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; +import org.alfresco.service.cmr.action.Action; +import org.alfresco.service.cmr.repository.NodeRef; +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; + +/** + * Unit test for unlink from action + * + * @author Roy Wetherall + * @since 2.3 + */ +public class UnlinkFromActionUnitTest extends BaseUnitTest +{ + private NodeRef record; + private NodeRef recordFolder; + + @InjectMocks + private UnlinkFromAction action; + + @Before + @Override + public void before() throws Exception + { + super.before(); + + record = generateRecord(); + recordFolder = generateRecordFolder(); + } + + /** + * Given the actioned upon node does not exist + * When the action is executed + * Then nothing happens + */ + @Test + public void nodeDoesNotExist() + { + doReturn(false).when(mockedNodeService).exists(record); + action.executeImpl(mock(Action.class), record); + verify(mockedRecordService, never()).unlink(any(NodeRef.class), any(NodeRef.class)); + } + + /** + * Given the actioned upon node is pending delete + * When the action is executed + * Then nothing happens + */ + @Test + public void nodePendingDelete() + { + doReturn(true).when(mockedNodeService).exists(record); + doReturn(true).when(mockedNodeService).hasAspect(record, ASPECT_PENDING_DELETE); + action.executeImpl(mock(Action.class), record); + verify(mockedRecordService, never()).unlink(any(NodeRef.class), any(NodeRef.class)); + } + + /** + * Given that actioned upon node is not a record + * When the action is executed + * Then nothing happens + */ + @Test + public void nodeNotRecord() + { + NodeRef notRecord = generateCmContent(generateText()); + doReturn(true).when(mockedNodeService).exists(notRecord); + doReturn(false).when(mockedNodeService).hasAspect(notRecord, ASPECT_PENDING_DELETE); + action.executeImpl(mock(Action.class), notRecord); + verify(mockedRecordService, never()).unlink(any(NodeRef.class), any(NodeRef.class)); + } + + /** + * Given that the record folder parameter is not provided + * When the action is executed + * Then an exception is thrown + */ + @Test(expected=AlfrescoRuntimeException.class) + public void recordFolderParamMissing() + { + // setup record + doReturn(true).when(mockedNodeService).exists(record); + doReturn(false).when(mockedNodeService).hasAspect(record, ASPECT_PENDING_DELETE); + + // create action mock + Action mockedAction = mock(Action.class); + doReturn(null).when(mockedAction).getParameterValue(UnlinkFromAction.PARAM_RECORD_FOLDER); + + // execute action + action.executeImpl(mockedAction, record); + } + + /** + * Given that a valid record folder is provided + * When the action is executed + * Then the record is unlinked from the record folder + */ + @Test + public void validUnlink() + { + // setup record + doReturn(true).when(mockedNodeService).exists(record); + doReturn(false).when(mockedNodeService).hasAspect(record, ASPECT_PENDING_DELETE); + + // create action mock + Action mockedAction = mock(Action.class); + doReturn(recordFolder.toString()).when(mockedAction).getParameterValue(UnlinkFromAction.PARAM_RECORD_FOLDER); + + // execute action + action.executeImpl(mockedAction, record); + + // verify unlink + verify(mockedRecordService, times(1)).unlink(record, recordFolder); + } + +} diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java index 72e7fd7ee3..4dd0670268 100755 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java @@ -21,13 +21,19 @@ package org.alfresco.module.org_alfresco_module_rm.record; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; import java.util.Map; import java.util.Set; +import org.alfresco.error.AlfrescoRuntimeException; +import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; import org.alfresco.service.cmr.repository.NodeRef; +import org.alfresco.service.namespace.NamespaceService; import org.alfresco.service.namespace.QName; import org.apache.commons.collections.CollectionUtils; import org.junit.Before; @@ -81,4 +87,157 @@ public class RecordServiceImplUnitTest extends BaseUnitTest assertEquals(1, types.size()); assertTrue(types.contains(TYPE_FILE_PLAN)); } + + /** + * Given invalid types + * When linking + * Then exception thrown + */ + @Test + public void linkNonRecord() + { + NodeRef nonRecord = generateNodeRef(TYPE_CONTENT); + NodeRef recordFolder = generateRecordFolder(); + + // set expected exception + exception.expect(AlfrescoRuntimeException.class); + + // link + recordService.link(nonRecord, recordFolder); + } + @Test + public void linkNonRecordFolder() + { + NodeRef record = generateRecord(); + NodeRef nonRecordFolder = generateNodeRef(TYPE_FOLDER); + + // set expected exception + exception.expect(AlfrescoRuntimeException.class); + + // link + recordService.link(record, nonRecordFolder); + } + + /** + * Given that the record is already a child of the record folder + * When I try to link the record to the same record folder + * Then an exception is thrown + */ + @Test + public void linkRecordToRecordFolderFailsIfAlreadyAChild() + { + NodeRef record = generateRecord(); + NodeRef recordFolder = generateRecordFolder(); + + // given that the record is already a child of the record folder + makeChildrenOf(recordFolder, record); + + // set expected exception + exception.expect(AlfrescoRuntimeException.class); + + // link + recordService.link(record, recordFolder); + } + + /** + * Given a record that is not a child of a record folder + * When I link the record to the record folder + * Then the record is now linked to the record folder + */ + @Test + public void linkRecordToRecordFolder() + { + NodeRef record = generateRecord(); + NodeRef recordFolder = generateRecordFolder(); + + // given that the record is already a child of the record folder + makeChildrenOf(generateRecordFolder(), record); + + // set the name of the record + String name = generateText(); + doReturn(name).when(mockedNodeService).getProperty(record, PROP_NAME); + + // link + recordService.link(record, recordFolder); + + // verify link was created + verify(mockedNodeService, times(1)).addChild( + recordFolder, + record, + ContentModel.ASSOC_CONTAINS, + QName.createQName(NamespaceService.CONTENT_MODEL_1_0_URI, name)); + } + + /** + * Given invalid types + * When unlinking + * Then exception thrown + */ + @Test + public void unlinkNonRecord() + { + NodeRef nonRecord = generateNodeRef(TYPE_CONTENT); + NodeRef recordFolder = generateRecordFolder(); + + // set expected exception + exception.expect(AlfrescoRuntimeException.class); + + // unlink + recordService.unlink(nonRecord, recordFolder); + } + @Test + public void unlinkNonRecordFolder() + { + NodeRef record = generateRecord(); + NodeRef nonRecordFolder = generateNodeRef(TYPE_FOLDER); + + // set expected exception + exception.expect(AlfrescoRuntimeException.class); + + // unlink + recordService.unlink(record, nonRecordFolder); + } + + /** + * Given a record folder is a records primary parent + * When I try and unlink the record from that record folder + * Then an exception is thrown + */ + @Test + public void unlinkRecordFromPrimaryRecordFolder() + { + NodeRef record = generateRecord(); + NodeRef recordFolder = generateRecordFolder(); + + // given that the record is already a child of the record folder + makePrimaryParentOf(record, recordFolder); + + // set expected exception + exception.expect(AlfrescoRuntimeException.class); + + // link + recordService.unlink(record, recordFolder); + } + + /** + * Given a record that is linked to a record + * And that the record is not the primary parent of the record + * When I unlink the record to the record folder + * Then the record is no longer linked to the record folder + */ + @Test + public void unlinkRecordFromRecordFolder() + { + NodeRef record = generateRecord(); + NodeRef recordFolder = generateRecordFolder(); + + // the records primary parent is another record folder + makePrimaryParentOf(record, generateRecordFolder()); + + // unlink + recordService.unlink(record, recordFolder); + + // verify link was created + verify(mockedNodeService, times(1)).removeChild(recordFolder, record); + } } diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/AllUnitTestSuite.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/AllUnitTestSuite.java index 7bdde55429..6e23e8abc8 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/AllUnitTestSuite.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/AllUnitTestSuite.java @@ -19,6 +19,7 @@ package org.alfresco.module.org_alfresco_module_rm.test; import org.alfresco.module.org_alfresco_module_rm.action.impl.FileReportActionUnitTest; +import org.alfresco.module.org_alfresco_module_rm.action.impl.UnlinkFromActionUnitTest; import org.alfresco.module.org_alfresco_module_rm.bootstrap.BootstrapImporterModuleComponentUnitTest; import org.alfresco.module.org_alfresco_module_rm.bootstrap.RecordContributorsGroupBootstrapComponentUnitTest; import org.alfresco.module.org_alfresco_module_rm.capability.declarative.condition.HoldCapabilityConditionUnitTest; @@ -77,6 +78,7 @@ import org.junit.runners.Suite.SuiteClasses; // action implementations FileReportActionUnitTest.class, + UnlinkFromActionUnitTest.class, // patches RMv22RemoveInPlaceRolesFromAllPatchUnitTest.class, diff --git a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java index aeed762559..079a1f33d9 100644 --- a/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java +++ b/rm-server/unit-test/java/org/alfresco/module/org_alfresco_module_rm/test/util/BaseUnitTest.java @@ -29,6 +29,7 @@ import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.Collections; import java.util.List; +import java.util.UUID; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.action.RecordsManagementActionService; @@ -221,6 +222,15 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel doReturn("admin").when(mockedAuthenticationUtil).getAdminUserName(); doReturn("admin").when(mockedAuthenticationUtil).getFullyAuthenticatedUser(); } + + /** + * Helper to generate random text value suitable for a property + * value or node name + */ + protected String generateText() + { + return UUID.randomUUID().toString(); + } /** * Helper method to generate a qname. @@ -393,9 +403,9 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel for (NodeRef child : children) { assocs.add(new ChildAssociationRef(ContentModel.ASSOC_CONTAINS, parent, generateQName(), child)); + doReturn(assocs).when(mockedNodeService).getParentAssocs(child); } - - doReturn(assocs).when(mockedNodeService).getChildAssocs(parent, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); + doReturn(assocs).when(mockedNodeService).getChildAssocs(parent, ContentModel.ASSOC_CONTAINS, RegexQNamePattern.MATCH_ALL); } @SuppressWarnings("unchecked")