Revert "RM-6792 Oliver strings and fix closed folder and tests"

This reverts commit c511397270
This commit is contained in:
Sara Aspery
2019-05-10 15:44:32 +01:00
parent c511397270
commit 57358c259a
9 changed files with 9 additions and 398 deletions

View File

@@ -16,9 +16,6 @@
<!-- TODO rename --> <!-- TODO rename -->
<bean id="create-record" parent="action-executer" class="org.alfresco.module.org_alfresco_module_rm.action.dm.CreateRecordAction"> <bean id="create-record" parent="action-executer" class="org.alfresco.module.org_alfresco_module_rm.action.dm.CreateRecordAction">
<property name="recordService" ref="RecordService" /> <property name="recordService" ref="RecordService" />
<property name="authenticationUtil" ref="rm.authenticationUtil" />
<property name="filePlanService" ref="FilePlanService" />
<property name="nodeService" ref="NodeService" />
<property name="applicableTypes"> <property name="applicableTypes">
<list> <list>
<value>{http://www.alfresco.org/model/content/1.0}content</value> <value>{http://www.alfresco.org/model/content/1.0}content</value>

View File

@@ -48,10 +48,9 @@ isRecordType.description=Records have a specified record type
# #
# Declare As Record # Declare As Record
create-record.title=Declare as Record create-record.title=Declare as Record
create-record.description=Declares file as a record and optionally files it create-record.description=Declares file as a record
create-record.file-plan.display-label=File Plan create-record.file-plan.display-label=File Plan
create-record.hide-record.display-label=Hide Record create-record.hide-record.display-label=Hide Record
create-record.path.display-label=Destination Record Folder Path
# Declare As Version Record # Declare As Version Record
declare-as-version-record.title=Declare Version as Record declare-as-version-record.title=Declare Version as Record
declare-as-version-record.description=Declares this version of the file as a record declare-as-version-record.description=Declares this version of the file as a record

View File

@@ -27,27 +27,16 @@
package org.alfresco.module.org_alfresco_module_rm.action.dm; package org.alfresco.module.org_alfresco_module_rm.action.dm;
import java.util.Arrays;
import java.util.List; import java.util.List;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.action.AuditableActionExecuterAbstractBase; import org.alfresco.module.org_alfresco_module_rm.action.AuditableActionExecuterAbstractBase;
import org.alfresco.module.org_alfresco_module_rm.fileplan.FilePlanService;
import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService; import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.module.org_alfresco_module_rm.util.AuthenticationUtil;
import org.alfresco.repo.action.ParameterDefinitionImpl; import org.alfresco.repo.action.ParameterDefinitionImpl;
import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.action.ParameterDefinition; import org.alfresco.service.cmr.action.ParameterDefinition;
import org.alfresco.service.cmr.dictionary.DataTypeDefinition; import org.alfresco.service.cmr.dictionary.DataTypeDefinition;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.namespace.QName;
import org.springframework.util.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/** /**
* Creates a new record from an existing content object. * Creates a new record from an existing content object.
@@ -59,53 +48,16 @@ import org.apache.commons.logging.LogFactory;
public class CreateRecordAction extends AuditableActionExecuterAbstractBase public class CreateRecordAction extends AuditableActionExecuterAbstractBase
implements RecordsManagementModel implements RecordsManagementModel
{ {
/** Logger */
private static final Log LOGGER = LogFactory.getLog(CreateRecordAction.class);
/** Action name */ /** Action name */
public static final String NAME = "create-record"; public static final String NAME = "create-record";
/** Parameter names */ /** Parameter names */
public static final String PARAM_FILE_PLAN = "file-plan"; public static final String PARAM_FILE_PLAN = "file-plan";
public static final String PARAM_HIDE_RECORD = "hide-record"; public static final String PARAM_HIDE_RECORD = "hide-record";
public static final String PARAM_PATH = "path";
/** Node service */
private NodeService nodeService;
/** File plan service */
private FilePlanService filePlanService;
/** Authentication util */
private AuthenticationUtil authenticationUtil;
/** Record service */ /** Record service */
private RecordService recordService; private RecordService recordService;
/**
* @param nodeService node service
*/
public void setNodeService(NodeService nodeService)
{
this.nodeService = nodeService;
}
/**
* @param filePlanService file plan service
*/
public void setFilePlanService(FilePlanService filePlanService)
{
this.filePlanService = filePlanService;
}
/**
* @param authenticationUtil authentication util
*/
public void setAuthenticationUtil(AuthenticationUtil authenticationUtil)
{
this.authenticationUtil = authenticationUtil;
}
/** /**
* @param recordService record service * @param recordService record service
*/ */
@@ -122,14 +74,6 @@ public class CreateRecordAction extends AuditableActionExecuterAbstractBase
{ {
NodeRef filePlan = (NodeRef) action.getParameterValue(PARAM_FILE_PLAN); NodeRef filePlan = (NodeRef) action.getParameterValue(PARAM_FILE_PLAN);
// resolve destination record folder if path supplied
NodeRef destinationRecordFolder = null;
String pathParameter = (String) action.getParameterValue(PARAM_PATH);
if (pathParameter != null && !pathParameter.isEmpty())
{
destinationRecordFolder = resolvePath(filePlan, pathParameter);
}
// indicate whether the record should be hidden or not (default not) // indicate whether the record should be hidden or not (default not)
boolean hideRecord = false; boolean hideRecord = false;
Boolean hideRecordValue = ((Boolean) action.getParameterValue(PARAM_HIDE_RECORD)); Boolean hideRecordValue = ((Boolean) action.getParameterValue(PARAM_HIDE_RECORD));
@@ -141,12 +85,7 @@ public class CreateRecordAction extends AuditableActionExecuterAbstractBase
synchronized (this) synchronized (this)
{ {
// create record from existing document // create record from existing document
recordService.createRecord(filePlan, actionedUponNodeRef, destinationRecordFolder, !hideRecord); recordService.createRecord(filePlan, actionedUponNodeRef, !hideRecord);
if (destinationRecordFolder != null)
{
recordService.file(actionedUponNodeRef);
}
} }
} }
@@ -158,102 +97,6 @@ public class CreateRecordAction extends AuditableActionExecuterAbstractBase
{ {
// NOTE: commented out for now so that it doesn't appear in the UI ... enable later when multi-file plan support is added // NOTE: commented out for now so that it doesn't appear in the UI ... enable later when multi-file plan support is added
//params.add(new ParameterDefinitionImpl(PARAM_FILE_PLAN, DataTypeDefinition.NODE_REF, false, getParamDisplayLabel(PARAM_FILE_PLAN))); //params.add(new ParameterDefinitionImpl(PARAM_FILE_PLAN, DataTypeDefinition.NODE_REF, false, getParamDisplayLabel(PARAM_FILE_PLAN)));
params.add(new ParameterDefinitionImpl(PARAM_PATH, DataTypeDefinition.TEXT, false, getParamDisplayLabel(PARAM_PATH)));
params.add(new ParameterDefinitionImpl(PARAM_HIDE_RECORD, DataTypeDefinition.BOOLEAN, false, getParamDisplayLabel(PARAM_HIDE_RECORD))); params.add(new ParameterDefinitionImpl(PARAM_HIDE_RECORD, DataTypeDefinition.BOOLEAN, false, getParamDisplayLabel(PARAM_HIDE_RECORD)));
} }
/**
* Helper method to get the target record folder node reference from the action path parameter
*
* @param filePlan The filePlan containing the path
* @param pathParameter The path
* @return The NodeRef of the resolved path
*/
private NodeRef resolvePath(NodeRef filePlan, final String pathParameter)
{
NodeRef destinationFolder;
if (filePlan == null)
{
filePlan = getDefaultFilePlan();
}
final String[] pathElementsArray = StringUtils.tokenizeToStringArray(pathParameter, "/", false, true);
if ((pathElementsArray != null) && (pathElementsArray.length > 0))
{
destinationFolder = resolvePath(filePlan, Arrays.asList(pathElementsArray));
// destination must be a record folder
QName nodeType = nodeService.getType(destinationFolder);
if (!nodeType.equals(RecordsManagementModel.TYPE_RECORD_FOLDER))
{
throw new AlfrescoRuntimeException("Unable to execute " + NAME + " action, because the destination path is not a record folder.");
}
}
else
{
throw new AlfrescoRuntimeException("Unable to execute " + NAME + " action, because the destination path could not be found.");
}
return destinationFolder;
}
/**
* Helper method to recursively get the next path element node reference from the action path parameter
*
* @param parent The parent of the path elements
* @param pathElements The path elements still to be resolved
* @return The NodeRef of the resolved path element
*/
private NodeRef resolvePath(NodeRef parent, List<String> pathElements)
{
NodeRef nodeRef;
String childName = pathElements.get(0);
nodeRef = nodeService.getChildByName(parent, ContentModel.ASSOC_CONTAINS, childName);
if (nodeRef == null)
{
throw new AlfrescoRuntimeException("Unable to execute " + NAME + " action, because the destination path could not be resolved.");
}
else
{
QName nodeType = nodeService.getType(nodeRef);
if (nodeType.equals(RecordsManagementModel.TYPE_HOLD_CONTAINER) ||
nodeType.equals(RecordsManagementModel.TYPE_TRANSFER_CONTAINER) ||
nodeType.equals(RecordsManagementModel.TYPE_UNFILED_RECORD_CONTAINER))
{
throw new AlfrescoRuntimeException("Unable to execute " + NAME + " action, because the destination path is invalid.");
}
}
if (pathElements.size() > 1)
{
nodeRef = resolvePath(nodeRef, pathElements.subList(1, pathElements.size()));
}
return nodeRef;
}
/**
* Helper method to get the default RM filePlan
*
* @return The NodeRef of the default RM filePlan
*/
private NodeRef getDefaultFilePlan()
{
NodeRef filePlan = authenticationUtil.runAsSystem(new org.alfresco.repo.security.authentication.AuthenticationUtil.RunAsWork<NodeRef>()
{
@Override
public NodeRef doWork()
{
return filePlanService.getFilePlanBySiteId(FilePlanService.DEFAULT_RM_SITE_ID);
}
});
// if the file plan is still null, raise an exception
if (filePlan == null)
{
LOGGER.debug("Unable to execute " + NAME + " action, because the fileplan path could not be determined. Make sure at least one file plan has been created.");
throw new AlfrescoRuntimeException("Unable to execute " + NAME + " action, because the fileplan path could not be determined.");
}
return filePlan;
}
} }

