RM-557: Unfiled records service API

* fleshed out unit tests for record service
  * fixed up a couple of issues when creating records
  * unfiled record API integrated into the Record Service 
  * investigated moving filling API from actions into service (roughed out API)
  * updated create record action



git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/modules/recordsmanagement/HEAD@44403 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Roy Wetherall
2012-12-06 08:38:18 +00:00
parent ec2f72650f
commit 8b784834bc
11 changed files with 576 additions and 266 deletions

View File

@@ -20,7 +20,6 @@ package org.alfresco.module.org_alfresco_module_rm.test.service;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.action.dm.CreateRecordAction;
import org.alfresco.module.org_alfresco_module_rm.capability.Capability;
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
@@ -42,7 +41,7 @@ import org.alfresco.util.GUID;
*
* @author Roy Wetherall
*/
public class RecordServiceTestImpl extends BaseRMTestCase
public class CreateRecordActionTest extends BaseRMTestCase
{
protected static final String COLLABORATION_SITE_ID = "collab-site-id";
@@ -107,6 +106,8 @@ public class RecordServiceTestImpl extends BaseRMTestCase
// create a folder and documents
dmFolder = fileFolderService.create(documentLibrary, "collabFolder", ContentModel.TYPE_FOLDER).getNodeRef();
dmDocument = fileFolderService.create(dmFolder, "collabDocument.txt", ContentModel.TYPE_CONTENT).getNodeRef();
}
@Override
@@ -146,27 +147,9 @@ public class RecordServiceTestImpl extends BaseRMTestCase
assertEquals(AccessStatus.ALLOWED, dmPermissionService.hasPermission(dmDocument, RMPermissionModel.READ_RECORDS));
assertEquals(AccessStatus.ALLOWED, dmPermissionService.hasPermission(filePlan, RMPermissionModel.VIEW_RECORDS));
assertTrue(recordService.isRecord(dmDocument));
//
Capability createCapability = capabilityService.getCapability("Create");
assertNotNull(createCapability);
createCapability.evaluate(dmDocument);
assertTrue(recordService.isRecord(dmDocument));
};
},
dmUserName);
doTestInTransaction(new Test<Void>()
{
public Void run()
{
return null;
}
});
}
}
}

View File

