From e0db9fbb05f40542a3286e6c38f58c6874bbe36d Mon Sep 17 00:00:00 2001 From: Roxana Dina Date: Wed, 22 Jun 2016 20:27:26 +0300 Subject: [PATCH] RM-3265 Add test for the Move action on a destroyed record folder. --- .../recordfolder/MoveRecordFolderTest.java | 224 +++++++++++------- 1 file changed, 142 insertions(+), 82 deletions(-) diff --git a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/recordfolder/MoveRecordFolderTest.java b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/recordfolder/MoveRecordFolderTest.java index 0d35057d2f..b359887c37 100644 --- a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/recordfolder/MoveRecordFolderTest.java +++ b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/integration/recordfolder/MoveRecordFolderTest.java @@ -34,6 +34,7 @@ import java.util.Map; import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.action.impl.CompleteEventAction; import org.alfresco.module.org_alfresco_module_rm.action.impl.CutOffAction; +import org.alfresco.module.org_alfresco_module_rm.action.impl.DestroyAction; import org.alfresco.module.org_alfresco_module_rm.capability.Capability; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionAction; import org.alfresco.module.org_alfresco_module_rm.disposition.DispositionSchedule; @@ -48,31 +49,31 @@ import net.sf.acegisecurity.vote.AccessDecisionVoter; /** * Move record folder tests. - * + * * @author Roy Wetherall * @since 2.2 */ public class MoveRecordFolderTest extends BaseRMTestCase -{ +{ @Override protected boolean isRecordTest() { return true; } - + /** - * Given two categories, both with cut off immediately schedules, when the record is move - * then all the parts of the record should be correct based on the new schedule. - * + * Given two categories, both with cut off immediately schedules, when the record is move then all the parts of the + * record should be correct based on the new schedule. + * * @see https://issues.alfresco.com/jira/browse/RM-1345 */ public void testMoveRecordFolderBeforeCutOffFolderLevelDisposition() throws Exception { doBehaviourDrivenTest(new BehaviourDrivenTest(null, false) - { - NodeRef recordFolder; + { + NodeRef recordFolder; NodeRef destinationRecordCategory; - + public void given() { doTestInTransaction(new VoidTest() @@ -82,43 +83,44 @@ public class MoveRecordFolderTest extends BaseRMTestCase NodeRef rcOne = createRecordCategory(false); destinationRecordCategory = createRecordCategory(false); recordFolder = recordFolderService.createRecordFolder(rcOne, GUID.generate()); - + // check for the lifecycle aspect assertTrue(nodeService.hasAspect(recordFolder, ASPECT_DISPOSITION_LIFECYCLE)); - + // check the disposition action details DispositionAction dispositionAction = dispositionService.getNextDispositionAction(recordFolder); assertNotNull(dispositionAction); assertNotNull(CutOffAction.NAME, dispositionAction.getName()); assertNotNull(dispositionAction.getAsOfDate()); assertTrue(dispositionService.isNextDispositionActionEligible(recordFolder)); - } + } }); - + doTestInTransaction(new VoidTest() { public void runImpl() throws Exception { // check the search aspect properties assertTrue(nodeService.hasAspect(recordFolder, ASPECT_RM_SEARCH)); - assertEquals(CutOffAction.NAME, nodeService.getProperty(recordFolder, PROP_RS_DISPOSITION_ACTION_NAME)); + assertEquals(CutOffAction.NAME, + nodeService.getProperty(recordFolder, PROP_RS_DISPOSITION_ACTION_NAME)); assertNotNull(nodeService.getProperty(recordFolder, PROP_RS_DISPOSITION_ACTION_AS_OF)); - } + } }); } - + public void when() throws Exception - { + { doTestInTransaction(new VoidTest() { public void runImpl() throws Exception { // move record folder - fileFolderService.move(recordFolder, destinationRecordCategory, GUID.generate()); - } - }); + fileFolderService.move(recordFolder, destinationRecordCategory, GUID.generate()); + } + }); } - + public void then() { doTestInTransaction(new VoidTest() @@ -127,34 +129,35 @@ public class MoveRecordFolderTest extends BaseRMTestCase { // check for the lifecycle aspect assertTrue(nodeService.hasAspect(recordFolder, ASPECT_DISPOSITION_LIFECYCLE)); - + // check the disposition action details DispositionAction dispositionAction = dispositionService.getNextDispositionAction(recordFolder); assertNotNull(dispositionAction); assertNotNull(CutOffAction.NAME, dispositionAction.getName()); assertNotNull(dispositionAction.getAsOfDate()); assertTrue(dispositionService.isNextDispositionActionEligible(recordFolder)); - - // check the search aspect properties - assertTrue(nodeService.hasAspect(recordFolder, ASPECT_RM_SEARCH)); - assertEquals(CutOffAction.NAME, nodeService.getProperty(recordFolder, PROP_RS_DISPOSITION_ACTION_NAME)); - assertNotNull(nodeService.getProperty(recordFolder, PROP_RS_DISPOSITION_ACTION_AS_OF)); + + // check the search aspect properties + assertTrue(nodeService.hasAspect(recordFolder, ASPECT_RM_SEARCH)); + assertEquals(CutOffAction.NAME, + nodeService.getProperty(recordFolder, PROP_RS_DISPOSITION_ACTION_NAME)); + assertNotNull(nodeService.getProperty(recordFolder, PROP_RS_DISPOSITION_ACTION_AS_OF)); } - }); + }); } - }); + }); } - + /** * */ public void testMoveRecordFolderBeforeCutOffIntoAFolderWithNoDisposition() throws Exception { doBehaviourDrivenTest(new BehaviourDrivenTest(null, false) - { - NodeRef recordFolder; + { + NodeRef recordFolder; NodeRef destinationRecordCategory; - + public void given() { doTestInTransaction(new VoidTest() @@ -164,43 +167,44 @@ public class MoveRecordFolderTest extends BaseRMTestCase NodeRef rcOne = createRecordCategory(false); destinationRecordCategory = filePlanService.createRecordCategory(filePlan, GUID.generate()); recordFolder = recordFolderService.createRecordFolder(rcOne, GUID.generate()); - + // check for the lifecycle aspect assertTrue(nodeService.hasAspect(recordFolder, ASPECT_DISPOSITION_LIFECYCLE)); - + // check the disposition action details DispositionAction dispositionAction = dispositionService.getNextDispositionAction(recordFolder); assertNotNull(dispositionAction); assertNotNull(CutOffAction.NAME, dispositionAction.getName()); assertNotNull(dispositionAction.getAsOfDate()); assertTrue(dispositionService.isNextDispositionActionEligible(recordFolder)); - } + } }); - + doTestInTransaction(new VoidTest() { public void runImpl() throws Exception { // check the search aspect properties assertTrue(nodeService.hasAspect(recordFolder, ASPECT_RM_SEARCH)); - assertEquals(CutOffAction.NAME, nodeService.getProperty(recordFolder, PROP_RS_DISPOSITION_ACTION_NAME)); + assertEquals(CutOffAction.NAME, + nodeService.getProperty(recordFolder, PROP_RS_DISPOSITION_ACTION_NAME)); assertNotNull(nodeService.getProperty(recordFolder, PROP_RS_DISPOSITION_ACTION_AS_OF)); - } + } }); } - + public void when() throws Exception - { + { doTestInTransaction(new VoidTest() { public void runImpl() throws Exception { // move record folder - fileFolderService.move(recordFolder, destinationRecordCategory, GUID.generate()); - } - }); + fileFolderService.move(recordFolder, destinationRecordCategory, GUID.generate()); + } + }); } - + public void then() { doTestInTransaction(new VoidTest() @@ -209,29 +213,29 @@ public class MoveRecordFolderTest extends BaseRMTestCase { // check for the lifecycle aspect assertFalse(nodeService.hasAspect(recordFolder, ASPECT_DISPOSITION_LIFECYCLE)); - + // check the disposition action details assertNull(dispositionService.getNextDispositionAction(recordFolder)); - - // check the search aspect properties - assertFalse(nodeService.hasAspect(recordFolder, ASPECT_RM_SEARCH)); + + // check the search aspect properties + assertFalse(nodeService.hasAspect(recordFolder, ASPECT_RM_SEARCH)); } - }); + }); } - }); + }); } - + /** - * + * */ public void testMoveRecordFolderWithRecordsBeforeCutOffRecordLevelDisposition() throws Exception { doBehaviourDrivenTest(new BehaviourDrivenTest(null, false) - { - NodeRef record; + { + NodeRef record; NodeRef recordFolder; NodeRef destinationRecordCategory; - + public void given() { doTestInTransaction(new VoidTest() @@ -242,11 +246,11 @@ public class MoveRecordFolderTest extends BaseRMTestCase destinationRecordCategory = createRecordCategory(true); recordFolder = recordFolderService.createRecordFolder(rcOne, GUID.generate()); record = utils.createRecord(recordFolder, GUID.generate()); - + // check for the lifecycle aspect assertFalse(nodeService.hasAspect(recordFolder, ASPECT_DISPOSITION_LIFECYCLE)); assertTrue(nodeService.hasAspect(record, ASPECT_DISPOSITION_LIFECYCLE)); - + // check the disposition action details assertNull(dispositionService.getNextDispositionAction(recordFolder)); DispositionAction dispositionAction = dispositionService.getNextDispositionAction(record); @@ -254,33 +258,34 @@ public class MoveRecordFolderTest extends BaseRMTestCase assertNotNull(CutOffAction.NAME, dispositionAction.getName()); assertNotNull(dispositionAction.getAsOfDate()); assertTrue(dispositionService.isNextDispositionActionEligible(record)); - } + } }); - + doTestInTransaction(new VoidTest() { public void runImpl() throws Exception { // check the search aspect properties assertTrue(nodeService.hasAspect(record, ASPECT_RM_SEARCH)); - assertEquals(CutOffAction.NAME, nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_NAME)); + assertEquals(CutOffAction.NAME, + nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_NAME)); assertNotNull(nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_AS_OF)); - } + } }); } - + public void when() throws Exception - { + { doTestInTransaction(new VoidTest() { public void runImpl() throws Exception { // move record folder - fileFolderService.move(recordFolder, destinationRecordCategory, GUID.generate()); - } - }); + fileFolderService.move(recordFolder, destinationRecordCategory, GUID.generate()); + } + }); } - + public void then() { doTestInTransaction(new VoidTest() @@ -290,7 +295,7 @@ public class MoveRecordFolderTest extends BaseRMTestCase // check for the lifecycle aspect assertFalse(nodeService.hasAspect(recordFolder, ASPECT_DISPOSITION_LIFECYCLE)); assertTrue(nodeService.hasAspect(record, ASPECT_DISPOSITION_LIFECYCLE)); - + // check the disposition action details assertNull(dispositionService.getNextDispositionAction(recordFolder)); DispositionAction dispositionAction = dispositionService.getNextDispositionAction(record); @@ -298,20 +303,21 @@ public class MoveRecordFolderTest extends BaseRMTestCase assertNotNull(CutOffAction.NAME, dispositionAction.getName()); assertNotNull(dispositionAction.getAsOfDate()); assertTrue(dispositionService.isNextDispositionActionEligible(record)); - - // check the search aspect properties - assertTrue(nodeService.hasAspect(record, ASPECT_RM_SEARCH)); - assertEquals(CutOffAction.NAME, nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_NAME)); - assertNotNull(nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_AS_OF)); + + // check the search aspect properties + assertTrue(nodeService.hasAspect(record, ASPECT_RM_SEARCH)); + assertEquals(CutOffAction.NAME, + nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_NAME)); + assertNotNull(nodeService.getProperty(record, PROP_RS_DISPOSITION_ACTION_AS_OF)); } - }); + }); } - }); + }); } /** * Try and move a folder from no disposition schedule to a disposition schedule - * + * * @see https://issues.alfresco.com/jira/browse/RM-1039 */ public void testMoveRecordFolderFromNoDisToDis() throws Exception @@ -333,7 +339,7 @@ public class MoveRecordFolderTest extends BaseRMTestCase { assertNotNull(result); assertNull(dispositionService.getDispositionSchedule(result)); - assertFalse(nodeService.hasAspect(result, ASPECT_DISPOSITION_LIFECYCLE)); + assertFalse(nodeService.hasAspect(result, ASPECT_DISPOSITION_LIFECYCLE)); assertEquals(AccessStatus.ALLOWED, permissionService.hasPermission(result, FILING)); } }); @@ -394,7 +400,6 @@ public class MoveRecordFolderTest extends BaseRMTestCase }); } - // try and move a cutoff folder public void testMoveCutoffRecordFolder() throws Exception { @@ -426,7 +431,7 @@ public class MoveRecordFolderTest extends BaseRMTestCase return testFolder; } - + @Override public void test(NodeRef testFolder) throws Exception { @@ -446,11 +451,66 @@ public class MoveRecordFolderTest extends BaseRMTestCase }); } - + // try and move a destroyed folder + public void testMoveDestroyedRecordFolder() throws Exception + { + final NodeRef destination = doTestInTransaction(new Test() + { + @Override + public NodeRef run() + { + // create a record category (no disposition schedule) + return filePlanService.createRecordCategory(filePlan, "Caitlin Reed"); + } + }); + + final NodeRef testFolder = doTestInTransaction(new Test() + { + @Override + public NodeRef run() + { + // create folder + NodeRef testFolder = recordFolderService.createRecordFolder(rmContainer, "Peter Edward Francis"); + + // complete event + Map params = new HashMap(1); + params.put(CompleteEventAction.PARAM_EVENT_NAME, CommonRMTestUtils.DEFAULT_EVENT_NAME); + rmActionService.executeRecordsManagementAction(testFolder, CompleteEventAction.NAME, params); + + // cutoff & destroy folder + rmActionService.executeRecordsManagementAction(testFolder, CutOffAction.NAME); + rmActionService.executeRecordsManagementAction(testFolder, DestroyAction.NAME); + + return testFolder; + } + + }); + + doTestInTransaction(new Test() + { + @Override + public NodeRef run() throws Exception + { + Capability moveCapability = capabilityService.getCapability("MoveRecordFolder"); + assertEquals(AccessDecisionVoter.ACCESS_GRANTED, moveCapability.evaluate(testFolder, destination)); + + return fileFolderService.move(testFolder, destination, null).getNodeRef(); + } + + @Override + public void test(NodeRef result) throws Exception + { + assertNotNull(result); + } + }); + + } + private NodeRef createRecordCategory(boolean recordLevel) { NodeRef rc = filePlanService.createRecordCategory(filePlan, GUID.generate()); - DispositionSchedule dis = utils.createBasicDispositionSchedule(rc, GUID.generate(), GUID.generate(), recordLevel, false); + DispositionSchedule dis = utils.createBasicDispositionSchedule(rc, GUID.generate(), GUID.generate(), + recordLevel, false); Map adParams = new HashMap(3); adParams.put(PROP_DISPOSITION_ACTION_NAME, CutOffAction.NAME); adParams.put(PROP_DISPOSITION_DESCRIPTION, GUID.generate());