View File

@@ -159,31 +159,6 @@ public interface RecordService
*/ */
boolean isDeclared(NodeRef nodeRef); boolean isDeclared(NodeRef nodeRef);
/**
* Creates a new record from an existing node and files it into the specified location.
* <p>
* Note that the node reference of the record will be the same as the original
* document.
*
* @param filePlan The filePlan in which the record should be placed. filePlan can be <code>null</code> in this case the default RM site will be used.
* @param nodeRef The node from which the record will be created
* @param locationNodeRef The container in which the record will be created
* @param isLinked indicates if the newly created record is linked to it's original location or not.
*/
void createRecord(final NodeRef filePlan, final NodeRef nodeRef, final NodeRef locationNodeRef, final boolean isLinked);
/**
* Creates a new record from an existing node and files it into the specified location.
* <p>
* Note that the node reference of the record will be the same as the original
* document.
*
* @param filePlan The filePlan in which the record should be placed. filePlan can be <code>null</code> in this case the default RM site will be used.
* @param nodeRef The node from which the record will be created
* @param locationNodeRef The container in which the record will be created
*/
void createRecord(final NodeRef filePlan, final NodeRef nodeRef, final NodeRef locationNodeRef);
/** /**
* Creates a new unfiled record from an existing node. * Creates a new unfiled record from an existing node.
* <p> * <p>

View File

@@ -812,7 +812,7 @@ public class RecordServiceImpl extends BaseBehaviourBean
} }
/** /**
* @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#getRecordMetadataAspects(org.alfresco.service.cmr.repository.NodeRef) * @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#getRecordMetaDataAspects(org.alfresco.service.cmr.repository.NodeRef)
*/ */
@Override @Override
public Set<QName> getRecordMetadataAspects(NodeRef nodeRef) public Set<QName> getRecordMetadataAspects(NodeRef nodeRef)
@@ -861,27 +861,8 @@ public class RecordServiceImpl extends BaseBehaviourBean
*/ */
@Override @Override
public void createRecord(final NodeRef filePlan, final NodeRef nodeRef, final boolean isLinked) public void createRecord(final NodeRef filePlan, final NodeRef nodeRef, final boolean isLinked)
{
createRecord(filePlan, nodeRef, null, isLinked);
}
/**
* @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#createRecord(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef)
*/
@Override
public void createRecord(final NodeRef filePlan, final NodeRef nodeRef, final NodeRef destinationNodeRef)
{
createRecord(filePlan, nodeRef, destinationNodeRef, true);
}
/**
* @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#createRecord(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef, boolean)
*/
@Override
public void createRecord(final NodeRef filePlan, final NodeRef nodeRef, final NodeRef destinationNodeRef, final boolean isLinked)
{ {
// filePlan can be null. In this case the default RM site will be used. // filePlan can be null. In this case the default RM site will be used.
// locationNodeRef can be null. In this case the unfiled record container will be used
ParameterCheck.mandatory("nodeRef", nodeRef); ParameterCheck.mandatory("nodeRef", nodeRef);
ParameterCheck.mandatory("isLinked", isLinked); ParameterCheck.mandatory("isLinked", isLinked);
@@ -901,33 +882,11 @@ public class RecordServiceImpl extends BaseBehaviourBean
ruleService.disableRuleType("outbound"); ruleService.disableRuleType("outbound");
try try
{ {
NodeRef newRecordContainer = destinationNodeRef; // get the new record container for the file plan
// if optional location not specified, use the unfiledContainer NodeRef newRecordContainer = filePlanService.getUnfiledContainer(checkedFilePlan);
if (newRecordContainer == null) if (newRecordContainer == null)
{ {
// get the new record container for the file plan throw new AlfrescoRuntimeException("Unable to create record, because new record container could not be found.");
newRecordContainer = filePlanService.getUnfiledContainer(checkedFilePlan);
if (newRecordContainer == null)
{
throw new AlfrescoRuntimeException("Unable to create record, because new record container could not be found.");
}
}
// if optional location supplied, check that it is a valid record folder
else
{
QName nodeType = nodeService.getType(newRecordContainer);
if(!(nodeType.equals(RecordsManagementModel.TYPE_RECORD_FOLDER) ||
nodeType.equals(RecordsManagementModel.TYPE_UNFILED_RECORD_FOLDER)))
{
throw new AlfrescoRuntimeException("Unable to create record, because container is not a valid type for new record.");
}
Boolean isClosed = (Boolean) nodeService.getProperty(newRecordContainer, PROP_IS_CLOSED);
if (isClosed != null && isClosed)
{
throw new AlfrescoRuntimeException("Unable to create record, because container is closed.");
}
} }
// get the documents readers and writers // get the documents readers and writers
@@ -1243,7 +1202,7 @@ public class RecordServiceImpl extends BaseBehaviourBean
} }
/** /**
* @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#createRecordFromContent(org.alfresco.service.cmr.repository.NodeRef, java.lang.String, org.alfresco.service.namespace.QName, java.util.Map, org.alfresco.service.cmr.repository.ContentReader) * @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#createNewRecord(org.alfresco.service.cmr.repository.NodeRef, java.lang.String, org.alfresco.service.namespace.QName, java.util.Map, org.alfresco.service.cmr.repository.ContentReader)
*/ */
@Override @Override
public NodeRef createRecordFromContent(NodeRef parent, String name, QName type, Map<QName, Serializable> properties, ContentReader reader) public NodeRef createRecordFromContent(NodeRef parent, String name, QName type, Map<QName, Serializable> properties, ContentReader reader)
@@ -1363,7 +1322,7 @@ public class RecordServiceImpl extends BaseBehaviourBean
} }
/** /**
* @see org.alfresco.module.org_alfresco_module_rm.record.RecordService#isFiled(org.alfresco.service.cmr.repository.NodeRef) * @see org.alfresco.module.org_alfresco_module_rm.disposableitem.RecordService#isFiled(org.alfresco.service.cmr.repository.NodeRef)
*/ */
@Override @Override
public boolean isFiled(final NodeRef nodeRef) public boolean isFiled(final NodeRef nodeRef)

