RM-6792 Optional Record Locn

This commit is contained in:
Sara Aspery
2019-04-24 11:42:42 +01:00
parent 78ed0e4404
commit 2c30614e8c
9 changed files with 360 additions and 8 deletions

View File

@@ -45,12 +45,15 @@ import java.util.HashSet;
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.disposition.DispositionSchedule;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
import org.alfresco.repo.policy.Behaviour;
import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.security.AccessStatus;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.apache.commons.collections.CollectionUtils;
@@ -69,6 +72,9 @@ public class RecordServiceImplUnitTest extends BaseUnitTest
{
private NodeRef nonStandardFilePlanComponent;
private NodeRef nonStandardFilePlan;
private NodeRef dmNodeRef;
private NodeRef unfiledRecordFolder;
private ChildAssociationRef parentAssoc;
private static QName TYPE_MY_FILE_PLAN = generateQName();
private static QName ASPECT_FOR_FILE_PLAN = generateQName();
@@ -84,6 +90,9 @@ public class RecordServiceImplUnitTest extends BaseUnitTest
nonStandardFilePlanComponent = generateNodeRef(TYPE_RECORD_CATEGORY);
nonStandardFilePlan = generateNodeRef(TYPE_MY_FILE_PLAN);
dmNodeRef = generateNodeRef(TYPE_CONTENT);
unfiledRecordFolder = generateNodeRef(TYPE_UNFILED_RECORD_FOLDER);
parentAssoc = mock(ChildAssociationRef.class);
// set-up node service
when(mockedNodeService.getProperty(nonStandardFilePlanComponent, PROP_ROOT_NODEREF)).thenReturn(nonStandardFilePlan);
@@ -462,4 +471,103 @@ public class RecordServiceImplUnitTest extends BaseUnitTest
// verify
verify(values, never()).add(nodeRef);
}
/**
* Given a file that is not yet a record
* When I create the record without specifying a location
* Then the record is created in the unfiled record folder
*/
@Test
public void createRecordIntoUnfiledRecordFolder()
{
mocksForRecordCreation();
// create the record
recordService.createRecord(nonStandardFilePlan, dmNodeRef);
// verify record was created in unfiled record container
verify(mockedNodeService, times(1)).moveNode(
dmNodeRef,
unfiledRecordFolder,
ContentModel.ASSOC_CONTAINS,
parentAssoc.getQName());
}
/**
* Given a file that is not yet a record
* When I create the record specifying the unfiled record folder
* Then the record is created in the unfiled record folder
*/
@Test
public void createRecordIntoSpecifiedUnfiledRecordFolder()
{
mocksForRecordCreation();
// create the record
recordService.createRecord(nonStandardFilePlan, dmNodeRef, unfiledRecordFolder);
// verify record was created in specified record folder
verify(mockedNodeService, times(1)).moveNode(
dmNodeRef,
unfiledRecordFolder,
ContentModel.ASSOC_CONTAINS,
parentAssoc.getQName());
}
/**
* Given a file that is not yet a record
* When I create the record specifying a location
* Then the record is created in the specified record folder
*/
@Test
public void createRecordIntoSpecifiedRecordFolder()
{
mocksForRecordCreation();
// create the record
recordService.createRecord(nonStandardFilePlan, dmNodeRef, recordFolder);
// verify record was created in specified record folder
verify(mockedNodeService, times(1)).moveNode(
dmNodeRef,
recordFolder,
ContentModel.ASSOC_CONTAINS,
parentAssoc.getQName());
}
/**
* Given a file that is not yet a record
* When I create the record specifying an invalid location
* Then an exception is thrown
*/
@Test(expected=AlfrescoRuntimeException.class)
public void createRecordIntoInvalidRecordFolder()
{
mocksForRecordCreation();
NodeRef recordCategory = generateNodeRef(TYPE_RECORD_CATEGORY);
// create the record
recordService.createRecord(nonStandardFilePlan, dmNodeRef, recordCategory);
}
/* Helper method to set up the mocks for record creation */
private void mocksForRecordCreation()
{
when(mockedNodeService.getPrimaryParent(dmNodeRef))
.thenReturn(parentAssoc);
when(parentAssoc.getQName()).thenReturn(generateQName());
// mocks for sanity checks on node and fileplan
when(mockedExtendedPermissionService.hasPermission(dmNodeRef, PermissionService.WRITE)).thenReturn(AccessStatus.ALLOWED);
when(mockedDictionaryService.isSubClass(mockedNodeService.getType(dmNodeRef), ContentModel.TYPE_CONTENT)).thenReturn(true);
when(mockedFilePlanService.isFilePlan(nonStandardFilePlan)).thenReturn(true);
// mocks for policies
doNothing().when(recordService).invokeBeforeRecordDeclaration(dmNodeRef);
doNothing().when(recordService).invokeOnRecordDeclaration(dmNodeRef);
when(mockedFilePlanService.getUnfiledContainer(nonStandardFilePlan)).thenReturn(unfiledRecordFolder);
when(mockedVersionService.getVersionHistory(dmNodeRef)).thenReturn(null);
}
}

View File

@@ -72,10 +72,12 @@ import org.alfresco.service.cmr.repository.CopyService;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef;
import org.alfresco.service.cmr.rule.RuleService;
import org.alfresco.service.cmr.search.SearchService;
import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.OwnableService;
import org.alfresco.service.cmr.security.PermissionService;
import org.alfresco.service.cmr.version.VersionService;
import org.alfresco.service.namespace.NamespaceService;
import org.alfresco.service.namespace.QName;
import org.alfresco.service.namespace.QNamePattern;
@@ -122,6 +124,8 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel
@Mock(name="copyService") protected CopyService mockedCopyService;
@Mock(name="fileFolderService") protected FileFolderService mockedFileFolderService;
@Mock(name="modelSecurityService") protected ModelSecurityService mockedModelSecurityService;
@Mock(name="ruleService") protected RuleService mockedRuleService;
@Mock(name="versionService") protected VersionService mockedVersionService;
/** rm service mocks */
@Mock(name="filePlanService") protected FilePlanService mockedFilePlanService;