@@ -35,32 +35,11 @@ import org.alfresco.service.cmr.repository.NodeRef;
*/
public class FreezeServiceImplTest extends BaseRMTestCase
{
/** First Record */
private NodeRef recordOne;
/** Second Record */
private NodeRef recordTwo;
/** Third Record */
private NodeRef recordThree;
/** Fourth Record */
private NodeRef recordFour;
/**
* @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#setupTestDataImpl()
*/
@Override
protected void setupTestDataImpl()
{
super.setupTestDataImpl();
// create test records
recordOne = utils.createRecord(rmFolder, "one.txt");
recordTwo = utils.createRecord(rmFolder, "two.txt");
recordThree = utils.createRecord(rmFolder, "three.txt");
recordFour = utils.createRecord(rmFolder, "four.txt");
}
protected boolean isRecordTest()
{
return true;
}
/**
* Test freeze service methods

View File

@@ -22,115 +22,350 @@ import java.util.Arrays;
import java.util.List;
import java.util.Set;
import org.alfresco.model.ContentModel;
import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel;
import org.alfresco.module.org_alfresco_module_rm.dod5015.DOD5015Model;
import org.alfresco.module.org_alfresco_module_rm.record.RecordService;
import org.alfresco.module.org_alfresco_module_rm.security.ExtendedSecurityService;
import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase;
import org.alfresco.repo.security.authentication.AuthenticationUtil;
import org.alfresco.repo.security.permissions.AccessDeniedException;
import org.alfresco.repo.site.SiteModel;
import org.alfresco.repo.site.SiteServiceImpl;
import org.alfresco.service.cmr.action.ActionService;
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.cmr.site.SiteInfo;
import org.alfresco.service.cmr.site.SiteService;
import org.alfresco.service.cmr.site.SiteVisibility;
import org.alfresco.service.cmr.tagging.TaggingService;
import org.alfresco.service.namespace.QName;
import org.alfresco.util.GUID;
/**
* Records Service Implementation Test
*
* @author Roy Wetherall
* @author Tuna Askoy
* @since 2.1
*/
public class RecordServiceImplTest extends BaseRMTestCase
{
protected static final String COLLABORATION_SITE_ID = "collab-site-id";
/**
* @see RecordService#getRecordMetaDataAspects()
*/
public void testGetRecordMetaDataAspects() throws Exception
{
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
Set<QName> aspects = recordService.getRecordMetaDataAspects();
assertNotNull(aspects);
assertEquals(5, aspects.size());
assertTrue(aspects.containsAll(getAspectList()));
protected ActionService dmActionService;
return null;
}
protected TaggingService taggingService;
/**
* Helper method for getting a list of record meta data aspects
*
* @return Record meta data aspects as list
*/
private List<QName> getAspectList()
{
QName[] aspects = new QName[]
protected PermissionService dmPermissionService;
protected ExtendedSecurityService extendedSecurityService;
// collaboration site artifacts
protected SiteInfo collaborationSite;
protected NodeRef documentLibrary;
protected NodeRef dmFolder;
protected NodeRef dmDocument;
// dm users
protected String dmConsumer;
protected NodeRef dmConsumerNodeRef;
protected String dmCollaborator;
protected NodeRef dmCollaboratorNodeRef;
@Override
protected void initServices()
{
super.initServices();
dmActionService = (ActionService) applicationContext.getBean("ActionService");
taggingService = (TaggingService) applicationContext.getBean("TaggingService");
dmPermissionService = (PermissionService) applicationContext.getBean("PermissionService");
extendedSecurityService = (ExtendedSecurityService) applicationContext.getBean("ExtendedSecurityService");
}
/**
* This is a user test
*
* @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#isUserTest()
*/
@Override
protected boolean isUserTest()
{
return true;
}
/**
* This is a record test
*
* @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#isRecordTest()
*/
@Override
protected boolean isRecordTest()
{
return true;
}
/**
* Setup the collaboration site test data
*/
@Override
protected void setupTestData()
{
super.setupTestData();
doTestInTransaction(new Test<Void>()
{
public Void run()
{
DOD5015Model.ASPECT_DIGITAL_PHOTOGRAPH_RECORD,
DOD5015Model.ASPECT_PDF_RECORD,
DOD5015Model.ASPECT_WEB_RECORD,
DOD5015Model.ASPECT_SCANNED_RECORD,
ASPECT_RECORD_META_DATA
};
setupCollaborationSiteTestDataImpl();
return null;
}
}, AuthenticationUtil.getSystemUserName());
}
return Arrays.asList(aspects);
}
});
}
protected void setupCollaborationSiteTestDataImpl()
{
// create collaboration site
collaborationSite = siteService.createSite("preset", COLLABORATION_SITE_ID, "title", "description", SiteVisibility.PRIVATE);
documentLibrary = SiteServiceImpl.getSiteContainer(
COLLABORATION_SITE_ID,
SiteService.DOCUMENT_LIBRARY,
true,
siteService,
transactionService,
taggingService);
/**
* @see RecordService#isRecord(org.alfresco.service.cmr.repository.NodeRef)
*/
public void testIsRecord() throws Exception
{
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
// FIXME
return null;
}
});
}
assertNotNull("Collaboration site document library component was not successfully created.", documentLibrary);
/**
* @see RecordService#isDeclared(org.alfresco.service.cmr.repository.NodeRef)
*/
public void testIsDeclared() throws Exception
{
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
// FIXME
return null;
}
});
}
// create a folder and documents
dmFolder = fileFolderService.create(documentLibrary, "collabFolder", ContentModel.TYPE_FOLDER).getNodeRef();
dmDocument = fileFolderService.create(dmFolder, "collabDocument.txt", ContentModel.TYPE_CONTENT).getNodeRef();
/**
* @see RecordService#createRecordFromDocument(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef)
*/
public void testCreateRecordFromDocument() throws Exception
{
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
// FIXME
return null;
}
});
}
}
/**
* @see RecordService#getUnfiledRecordContainer(org.alfresco.service.cmr.repository.NodeRef)
*/
public void testGetUnfiledRecordContainer() throws Exception
{
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
// FIXME
return null;
}
});
}
@Override
protected void setupTestUsersImpl(NodeRef filePlan)
{
super.setupTestUsersImpl(filePlan);
dmConsumer = GUID.generate();
dmConsumerNodeRef = createPerson(dmConsumer);
siteService.setMembership(COLLABORATION_SITE_ID, dmConsumer, SiteModel.SITE_CONSUMER);
dmCollaborator = GUID.generate();
dmCollaboratorNodeRef = createPerson(dmCollaborator);
siteService.setMembership(COLLABORATION_SITE_ID, dmCollaborator, SiteModel.SITE_COLLABORATOR);
}
@Override
protected void tearDownImpl()
{
super.tearDownImpl();
siteService.deleteSite(COLLABORATION_SITE_ID);
}
/**
* @see RecordService#getRecordMetaDataAspects()
*/
public void testGetRecordMetaDataAspects() throws Exception
{
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
Set<QName> aspects = recordService.getRecordMetaDataAspects();
assertNotNull(aspects);
assertEquals(5, aspects.size());
assertTrue(aspects.containsAll(getAspectList()));
return null;
}
/**
* Helper method for getting a list of record meta data aspects
*
* @return Record meta data aspects as list
*/
private List<QName> getAspectList()
{
QName[] aspects = new QName[]
{
DOD5015Model.ASPECT_DIGITAL_PHOTOGRAPH_RECORD,
DOD5015Model.ASPECT_PDF_RECORD,
DOD5015Model.ASPECT_WEB_RECORD,
DOD5015Model.ASPECT_SCANNED_RECORD,
ASPECT_RECORD_META_DATA
};
return Arrays.asList(aspects);
}
});
}
/**
* @see RecordService#isRecord(org.alfresco.service.cmr.repository.NodeRef)
*/
public void testIsRecord() throws Exception
{
doTestInTransaction(new VoidTest()
{
@Override
public void runImpl()
{
assertFalse(recordService.isRecord(filePlan));
assertFalse(recordService.isRecord(rmContainer));
assertFalse(recordService.isRecord(rmFolder));
assertTrue(recordService.isRecord(recordOne));
assertTrue(recordService.isRecord(recordDeclaredOne));
}
});
}
/**
* @see RecordService#isDeclared(org.alfresco.service.cmr.repository.NodeRef)
*/
public void testIsDeclared() throws Exception
{
doTestInTransaction(new VoidTest()
{
@Override
public void runImpl()
{
assertFalse(recordService.isRecord(filePlan));
assertFalse(recordService.isRecord(rmContainer));
assertFalse(recordService.isRecord(rmFolder));
assertTrue(recordService.isRecord(recordOne));
assertTrue(recordService.isRecord(recordDeclaredOne));
}
});
}
public void testUnfiled() throws Exception
{
doTestInTransaction(new VoidTest()
{
@Override
public void runImpl()
{
assertFalse(recordService.isFiled(filePlan));
assertFalse(recordService.isFiled(rmContainer));
assertFalse(recordService.isFiled(rmFolder));
assertTrue(recordService.isFiled(recordOne));
assertTrue(recordService.isFiled(recordDeclaredOne));
}
});
}
/**
* @see RecordService#createRecord(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef)
*/
public void testCreateRecord() throws Exception
{
// show that users without WRITE can not create a record from a document
doTestInTransaction(new FailureTest
(
"Can not create a record from a document if you do not have WRITE permissions.",
AccessDeniedException.class
)
{
public void run() throws Exception
{
recordService.createRecord(filePlan, dmDocument);
}
}, dmConsumer);
// create record from document
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
assertFalse(recordService.isRecord(dmDocument));
assertFalse(extendedSecurityService.hasExtendedReaders(dmDocument));
checkPermissions(READ_RECORDS,
AccessStatus.DENIED, // file plan
AccessStatus.DENIED, // unfiled container
AccessStatus.DENIED, // record category
AccessStatus.DENIED, // record folder
AccessStatus.DENIED); // doc/record
assertEquals(AccessStatus.DENIED,
dmPermissionService.hasPermission(filePlan, RMPermissionModel.VIEW_RECORDS));
checkPermissions(FILING,
AccessStatus.DENIED, // file plan
AccessStatus.DENIED, // unfiled container
AccessStatus.DENIED, // record category
AccessStatus.DENIED, // record folder
AccessStatus.DENIED); // doc/record
recordService.createRecord(filePlan, dmDocument);
checkPermissions(READ_RECORDS,
AccessStatus.ALLOWED, // file plan
AccessStatus.ALLOWED, // unfiled container
AccessStatus.DENIED, // record category
AccessStatus.DENIED, // record folder
AccessStatus.ALLOWED); // doc/record
assertEquals(AccessStatus.ALLOWED,
dmPermissionService.hasPermission(filePlan, RMPermissionModel.VIEW_RECORDS));
checkPermissions(FILING,
AccessStatus.DENIED, // file plan
AccessStatus.DENIED, // unfiled container
AccessStatus.DENIED, // record category
AccessStatus.DENIED, // record folder
AccessStatus.DENIED); // doc/record
assertTrue(recordService.isRecord(dmDocument));
assertTrue(extendedSecurityService.hasExtendedReaders(dmDocument));
assertFalse(recordService.isFiled(dmDocument));
return null;
}
}, dmCollaborator);
}
private void checkPermissions(String permission, AccessStatus filePlanExpected,
AccessStatus unfiledExpected,
AccessStatus recordCatExpected,
AccessStatus recordFolderExpected,
AccessStatus recordExpected)
{
assertEquals(filePlanExpected,
dmPermissionService.hasPermission(filePlan, permission));
assertEquals(unfiledExpected,
dmPermissionService.hasPermission(unfiledContainer, permission));
assertEquals(recordCatExpected,
dmPermissionService.hasPermission(rmContainer, permission));
assertEquals(recordFolderExpected,
dmPermissionService.hasPermission(rmFolder, permission));
assertEquals(recordExpected,
dmPermissionService.hasPermission(dmDocument, permission));
}
/**
* @see RecordService#getUnfiledContainer(org.alfresco.service.cmr.repository.NodeRef)
*/
public void testGetUnfiledContainer() throws Exception
{
doTestInTransaction(new Test<Void>()
{
@Override
public Void run()
{
assertNotNull(recordService.getUnfiledContainer(filePlan));
return null;
}
});
}
}