View File

@@ -31,7 +31,6 @@ import org.alfresco.module.org_alfresco_module_rm.action.dm.CreateRecordAction;
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
import org.alfresco.service.cmr.action.Action; import org.alfresco.service.cmr.action.Action;
import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.security.AccessStatus; import org.alfresco.service.cmr.security.AccessStatus;
/** /**
@@ -53,13 +52,6 @@ public class CreateRecordActionTest extends BaseRMTestCase
return true; return true;
} }
/**
* Test create record action
*
* Given a collaboration site document
* When the create record action is executed for that document
* Then a record is created for it
*/
public void testCreateRecordAction() public void testCreateRecordAction()
{ {
doTestInTransaction(new Test<Void>() doTestInTransaction(new Test<Void>()
@@ -83,45 +75,8 @@ public class CreateRecordActionTest extends BaseRMTestCase
assertEquals(AccessStatus.ALLOWED, permissionService.hasPermission(dmDocument, RMPermissionModel.READ_RECORDS)); assertEquals(AccessStatus.ALLOWED, permissionService.hasPermission(dmDocument, RMPermissionModel.READ_RECORDS));
assertEquals(AccessStatus.ALLOWED, permissionService.hasPermission(filePlan, RMPermissionModel.VIEW_RECORDS)); assertEquals(AccessStatus.ALLOWED, permissionService.hasPermission(filePlan, RMPermissionModel.VIEW_RECORDS));
} };
}, },
dmCollaborator); dmCollaborator);
} }
/**
* Test create record action with optional location
*
* Given a collaboration site document
* When the create record action with optional record location is executed for that document
* Then a record is created for it and filed in the specified location
*/
public void testCreateRecordActionWithLocation()
{
doTestInTransaction(new Test<Void>()
{
public Void run()
{
assertFalse(recordService.isRecord(dmDocument1));
Action action = actionService.createAction(CreateRecordAction.NAME);
action.setParameterValue(CreateRecordAction.PARAM_HIDE_RECORD, false);
action.setParameterValue(CreateRecordAction.PARAM_FILE_PLAN, filePlan);
action.setParameterValue(CreateRecordAction.PARAM_PATH, "rmContainer/rmFolder");
actionService.executeAction(action, dmDocument1);
return null;
}
public void test(Void result) throws Exception
{
assertTrue(recordService.isRecord(dmDocument1));
assertTrue(recordService.isFiled(dmDocument1));
// is the record folder the primary parent of the filed record
NodeRef parent = nodeService.getPrimaryParent(dmDocument1).getParentRef();
assertEquals(rmFolder, parent);
}
},
ADMIN_USER);
}
} }

