From 939587cc5e93736977c28288fc928028f44df45e Mon Sep 17 00:00:00 2001 From: Sara Aspery Date: Thu, 23 May 2019 12:31:35 +0100 Subject: [PATCH 1/5] RM-6851 Fix declare record into hold --- .../org_alfresco_module_rm/record/RecordServiceImpl.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java index 35c0835ceb..982ef6c49d 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java @@ -1065,6 +1065,11 @@ public class RecordServiceImpl extends BaseBehaviourBean { throw new AccessDeniedException(I18NUtil.getMessage("permissions.err_access_denied")); } + + if (freezeService.isFrozen(newRecordContainer)) + { + throw new AccessDeniedException(I18NUtil.getMessage("permissions.err_access_denied")); + } } return newRecordContainer; From 12ad79c3de345768e9554398c568d8eaa6f3f0fe Mon Sep 17 00:00:00 2001 From: Sara Aspery Date: Thu, 23 May 2019 12:32:01 +0100 Subject: [PATCH 2/5] RM-6851 Fix declare record into hold - add unit test --- .../record/RecordServiceImplUnitTest.java | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java index 0a9c127d56..2f00a21fc8 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java @@ -76,6 +76,7 @@ public class RecordServiceImplUnitTest extends BaseUnitTest private NodeRef nonStandardFilePlan; private NodeRef dmNodeRef; private NodeRef unfiledRecordContainer; + private NodeRef frozenRecordFolder; private ChildAssociationRef parentAssoc; private static QName TYPE_MY_FILE_PLAN = generateQName(); @@ -94,6 +95,7 @@ public class RecordServiceImplUnitTest extends BaseUnitTest nonStandardFilePlan = generateNodeRef(TYPE_MY_FILE_PLAN); dmNodeRef = generateNodeRef(TYPE_CONTENT); unfiledRecordContainer = generateNodeRef(TYPE_UNFILED_RECORD_CONTAINER); + frozenRecordFolder = generateNodeRef(TYPE_RECORD_FOLDER); parentAssoc = mock(ChildAssociationRef.class); // set-up node service @@ -583,6 +585,20 @@ public class RecordServiceImplUnitTest extends BaseUnitTest recordService.createRecord(filePlan, dmNodeRef, recordFolder); } + /** + * Given a file that is not yet a record + * When I create the record specifying a folder which is in a hold + * Then an exception is thrown + */ + @Test(expected=AccessDeniedException.class) + public void createRecordIntoRecordFolderInHold() + { + mocksForRecordCreation(); + + // create the record + recordService.createRecord(filePlan, dmNodeRef, frozenRecordFolder); + } + /* Helper method to set up the mocks for record creation */ private void mocksForRecordCreation() { @@ -590,10 +606,12 @@ public class RecordServiceImplUnitTest extends BaseUnitTest .thenReturn(parentAssoc); when(parentAssoc.getQName()).thenReturn(generateQName()); - // mocks for sanity checks on node and fileplan + // mocks for sanity checks on node, folder 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); + when(mockedFreezeService.isFrozen(recordFolder)).thenReturn(false); + when(mockedFreezeService.isFrozen(frozenRecordFolder)).thenReturn(true); // mocks for policies doNothing().when(recordService).invokeBeforeRecordDeclaration(dmNodeRef); From ace859a0877ce70a435f7ae4e5f47d1a319a6fd7 Mon Sep 17 00:00:00 2001 From: Sara Aspery Date: Thu, 23 May 2019 12:44:20 +0100 Subject: [PATCH 3/5] RM-6852 Fix inconsistencies in V1 response codes --- .../record/RecordServiceImpl.java | 3 ++- .../record/RecordServiceImplUnitTest.java | 18 ++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java index 982ef6c49d..2c156fa980 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java @@ -164,6 +164,7 @@ public class RecordServiceImpl extends BaseBehaviourBean private static final String FINAL_DESCRIPTION = "rm.service.final-version-description"; private static final String MSG_UNDECLARED_ONLY_RECORDS = "rm.action.undeclared-only-records"; private static final String MSG_NO_DECLARE_MAND_PROP = "rm.action.no-declare-mand-prop"; + private static final String MSG_CANNOT_CREATE_CHILDREN_IN_CLOSED_RECORD_FOLDER = "rm.service.add-children-to-closed-record-folder"; /** Always edit property array */ private static final QName[] ALWAYS_EDIT_PROPERTIES = new QName[] @@ -1058,7 +1059,7 @@ public class RecordServiceImpl extends BaseBehaviourBean Boolean isClosed = (Boolean) nodeService.getProperty(newRecordContainer, PROP_IS_CLOSED); if (isClosed != null && isClosed) { - throw new AlfrescoRuntimeException("Unable to create record, because container is closed."); + throw new IntegrityException(I18NUtil.getMessage(MSG_CANNOT_CREATE_CHILDREN_IN_CLOSED_RECORD_FOLDER), null); } if (extendedPermissionService.hasPermission(newRecordContainer, RMPermissionModel.FILING) == AccessStatus.DENIED) diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java index 2f00a21fc8..26803eee0c 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java @@ -50,6 +50,7 @@ import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; 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.node.integrity.IntegrityException; import org.alfresco.repo.policy.Behaviour; import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.service.cmr.repository.ChildAssociationRef; @@ -77,6 +78,7 @@ public class RecordServiceImplUnitTest extends BaseUnitTest private NodeRef dmNodeRef; private NodeRef unfiledRecordContainer; private NodeRef frozenRecordFolder; + private NodeRef closedRecordFolder; private ChildAssociationRef parentAssoc; private static QName TYPE_MY_FILE_PLAN = generateQName(); @@ -96,6 +98,7 @@ public class RecordServiceImplUnitTest extends BaseUnitTest dmNodeRef = generateNodeRef(TYPE_CONTENT); unfiledRecordContainer = generateNodeRef(TYPE_UNFILED_RECORD_CONTAINER); frozenRecordFolder = generateNodeRef(TYPE_RECORD_FOLDER); + closedRecordFolder = generateNodeRef(TYPE_RECORD_FOLDER); parentAssoc = mock(ChildAssociationRef.class); // set-up node service @@ -599,6 +602,20 @@ public class RecordServiceImplUnitTest extends BaseUnitTest recordService.createRecord(filePlan, dmNodeRef, frozenRecordFolder); } + /** + * Given a file that is not yet a record + * When I create the record specifying a closed destination record folder + * Then an exception is thrown + */ + @Test(expected= IntegrityException.class) + public void createRecordIntoClosedRecordFolder() + { + mocksForRecordCreation(); + + // create the record + recordService.createRecord(filePlan, dmNodeRef, closedRecordFolder); + } + /* Helper method to set up the mocks for record creation */ private void mocksForRecordCreation() { @@ -612,6 +629,7 @@ public class RecordServiceImplUnitTest extends BaseUnitTest when(mockedFilePlanService.isFilePlan(nonStandardFilePlan)).thenReturn(true); when(mockedFreezeService.isFrozen(recordFolder)).thenReturn(false); when(mockedFreezeService.isFrozen(frozenRecordFolder)).thenReturn(true); + when(mockedNodeService.getProperty(closedRecordFolder, PROP_IS_CLOSED)).thenReturn(true); // mocks for policies doNothing().when(recordService).invokeBeforeRecordDeclaration(dmNodeRef); From ba970e7f04da7b131ae8cb27bc0567eb504c71b4 Mon Sep 17 00:00:00 2001 From: Sara Aspery Date: Thu, 23 May 2019 13:27:53 +0100 Subject: [PATCH 4/5] RM-6852 Fix inconsistencies in V1 response codes --- .../rm/community/files/DeclareAndFileDocumentAsRecordTests.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/files/DeclareAndFileDocumentAsRecordTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/files/DeclareAndFileDocumentAsRecordTests.java index ab89fe6869..cc2646e4a0 100644 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/files/DeclareAndFileDocumentAsRecordTests.java +++ b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/files/DeclareAndFileDocumentAsRecordTests.java @@ -85,7 +85,7 @@ public class DeclareAndFileDocumentAsRecordTests extends BaseRMRestTest private final static String DESTINATION_PATH_NOT_FOUND_EXC = "Unable to execute create-record action, because the destination path could not be found."; private final static String INVALID_DESTINATION_PATH_EXC = "Unable to execute create-record action, because the destination path is invalid."; private final static String DESTINATION_PATH_NOT_RECORD_FOLDER_EXC = "Unable to execute create-record action, because the destination path is not a record folder."; - private final static String CLOSED_RECORD_FOLDER_EXC = "Unable to create record, because container is closed"; + private final static String CLOSED_RECORD_FOLDER_EXC = "You can't add new items to a closed record folder."; private final static String HOLD_NAME = "holdName"; private UserModel userFillingPermission, userReadOnlyPermission; From 7abe56ec1e7d8612a13b92db954c3ecc38ed5a22 Mon Sep 17 00:00:00 2001 From: Sara Aspery Date: Thu, 23 May 2019 15:17:04 +0100 Subject: [PATCH 5/5] RM-6851 updates from review --- .../messages/records-management-service.properties | 1 + .../org_alfresco_module_rm/record/RecordServiceImpl.java | 2 +- .../record/RecordServiceImplUnitTest.java | 3 ++- 3 files changed, 4 insertions(+), 2 deletions(-) diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service.properties b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service.properties index 3287a0cbab..8eee213054 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service.properties +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/messages/records-management-service.properties @@ -21,4 +21,5 @@ rm.service.final-version=Final rm.service.final-version-description=The final archived record version rm.service.enable-autoversion-on-record-creation=Auto Version on Record Creation rm.service.add-children-to-closed-record-folder=You can't add new items to a closed record folder. +rm.service.add-children-to-frozen-record-folder=You can't add new items to a frozen record folder. rm.service.update-record-content=You can't update a record's content property. \ No newline at end of file diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java index 982ef6c49d..c508905a73 100644 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java +++ b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImpl.java @@ -1068,7 +1068,7 @@ public class RecordServiceImpl extends BaseBehaviourBean if (freezeService.isFrozen(newRecordContainer)) { - throw new AccessDeniedException(I18NUtil.getMessage("permissions.err_access_denied")); + throw new IntegrityException(I18NUtil.getMessage("rm.service.add-children-to-frozen-record-folder"),null); } } diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java index 2f00a21fc8..536293136a 100644 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java +++ b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/record/RecordServiceImplUnitTest.java @@ -50,6 +50,7 @@ import org.alfresco.model.ContentModel; import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; 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.node.integrity.IntegrityException; import org.alfresco.repo.policy.Behaviour; import org.alfresco.repo.security.permissions.AccessDeniedException; import org.alfresco.service.cmr.repository.ChildAssociationRef; @@ -590,7 +591,7 @@ public class RecordServiceImplUnitTest extends BaseUnitTest * When I create the record specifying a folder which is in a hold * Then an exception is thrown */ - @Test(expected=AccessDeniedException.class) + @Test(expected= IntegrityException.class) public void createRecordIntoRecordFolderInHold() { mocksForRecordCreation();