View File

@@ -133,6 +133,7 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
protected NodeRef rmContainer;
protected DispositionSchedule dispositionSchedule;
protected NodeRef rmFolder;
protected NodeRef unfiledContainer;
/** multi-hierarchy test data
*
@@ -204,6 +205,15 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
protected NodeRef recordsManagerPerson;
protected NodeRef rmAdminPerson;
/** test records */
protected NodeRef recordOne;
protected NodeRef recordTwo;
protected NodeRef recordThree;
protected NodeRef recordFour;
protected NodeRef recordFive;
protected NodeRef recordDeclaredOne;
protected NodeRef recordDeclaredTwo;
/**
* Indicates whether this is a multi-hierarchy test or not. If it is then the multi-hierarchy record
* taxonomy test data is loaded.
@@ -215,13 +225,20 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
/**
* Indicates whether the test users should be created or not.
* @return
*/
protected boolean isUserTest()
{
return false;
}
/**
* Indicates whether the test records should be created or not.
*/
protected boolean isRecordTest()
{
return false;
}
/**
* Indicates whether the test users should have filling on the file plan structure
* by default or not.
@@ -346,8 +363,29 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
public Void run()
{
setupTestDataImpl();
if (isRecordTest() == true)
{
setupTestRecords();
}
return null;
}
@Override
public void test(Void result) throws Exception
{
if (isRecordTest() == true)
{
// declare a record
utils.declareRecord(recordDeclaredOne);
utils.declareRecord(recordDeclaredTwo);
// unfiled container
unfiledContainer = recordService.getUnfiledContainer(filePlan);
assertNotNull(unfiledContainer);
}
}
},
AuthenticationUtil.getSystemUserName());
}
@@ -389,6 +427,17 @@ public abstract class BaseRMTestCase extends RetryingTransactionHelperTestCase
assertNotNull("Could not create rm folder", rmFolder);
}
protected void setupTestRecords()
{
recordOne = utils.createRecord(rmFolder, "one.txt");
recordTwo = utils.createRecord(rmFolder, "two.txt");
recordThree = utils.createRecord(rmFolder, "three.txt");
recordFour = utils.createRecord(rmFolder, "four.txt");
recordFive = utils.createRecord(rmFolder, "five.txt");
recordDeclaredOne = utils.createRecord(rmFolder, "declaredOne.txt");
recordDeclaredTwo = utils.createRecord(rmFolder, "declaredTwo.txt");
}
protected void setupTestUsers(final NodeRef filePlan)
{
retryingTransactionHelper.doInTransaction(new RetryingTransactionCallback<Object>()