View File

@@ -123,7 +123,6 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
/** test data */ /** test data */
protected String NAME_DM_DOCUMENT = "collabDocument.txt"; protected String NAME_DM_DOCUMENT = "collabDocument.txt";
protected String NAME_DM_DOCUMENT1 = "collabDocument1.txt";
/** admin user */ /** admin user */
protected static final String ADMIN_USER = "admin"; protected static final String ADMIN_USER = "admin";
@@ -274,9 +273,7 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
protected SiteInfo collaborationSite; protected SiteInfo collaborationSite;
protected NodeRef documentLibrary; protected NodeRef documentLibrary;
protected NodeRef dmFolder; protected NodeRef dmFolder;
protected NodeRef dmFolder1;
protected NodeRef dmDocument; protected NodeRef dmDocument;
protected NodeRef dmDocument1;
/** collaboration site users */ /** collaboration site users */
protected String dmConsumer; protected String dmConsumer;
@@ -789,8 +786,6 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
// create a folder and documents // create a folder and documents
dmFolder = fileFolderService.create(documentLibrary, "collabFolder", ContentModel.TYPE_FOLDER).getNodeRef(); dmFolder = fileFolderService.create(documentLibrary, "collabFolder", ContentModel.TYPE_FOLDER).getNodeRef();
dmDocument = fileFolderService.create(dmFolder, NAME_DM_DOCUMENT, ContentModel.TYPE_CONTENT).getNodeRef(); dmDocument = fileFolderService.create(dmFolder, NAME_DM_DOCUMENT, ContentModel.TYPE_CONTENT).getNodeRef();
dmFolder1 = fileFolderService.create(documentLibrary, "collabFolder1", ContentModel.TYPE_FOLDER).getNodeRef();
dmDocument1 = fileFolderService.create(dmFolder1, NAME_DM_DOCUMENT1, ContentModel.TYPE_CONTENT).getNodeRef();
dmConsumer = GUID.generate(); dmConsumer = GUID.generate();
dmConsumerNodeRef = createPerson(dmConsumer); dmConsumerNodeRef = createPerson(dmConsumer);

View File

@@ -45,15 +45,12 @@ import java.util.HashSet;
import java.util.Map; import java.util.Map;
import java.util.Set; import java.util.Set;
import org.alfresco.error.AlfrescoRuntimeException;
import org.alfresco.model.ContentModel; import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest;
import org.alfresco.repo.policy.Behaviour; import org.alfresco.repo.policy.Behaviour;
import org.alfresco.service.cmr.repository.ChildAssociationRef; import org.alfresco.service.cmr.repository.ChildAssociationRef;
import org.alfresco.service.cmr.repository.NodeRef; 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.NamespaceService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.apache.commons.collections.CollectionUtils; import org.apache.commons.collections.CollectionUtils;
@@ -72,9 +69,6 @@ public class RecordServiceImplUnitTest extends BaseUnitTest
{ {
private NodeRef nonStandardFilePlanComponent; private NodeRef nonStandardFilePlanComponent;
private NodeRef nonStandardFilePlan; private NodeRef nonStandardFilePlan;
private NodeRef dmNodeRef;
private NodeRef unfiledRecordFolder;
private ChildAssociationRef parentAssoc;
private static QName TYPE_MY_FILE_PLAN = generateQName(); private static QName TYPE_MY_FILE_PLAN = generateQName();
private static QName ASPECT_FOR_FILE_PLAN = generateQName(); private static QName ASPECT_FOR_FILE_PLAN = generateQName();
@@ -90,9 +84,6 @@ public class RecordServiceImplUnitTest extends BaseUnitTest
nonStandardFilePlanComponent = generateNodeRef(TYPE_RECORD_CATEGORY); nonStandardFilePlanComponent = generateNodeRef(TYPE_RECORD_CATEGORY);
nonStandardFilePlan = generateNodeRef(TYPE_MY_FILE_PLAN); nonStandardFilePlan = generateNodeRef(TYPE_MY_FILE_PLAN);
dmNodeRef = generateNodeRef(TYPE_CONTENT);
unfiledRecordFolder = generateNodeRef(TYPE_UNFILED_RECORD_FOLDER);
parentAssoc = mock(ChildAssociationRef.class);
// set-up node service // set-up node service
when(mockedNodeService.getProperty(nonStandardFilePlanComponent, PROP_ROOT_NODEREF)).thenReturn(nonStandardFilePlan); when(mockedNodeService.getProperty(nonStandardFilePlanComponent, PROP_ROOT_NODEREF)).thenReturn(nonStandardFilePlan);
@@ -471,103 +462,4 @@ public class RecordServiceImplUnitTest extends BaseUnitTest
// verify // verify
verify(values, never()).add(nodeRef); 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,12 +72,10 @@ import org.alfresco.service.cmr.repository.CopyService;
import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.cmr.repository.NodeRef;
import org.alfresco.service.cmr.repository.NodeService; import org.alfresco.service.cmr.repository.NodeService;
import org.alfresco.service.cmr.repository.StoreRef; 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.search.SearchService;
import org.alfresco.service.cmr.security.AuthorityService; import org.alfresco.service.cmr.security.AuthorityService;
import org.alfresco.service.cmr.security.OwnableService; import org.alfresco.service.cmr.security.OwnableService;
import org.alfresco.service.cmr.security.PermissionService; 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.NamespaceService;
import org.alfresco.service.namespace.QName; import org.alfresco.service.namespace.QName;
import org.alfresco.service.namespace.QNamePattern; import org.alfresco.service.namespace.QNamePattern;
@@ -124,8 +122,6 @@ public class BaseUnitTest implements RecordsManagementModel, ContentModel
@Mock(name="copyService") protected CopyService mockedCopyService; @Mock(name="copyService") protected CopyService mockedCopyService;
@Mock(name="fileFolderService") protected FileFolderService mockedFileFolderService; @Mock(name="fileFolderService") protected FileFolderService mockedFileFolderService;
@Mock(name="modelSecurityService") protected ModelSecurityService mockedModelSecurityService; @Mock(name="modelSecurityService") protected ModelSecurityService mockedModelSecurityService;
@Mock(name="ruleService") protected RuleService mockedRuleService;
@Mock(name="versionService") protected VersionService mockedVersionService;
/** rm service mocks */ /** rm service mocks */
@Mock(name="filePlanService") protected FilePlanService mockedFilePlanService; @Mock(name="filePlanService") protected FilePlanService mockedFilePlanService;