diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/audit/AuditAddToHoldTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/audit/AuditAddToHoldTests.java deleted file mode 100644 index 954c074064..0000000000 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/audit/AuditAddToHoldTests.java +++ /dev/null @@ -1,313 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ -package org.alfresco.rest.rm.community.audit; - -import static java.util.Arrays.asList; - -import static org.alfresco.rest.rm.community.base.TestData.HOLD_DESCRIPTION; -import static org.alfresco.rest.rm.community.base.TestData.HOLD_REASON; -import static org.alfresco.rest.rm.community.model.audit.AuditEvents.ADD_TO_HOLD; -import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix; -import static org.alfresco.rest.rm.community.utils.RMSiteUtil.FILE_PLAN_PATH; -import static org.alfresco.utility.Utility.buildPath; -import static org.alfresco.utility.Utility.removeLastSlash; -import static org.alfresco.utility.data.RandomData.getRandomName; -import static org.alfresco.utility.report.log.Step.STEP; -import static org.apache.commons.httpclient.HttpStatus.SC_INTERNAL_SERVER_ERROR; -import static org.testng.AssertJUnit.assertEquals; -import static org.testng.AssertJUnit.assertTrue; - -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; - -import com.google.common.collect.ImmutableMap; - -import org.alfresco.dataprep.CMISUtil; -import org.alfresco.rest.rm.community.base.BaseRMRestTest; -import org.alfresco.rest.rm.community.model.audit.AuditEntry; -import org.alfresco.rest.rm.community.model.record.Record; -import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory; -import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild; -import org.alfresco.rest.rm.community.model.user.UserPermissions; -import org.alfresco.rest.rm.community.model.user.UserRoles; -import org.alfresco.rest.v0.HoldsAPI; -import org.alfresco.rest.v0.service.RMAuditService; -import org.alfresco.rest.v0.service.RoleService; -import org.alfresco.test.AlfrescoTest; -import org.alfresco.utility.constants.UserRole; -import org.alfresco.utility.model.FileModel; -import org.alfresco.utility.model.SiteModel; -import org.alfresco.utility.model.UserModel; -import org.springframework.beans.factory.annotation.Autowired; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; - -/** - * This class contains the tests that check the add to hold event is audited - * - * @author Claudia Agache - * @since 3.3 - */ -@AlfrescoTest (jira = "RM-6859") -public class AuditAddToHoldTests extends BaseRMRestTest -{ - private final String PREFIX = generateTestPrefix(AuditAddToHoldTests.class); - private final String HOLD1 = PREFIX + "hold1"; - private final String HOLD2 = PREFIX + "hold2"; - - @Autowired - private RMAuditService rmAuditService; - @Autowired - private HoldsAPI holdsAPI; - @Autowired - private RoleService roleService; - - private UserModel rmAdmin, rmManagerNoReadOnHold, rmManagerNoReadOnNode; - private SiteModel privateSite; - private RecordCategory recordCategory; - private RecordCategoryChild recordFolder; - private List auditEntries; - private List holdsList = asList(HOLD1, HOLD2); - private List holdsListRef = new ArrayList<>(); - private String hold1NodeRef; - - @BeforeClass (alwaysRun = true) - public void preconditionForAuditAddToHoldTests() throws Exception - { - STEP("Create 2 holds."); - hold1NodeRef = holdsAPI.createHoldAndGetNodeRef(getAdminUser().getUsername(), - getAdminUser().getPassword(), HOLD1, HOLD_REASON, HOLD_DESCRIPTION); - String hold2NodeRef = holdsAPI.createHoldAndGetNodeRef(getAdminUser().getUsername(), getAdminUser().getPassword(), HOLD2, HOLD_REASON, HOLD_DESCRIPTION); - holdsListRef = asList(hold1NodeRef, hold2NodeRef); - - STEP("Create a new record category with a record folder."); - recordCategory = createRootCategory(getRandomName("recordCategory")); - recordFolder = createRecordFolder(recordCategory.getId(), PREFIX + "recFolder"); - - STEP("Create an user with full rights to add content to a hold."); - rmAdmin = roleService.createUserWithRMRole(UserRoles.ROLE_RM_ADMIN.roleId); - - STEP("Create a collaboration site."); - privateSite = dataSite.usingUser(rmAdmin).createPrivateRandomSite(); - - STEP("Create users without rights to add content to a hold."); - rmManagerNoReadOnHold = roleService.createUserWithSiteRoleRMRoleAndPermission(privateSite, - UserRole.SiteManager, recordCategory.getId(), UserRoles.ROLE_RM_MANAGER, UserPermissions.PERMISSION_FILING); - rmManagerNoReadOnNode = roleService.createUserWithRMRoleAndRMNodePermission(UserRoles.ROLE_RM_MANAGER.roleId, - hold1NodeRef, UserPermissions.PERMISSION_FILING); - } - - /** - * Data provider with valid nodes that can be added to a hold - * - * @return the node id, the node name and the node path - * @throws Exception - */ - @DataProvider (name = "validNodesForAddToHold") - public Object[][] getValidNodesForAddToHold() throws Exception - { - FileModel contentToBeAdded = dataContent.usingAdmin().usingSite(privateSite) - .createContent(CMISUtil.DocumentType.TEXT_PLAIN); - RecordCategoryChild recordFolderToBeAdded = createRecordFolder(recordCategory.getId(), PREFIX + "recFolderToBeAdded"); - Record recordToBeAdded = createElectronicRecord(recordFolder.getId(), PREFIX + "record"); - String recordFolderPath = removeLastSlash(buildPath(FILE_PLAN_PATH, recordCategory.getName(), - recordFolderToBeAdded.getName())); - String recordPath = removeLastSlash(buildPath(FILE_PLAN_PATH, recordCategory.getName(), - recordFolder.getName(), recordToBeAdded.getName())); - String contentPath = "/Company Home" + contentToBeAdded.getCmisLocation(); - - return new String[][] - { - // a record folder - { recordFolderToBeAdded.getId(), recordFolderToBeAdded.getName(), recordFolderPath }, - // a record - { recordToBeAdded.getId(), recordToBeAdded.getName(), recordPath }, - //an active content, - { contentToBeAdded.getNodeRefWithoutVersion(), contentToBeAdded.getName(), contentPath } - }; - } - - /** - * Given a document/record/record folder is added to a hold - * When I view the audit log - * Then an entry has been created in the audit log that contains the following: - * name of the hold - * name of the document/record/record folder added - * user who added the content - * date the content was added - * path of the node - */ - @Test (dataProvider = "validNodesForAddToHold") - public void addToHoldEventIsAudited(String nodeId, String nodeName, String nodePath) - { - rmAuditService.clearAuditLog(); - - STEP("Add node to hold."); - holdsAPI.addItemToHold(rmAdmin.getUsername(), rmAdmin.getPassword(), nodeId, HOLD1); - - STEP("Check the audit log contains the entry for the add to hold event."); - rmAuditService.checkAuditLogForEvent(getAdminUser(), ADD_TO_HOLD, rmAdmin, nodeName, nodePath, - asList(ImmutableMap.of("new", nodeName, "previous", "", "name", "Name"), - ImmutableMap.of("new", HOLD1, "previous", "", "name", "Hold Name"))); - } - - /** - * Given an unsuccessful add to hold action - * When I view the audit log - * Then the add to hold event isn't audited - */ - @Test - public void unsuccessfulAddToHoldIsNotAudited() throws Exception - { - STEP("Create a new record"); - Record recordToBeAdded = createElectronicRecord(recordFolder.getId(), PREFIX + "record"); - - rmAuditService.clearAuditLog(); - - STEP("Try to add the record to a hold by an user with no rights."); - holdsAPI.addItemsToHolds(rmManagerNoReadOnHold.getUsername(), rmManagerNoReadOnHold.getPassword(), - SC_INTERNAL_SERVER_ERROR, Collections.singletonList(recordToBeAdded.getId()), - Collections.singletonList(hold1NodeRef)); - - STEP("Check the audit log doesn't contain the entry for the unsuccessful add to hold."); - assertTrue("The list of events should not contain Add to Hold entry ", - rmAuditService.getAuditEntriesFilteredByEvent(getAdminUser(), ADD_TO_HOLD).isEmpty()); - } - - /** - * Given a not empty record folder is added to a hold - * When I view the audit log - * Then only an entry has been created in the audit log for the record folder added - */ - @Test - public void addToHoldIsNotAuditedForRecordFolderChildren() throws Exception - { - STEP("Create a new record folder with a record inside"); - RecordCategoryChild notEmptyRecFolder = createRecordFolder(recordCategory.getId(), PREFIX + "notEmptyRecFolder"); - Record record = createElectronicRecord(notEmptyRecFolder.getId(), PREFIX + "record"); - - rmAuditService.clearAuditLog(); - - STEP("Add record folder to hold."); - holdsAPI.addItemToHold(rmAdmin.getUsername(), rmAdmin.getPassword(), notEmptyRecFolder.getId(), HOLD1); - - auditEntries = rmAuditService.getAuditEntriesFilteredByEvent(getAdminUser(), ADD_TO_HOLD); - - STEP("Check the audit log contains only an entry for add to hold."); - assertEquals("The list of events should contain only an entry", 1, auditEntries.size()); - assertTrue("The list of events should not contain Add to Hold entry for the record", - auditEntries.stream().noneMatch(entry -> entry.getNodeName().equals(record.getName()))); - } - - /** - * Given a record is added to multiple holds - * When I view the audit log - * Then multiple entries have been created in the audit log for each add to hold event - */ - @Test - public void addToHoldIsAuditedInBulkAddition() throws Exception - { - STEP("Create a new record"); - Record recordToBeAdded = createElectronicRecord(recordFolder.getId(), PREFIX + "record"); - - rmAuditService.clearAuditLog(); - - STEP("Add record to multiple holds."); - holdsAPI.addItemsToHolds(rmAdmin.getUsername(), rmAdmin.getPassword(), - Collections.singletonList(recordToBeAdded.getId()), holdsList); - - auditEntries = rmAuditService.getAuditEntriesFilteredByEvent(getAdminUser(), ADD_TO_HOLD); - - STEP("Check the audit log contains entries for both additions."); - assertEquals("The list of events should contain Add to Hold entries for both holds", 2, auditEntries.size()); - assertTrue("The hold name value for the first add to hold is not audited.", - auditEntries.stream().anyMatch(entry -> entry.getChangedValues().contains( - ImmutableMap.of("new", HOLD1, "previous", "", "name", "Hold Name")))); - assertTrue("The hold name value for the second add to hold is not audited.", - auditEntries.stream().anyMatch(entry -> entry.getChangedValues().contains( - ImmutableMap.of("new", HOLD2, "previous", "", "name", "Hold Name")))); - } - - /** - * Given a document is added to a hold - * When I view the audit log as an user with no Read permissions over the document - * Then the add to hold entry isn't visible - */ - @Test - public void addToHoldAuditEntryNotVisible() - { - STEP("Create a new file"); - FileModel contentToBeAdded = dataContent.usingAdmin().usingSite(privateSite) - .createContent(CMISUtil.DocumentType.TEXT_PLAIN); - rmAuditService.clearAuditLog(); - - STEP("Add file to hold."); - holdsAPI.addItemToHold(rmAdmin.getUsername(), rmAdmin.getPassword(), contentToBeAdded.getNodeRefWithoutVersion(), HOLD1); - - STEP("Check that an user with no Read permissions can't see the entry for the add to hold event."); - assertTrue("The list of events should not contain Add to Hold entry ", - rmAuditService.getAuditEntriesFilteredByEvent(rmManagerNoReadOnNode, ADD_TO_HOLD).isEmpty()); - } - - /** - * Given a document is added to a hold - * When I view the audit log as an user with no Read permissions over the hold - * Then the the hold name is replaced in the add to hold entry - */ - @Test - public void addToHoldAuditEntryHoldNameNotVisible() - { - STEP("Create a new file"); - FileModel contentToBeAdded = dataContent.usingAdmin().usingSite(privateSite) - .createContent(CMISUtil.DocumentType.TEXT_PLAIN); - rmAuditService.clearAuditLog(); - - STEP("Add file to hold."); - holdsAPI.addItemToHold(rmAdmin.getUsername(), rmAdmin.getPassword(), contentToBeAdded.getNodeRefWithoutVersion(), HOLD1); - - auditEntries = rmAuditService.getAuditEntriesFilteredByEvent(rmManagerNoReadOnHold, ADD_TO_HOLD); - - STEP("Check that an user with no Read permissions can't see the hold name in the add to hold event."); - String replacementHoldName = "You don't have permission to view this hold."; - assertEquals("The list of events should contain the Add to Hold entry", 1, auditEntries.size()); - assertTrue("The hold name should not be visible in the Add to Hold entry ", - auditEntries.stream().anyMatch(entry -> entry.getChangedValues().contains( - ImmutableMap.of("new", replacementHoldName, "previous", "", "name", "Hold Name")))); - } - - @AfterClass (alwaysRun = true) - public void cleanUpAuditAddToHoldTests() - { - holdsListRef.forEach(holdRef -> holdsAPI.deleteHold(getAdminUser(), holdRef)); - dataSite.usingAdmin().deleteSite(privateSite); - asList(rmAdmin, rmManagerNoReadOnHold, rmManagerNoReadOnNode).forEach(user -> getDataUser().usingAdmin().deleteUser(user)); - getRestAPIFactory().getRecordCategoryAPI().deleteRecordCategory(recordCategory.getId()); - } -} diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/audit/AuditCreateHoldTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/audit/AuditCreateHoldTests.java deleted file mode 100644 index 01541c9832..0000000000 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/audit/AuditCreateHoldTests.java +++ /dev/null @@ -1,189 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ -package org.alfresco.rest.rm.community.audit; - -import static java.util.Arrays.asList; - -import static org.alfresco.rest.rm.community.base.TestData.HOLD_DESCRIPTION; -import static org.alfresco.rest.rm.community.base.TestData.HOLD_REASON; -import static org.alfresco.rest.rm.community.model.audit.AuditEvents.CREATE_HOLD; -import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix; -import static org.alfresco.utility.report.log.Step.STEP; -import static org.apache.commons.httpclient.HttpStatus.SC_INTERNAL_SERVER_ERROR; -import static org.testng.AssertJUnit.assertEquals; -import static org.testng.AssertJUnit.assertTrue; - -import java.util.ArrayList; -import java.util.List; - -import com.google.common.collect.ImmutableMap; - -import org.alfresco.rest.rm.community.base.BaseRMRestTest; -import org.alfresco.rest.rm.community.model.audit.AuditEntry; -import org.alfresco.rest.rm.community.model.user.UserRoles; -import org.alfresco.rest.v0.HoldsAPI; -import org.alfresco.rest.v0.service.RMAuditService; -import org.alfresco.rest.v0.service.RoleService; -import org.alfresco.test.AlfrescoTest; -import org.alfresco.utility.model.UserModel; -import org.springframework.beans.factory.annotation.Autowired; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -/** - * This class contains the tests that check the create hold event is audited - * - * @author Claudia Agache - * @since 3.3 - */ -@AlfrescoTest (jira = "RM-6859") -public class AuditCreateHoldTests extends BaseRMRestTest -{ - private final String PREFIX = generateTestPrefix(AuditCreateHoldTests.class); - private final String HOLD1 = PREFIX + "createHold"; - private final String HOLD2 = PREFIX + "createHold2"; - private final String HOLD3 = PREFIX + "createHold3"; - private List holdsListRef = new ArrayList<>(); - - @Autowired - private RMAuditService rmAuditService; - @Autowired - private HoldsAPI holdsAPI; - @Autowired - private RoleService roleService; - - private UserModel rmAdmin, rmManager; - - @BeforeClass (alwaysRun = true) - public void preconditionForAuditCreateHoldTests() - { - STEP("Create test users."); - rmAdmin = roleService.createUserWithRMRole(UserRoles.ROLE_RM_ADMIN.roleId); - rmManager = roleService.createUserWithRMRole(UserRoles.ROLE_RM_MANAGER.roleId); - } - - /** - * Given a new hold is created - * When I view the audit log - * Then an entry has been created in the audit log which contains the following: - * name of the hold - * reason for hold - * user who created the hold - * date the creation occurred - */ - @Test - public void createHoldEventIsAuditedForNewHold() - { - rmAuditService.clearAuditLog(); - - STEP("Create a new hold."); - String hold1NodeRef = holdsAPI.createHoldAndGetNodeRef(rmAdmin.getUsername(), rmAdmin.getPassword(), HOLD1, - HOLD_REASON, HOLD_DESCRIPTION); - holdsListRef.add(hold1NodeRef); - STEP("Check the audit log contains the entry for the created hold with the hold details."); - rmAuditService.checkAuditLogForEvent(getAdminUser(), CREATE_HOLD, rmAdmin, HOLD1, - asList(ImmutableMap.of("new", HOLD_REASON, "previous", "", "name", "Hold Reason"), - ImmutableMap.of("new", HOLD1, "previous", "", "name", "Hold Name"))); - } - - /** - * Given an unsuccessful create hold action - * When I view the audit log - * Then the create hold event isn't audited - */ - @Test - public void createHoldEventIsNotAuditedForExistingHold() - { - STEP("Create a new hold."); - String hold2NodeRef = holdsAPI.createHoldAndGetNodeRef(rmAdmin.getUsername(), rmAdmin.getPassword(), HOLD2, HOLD_REASON, HOLD_DESCRIPTION); - holdsListRef.add(hold2NodeRef); - rmAuditService.clearAuditLog(); - - STEP("Try to create again the same hold and expect action to fail."); - holdsAPI.createHold(rmAdmin.getUsername(), rmAdmin.getPassword(), HOLD2, HOLD_REASON, HOLD_DESCRIPTION, - SC_INTERNAL_SERVER_ERROR); - - STEP("Check the audit log doesn't contain the entry for the second create hold event."); - assertTrue("The list of events should not contain Create Hold entry ", - rmAuditService.getAuditEntriesFilteredByEvent(getAdminUser(), CREATE_HOLD).isEmpty()); - } - - /** - * Given a new hold is created and then deleted - * When I view the audit log - * Then the create hold entry still contains the initial details - */ - @Test - public void createHoldAuditEntryIsNotLost() - { - final String holdName = PREFIX + "holdToBeDeleted"; - rmAuditService.clearAuditLog(); - - STEP("Create a new hold."); - holdsAPI.createHold(rmAdmin.getUsername(), rmAdmin.getPassword(), holdName, HOLD_REASON, HOLD_DESCRIPTION); - - STEP("Get the list of audit entries for the create hold event."); - List auditEntries = rmAuditService.getAuditEntriesFilteredByEvent(getAdminUser(), CREATE_HOLD); - - STEP("Delete the created hold."); - holdsAPI.deleteHold(rmAdmin.getUsername(), rmAdmin.getPassword(), holdName); - - STEP("Get again the list of audit entries for the create hold event."); - List auditEntriesAfterDelete = rmAuditService.getAuditEntriesFilteredByEvent(getAdminUser(), CREATE_HOLD); - - STEP("Check that the audit entry for the created hold didn't change after hold deletion."); - assertEquals("The audit entry for Create Hold has been changed", auditEntries, auditEntriesAfterDelete); - } - - /** - * Given a new hold is created - * When I view the audit log as an user with no Read permissions over the created hold - * Then the create hold entry isn't visible - */ - @Test - public void createHoldAuditEntryNotVisible() - { - rmAuditService.clearAuditLog(); - - STEP("Create a new hold."); - String hold3NodeRef = holdsAPI.createHoldAndGetNodeRef(rmAdmin.getUsername(), rmAdmin.getPassword(), HOLD3, - HOLD_REASON, HOLD_DESCRIPTION); - holdsListRef.add(hold3NodeRef); - - STEP("Check that an user with no Read permissions over the hold can't see the entry for the create hold event"); - assertTrue("The list of events should not contain Create Hold entry ", - rmAuditService.getAuditEntriesFilteredByEvent(rmManager, CREATE_HOLD).isEmpty()); - } - - @AfterClass (alwaysRun = true) - public void cleanUpAuditCreateHoldTests() - { - holdsListRef.forEach(holdRef -> holdsAPI.deleteHold(getAdminUser(), holdRef)); - asList(rmAdmin, rmManager).forEach(user -> getDataUser().usingAdmin().deleteUser(user)); - } -} diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/audit/AuditDeleteHoldTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/audit/AuditDeleteHoldTests.java deleted file mode 100644 index c5723bcd6e..0000000000 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/audit/AuditDeleteHoldTests.java +++ /dev/null @@ -1,139 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ -package org.alfresco.rest.rm.community.audit; - -import static java.util.Arrays.asList; - -import static org.alfresco.rest.rm.community.base.TestData.HOLD_DESCRIPTION; -import static org.alfresco.rest.rm.community.base.TestData.HOLD_REASON; -import static org.alfresco.rest.rm.community.model.audit.AuditEvents.DELETE_HOLD; -import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix; -import static org.alfresco.utility.report.log.Step.STEP; -import static org.apache.commons.httpclient.HttpStatus.SC_INTERNAL_SERVER_ERROR; -import static org.testng.AssertJUnit.assertTrue; - -import java.util.Collections; - -import com.google.common.collect.ImmutableMap; - -import org.alfresco.rest.rm.community.base.BaseRMRestTest; -import org.alfresco.rest.rm.community.model.user.UserRoles; -import org.alfresco.rest.v0.HoldsAPI; -import org.alfresco.rest.v0.service.RMAuditService; -import org.alfresco.rest.v0.service.RoleService; -import org.alfresco.test.AlfrescoTest; -import org.alfresco.utility.model.UserModel; -import org.springframework.beans.factory.annotation.Autowired; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.Test; - -/** - * This class contains the tests that check the delete hold event is audited - * - * @author Claudia Agache - * @since 3.3 - */ -@AlfrescoTest (jira = "RM-6859") -public class AuditDeleteHoldTests extends BaseRMRestTest -{ - private final String PREFIX = generateTestPrefix(AuditDeleteHoldTests.class); - private final String HOLD = PREFIX + "holdToBeDeleted"; - private final String HOLD2 = PREFIX + "deleteHold"; - - @Autowired - private RMAuditService rmAuditService; - @Autowired - private HoldsAPI holdsAPI; - @Autowired - private RoleService roleService; - - private UserModel rmAdmin, rmManager; - private String holdNodeRef; - - @BeforeClass (alwaysRun = true) - public void preconditionForAuditDeleteHoldTests() - { - STEP("Create a new hold."); - holdNodeRef = holdsAPI.createHoldAndGetNodeRef(getAdminUser().getUsername(), getAdminUser().getPassword(), HOLD, - HOLD_REASON, HOLD_DESCRIPTION); - - STEP("Create 2 users with different permissions for the created hold."); - rmAdmin = roleService.createUserWithRMRole(UserRoles.ROLE_RM_ADMIN.roleId); - rmManager = roleService.createUserWithRMRole(UserRoles.ROLE_RM_MANAGER.roleId); - } - - /** - * Given a hold is deleted - * When I view the audit log - * Then an entry has been created in the audit log which contains the following: - * name of the hold - * user who deleted the hold - * date the delete occurred - */ - @Test - public void deleteHoldEventIsAudited() - { - STEP("Create a new hold."); - String holdRef = holdsAPI.createHoldAndGetNodeRef(rmAdmin.getUsername(), rmAdmin.getPassword(), HOLD2, - HOLD_REASON, HOLD_DESCRIPTION); - - rmAuditService.clearAuditLog(); - - STEP("Delete the created hold."); - holdsAPI.deleteHold(rmAdmin, holdRef); - - STEP("Check the audit log contains the entry for the deleted hold with the hold details."); - rmAuditService.checkAuditLogForEvent(getAdminUser(), DELETE_HOLD, rmAdmin, HOLD2, - Collections.singletonList(ImmutableMap.of("new", "", "previous", HOLD2, "name", "Hold Name"))); - } - - /** - * Given an unsuccessful delete hold action - * When I view the audit log - * Then the delete hold event isn't audited - */ - @Test - public void unsuccessfulDeleteHoldIsNotAudited() - { - rmAuditService.clearAuditLog(); - - STEP("Try to delete a hold by an user with no Read permissions over the hold."); - holdsAPI.deleteHold(rmManager.getUsername(), rmManager.getPassword(), holdNodeRef, SC_INTERNAL_SERVER_ERROR); - - STEP("Check the audit log doesn't contain the entry for the unsuccessful delete hold."); - assertTrue("The list of events should not contain Delete Hold entry ", - rmAuditService.getAuditEntriesFilteredByEvent(getAdminUser(), DELETE_HOLD).isEmpty()); - } - - @AfterClass (alwaysRun = true) - public void cleanUpAuditDeleteHoldTests() - { - holdsAPI.deleteHold(getAdminUser(), holdNodeRef); - asList(rmAdmin, rmManager).forEach(user -> getDataUser().usingAdmin().deleteUser(user)); - } -} diff --git a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/audit/AuditRemoveFromHoldTests.java b/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/audit/AuditRemoveFromHoldTests.java deleted file mode 100644 index 75f7a9a433..0000000000 --- a/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/audit/AuditRemoveFromHoldTests.java +++ /dev/null @@ -1,329 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ -package org.alfresco.rest.rm.community.audit; - -import static java.util.Arrays.asList; - -import static org.alfresco.rest.rm.community.base.TestData.HOLD_DESCRIPTION; -import static org.alfresco.rest.rm.community.base.TestData.HOLD_REASON; -import static org.alfresco.rest.rm.community.model.audit.AuditEvents.REMOVE_FROM_HOLD; -import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix; -import static org.alfresco.rest.rm.community.utils.RMSiteUtil.FILE_PLAN_PATH; -import static org.alfresco.utility.Utility.buildPath; -import static org.alfresco.utility.Utility.removeLastSlash; -import static org.alfresco.utility.data.RandomData.getRandomName; -import static org.alfresco.utility.report.log.Step.STEP; -import static org.apache.commons.httpclient.HttpStatus.SC_INTERNAL_SERVER_ERROR; -import static org.testng.AssertJUnit.assertEquals; -import static org.testng.AssertJUnit.assertTrue; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collections; -import java.util.List; - -import com.google.common.collect.ImmutableMap; - -import org.alfresco.dataprep.CMISUtil; -import org.alfresco.rest.rm.community.base.BaseRMRestTest; -import org.alfresco.rest.rm.community.model.audit.AuditEntry; -import org.alfresco.rest.rm.community.model.record.Record; -import org.alfresco.rest.rm.community.model.recordcategory.RecordCategory; -import org.alfresco.rest.rm.community.model.recordcategory.RecordCategoryChild; -import org.alfresco.rest.rm.community.model.user.UserPermissions; -import org.alfresco.rest.rm.community.model.user.UserRoles; -import org.alfresco.rest.v0.HoldsAPI; -import org.alfresco.rest.v0.service.RMAuditService; -import org.alfresco.rest.v0.service.RoleService; -import org.alfresco.test.AlfrescoTest; -import org.alfresco.utility.constants.UserRole; -import org.alfresco.utility.model.FileModel; -import org.alfresco.utility.model.SiteModel; -import org.alfresco.utility.model.UserModel; -import org.springframework.beans.factory.annotation.Autowired; -import org.testng.annotations.AfterClass; -import org.testng.annotations.BeforeClass; -import org.testng.annotations.DataProvider; -import org.testng.annotations.Test; - -/** - * This class contains the tests that check the remove from hold event is audited - * - * @author Claudia Agache - * @since 3.3 - */ -@AlfrescoTest (jira = "RM-6859") -public class AuditRemoveFromHoldTests extends BaseRMRestTest -{ - private final String PREFIX = generateTestPrefix(AuditRemoveFromHoldTests.class); - private final String HOLD1 = PREFIX + "hold1"; - private final String HOLD2 = PREFIX + "hold2"; - private final String HOLD3 = PREFIX + "hold3"; - private final String DELETED_HOLD = PREFIX + "deletedHold"; - - @Autowired - private RMAuditService rmAuditService; - @Autowired - private HoldsAPI holdsAPI; - @Autowired - private RoleService roleService; - - private UserModel rmAdmin, rmManagerNoReadOnHold, rmManagerNoReadOnNode; - private SiteModel privateSite; - private RecordCategory recordCategory; - private RecordCategoryChild recordFolder, heldRecordFolder; - private Record heldRecord; - private List auditEntries; - private List holdsList = asList(HOLD1, HOLD2, HOLD3); - private List holdsListRef = new ArrayList<>(); - private FileModel heldContent; - private String hold1NodeRef; - - @BeforeClass (alwaysRun = true) - public void preconditionForAuditRemoveFromHoldTests() throws Exception - { - STEP("Create an user with full rights to remove content from a hold."); - rmAdmin = roleService.createUserWithRMRole(UserRoles.ROLE_RM_ADMIN.roleId); - - STEP("Create a collaboration site."); - privateSite = dataSite.usingUser(rmAdmin).createPrivateRandomSite(); - - STEP("Create new holds."); - hold1NodeRef = holdsAPI.createHoldAndGetNodeRef(getAdminUser().getUsername(), getAdminUser().getPassword(), - HOLD1, HOLD_REASON, HOLD_DESCRIPTION); - String hold2NodeRef = holdsAPI.createHoldAndGetNodeRef(getAdminUser().getUsername(), getAdminUser().getPassword(), HOLD2, HOLD_REASON, HOLD_DESCRIPTION); - String hold3NodeRef = holdsAPI.createHoldAndGetNodeRef(getAdminUser().getUsername(), getAdminUser().getPassword(), HOLD3, HOLD_REASON, HOLD_DESCRIPTION); - String deleteNodeRef = holdsAPI.createHoldAndGetNodeRef(getAdminUser().getUsername(), getAdminUser().getPassword(), DELETED_HOLD, HOLD_REASON, HOLD_DESCRIPTION); - holdsListRef = asList(hold1NodeRef, hold2NodeRef, hold3NodeRef); - - STEP("Create a new record category with a record folder."); - recordCategory = createRootCategory(getRandomName("recordCategory")); - recordFolder = createRecordFolder(recordCategory.getId(), getRandomName("recFolder")); - - STEP("Create some held items"); - heldContent = dataContent.usingAdmin().usingSite(privateSite) - .createContent(CMISUtil.DocumentType.TEXT_PLAIN); - heldRecordFolder = createRecordFolder(recordCategory.getId(), PREFIX + "heldRecFolder"); - heldRecord = createElectronicRecord(recordFolder.getId(), PREFIX + "record"); - - holdsAPI.addItemsToHolds(getAdminUser().getUsername(), getAdminUser().getPassword(), - asList(heldContent.getNodeRefWithoutVersion(), heldRecordFolder.getId(), heldRecord.getId()), - holdsList); - - STEP("Create users without rights to remove content from a hold."); - rmManagerNoReadOnHold = roleService.createUserWithSiteRoleRMRoleAndPermission(privateSite, - UserRole.SiteManager, recordCategory.getId(), UserRoles.ROLE_RM_MANAGER, UserPermissions.PERMISSION_FILING); - rmManagerNoReadOnNode = roleService.createUserWithRMRoleAndRMNodePermission(UserRoles.ROLE_RM_MANAGER.roleId, - hold1NodeRef, UserPermissions.PERMISSION_FILING); - } - - /** - * Data provider with valid nodes that can be removed from a hold - * - * @return the node id, the node name and the node path - */ - @DataProvider (name = "validNodesForRemoveFromHold") - public Object[][] getValidNodesForRemoveFromHold() - { - String recordFolderPath = removeLastSlash(buildPath(FILE_PLAN_PATH, recordCategory.getName(), - heldRecordFolder.getName())); - String recordPath = removeLastSlash(buildPath(FILE_PLAN_PATH, recordCategory.getName(), - recordFolder.getName(), heldRecord.getName())); - String contentPath = "/Company Home" + heldContent.getCmisLocation(); - - return new String[][] - { - // a record folder - { heldRecordFolder.getId(), heldRecordFolder.getName(), recordFolderPath }, - // a record - { heldRecord.getId(), heldRecord.getName(), recordPath }, - //an active content, - { heldContent.getNodeRefWithoutVersion(), heldContent.getName(), contentPath } - }; - } - - /** - * Given a document/record/record folder is removed from a hold - * When I view the audit log - * Then an entry has been created in the audit log that contains the following: - * name of the hold - * name of the document/record/record folder removed - * user who removed the content - * date the content was removed - * path of the node - */ - @Test (dataProvider = "validNodesForRemoveFromHold") - public void removeFromHoldEventIsAudited(String nodeId, String nodeName, String nodePath) - { - rmAuditService.clearAuditLog(); - - STEP("Remove node from hold."); - holdsAPI.removeItemFromHold(rmAdmin.getUsername(), rmAdmin.getPassword(), nodeId, HOLD3); - - STEP("Check the audit log contains the entry for the remove from hold event."); - rmAuditService.checkAuditLogForEvent(getAdminUser(), REMOVE_FROM_HOLD, rmAdmin, nodeName, nodePath, - asList(ImmutableMap.of("new", "", "previous", nodeName, "name", "Name"), - ImmutableMap.of("new", "", "previous", HOLD3, "name", "Hold Name"))); - } - - /** - * Given an unsuccessful remove from hold action - * When I view the audit log - * Then the remove from hold event isn't audited - */ - @Test - public void unsuccessfulRemoveFromHoldIsNotAudited() - { - rmAuditService.clearAuditLog(); - - STEP("Try to remove the record from a hold by an user with no rights."); - holdsAPI.removeItemsFromHolds(rmManagerNoReadOnHold.getUsername(), rmManagerNoReadOnHold.getPassword(), - SC_INTERNAL_SERVER_ERROR, Collections.singletonList(heldRecord.getId()), - Collections.singletonList(hold1NodeRef)); - - STEP("Check the audit log doesn't contain the entry for the unsuccessful remove from hold."); - assertTrue("The list of events should not contain remove from hold entry ", - rmAuditService.getAuditEntriesFilteredByEvent(getAdminUser(), REMOVE_FROM_HOLD).isEmpty()); - } - - /** - * Given a not empty record folder is removed from a hold - * When I view the audit log - * Then only an entry has been created in the audit log for the record folder removed - */ - @Test - public void removeFromHoldNotAuditedForRecordFolderChildren() throws Exception - { - STEP("Create a new record folder with a record inside"); - RecordCategoryChild notEmptyRecFolder = createRecordFolder(recordCategory.getId(), PREFIX + "notEmptyRecFolder"); - Record record = createElectronicRecord(notEmptyRecFolder.getId(), PREFIX + "record"); - - STEP("Add the record folder to a hold."); - holdsAPI.addItemToHold(rmAdmin.getUsername(), rmAdmin.getPassword(), notEmptyRecFolder.getId(), HOLD1); - - rmAuditService.clearAuditLog(); - - STEP("Remove record folder from hold."); - holdsAPI.removeItemFromHold(rmAdmin.getUsername(), rmAdmin.getPassword(), notEmptyRecFolder.getId(), HOLD1); - - STEP("Get the list of audit entries for the remove from hold event."); - auditEntries = rmAuditService.getAuditEntriesFilteredByEvent(getAdminUser(), REMOVE_FROM_HOLD); - - STEP("Check the audit log contains only an entry for remove from hold."); - assertEquals("The list of events should contain only an entry", 1, auditEntries.size()); - assertTrue("The list of events should not contain Remove from Hold entry for the record", - auditEntries.stream().noneMatch(entry -> entry.getNodeName().equals(record.getName()))); - } - - /** - * Given a record folder is removed from multiple holds - * When I view the audit log - * Then multiple entries have been created in the audit log for each remove from hold event - */ - @Test - public void removeFromHoldIsAuditedInBulkRemoval() - { - rmAuditService.clearAuditLog(); - - STEP("Remove record folder from multiple holds."); - holdsAPI.removeItemsFromHolds(rmAdmin.getUsername(), rmAdmin.getPassword(), - Collections.singletonList(heldRecordFolder.getId()), asList(HOLD1, HOLD2)); - - STEP("Get the list of audit entries for the remove from hold event."); - auditEntries = rmAuditService.getAuditEntriesFilteredByEvent(getAdminUser(), REMOVE_FROM_HOLD); - - STEP("Check the audit log contains entries for both removal."); - assertEquals("The list of events should contain remove from Hold entries for both holds", 2, - auditEntries.size()); - assertTrue("The hold name value for the first remove from hold is not audited.", - auditEntries.stream().anyMatch(entry -> entry.getChangedValues().contains( - ImmutableMap.of("new", "", "previous", HOLD1, "name", "Hold Name")))); - assertTrue("The hold name value for the second remove from hold is not audited.", - auditEntries.stream().anyMatch(entry -> entry.getChangedValues().contains( - ImmutableMap.of("new", "", "previous", HOLD2, "name", "Hold Name")))); - } - - /** - * Given a document/record/record folder is removed from a hold - * When I view the audit log as an user with no Read permissions over the node - * Then the remove from hold entry isn't visible - */ - @Test - public void removeFromHoldAuditEntryNotVisible() - { - STEP("Add content to a hold."); - FileModel heldFile = dataContent.usingAdmin().usingSite(privateSite) - .createContent(CMISUtil.DocumentType.TEXT_PLAIN); - holdsAPI.addItemToHold(rmAdmin.getUsername(), rmAdmin.getPassword(), heldFile.getNodeRefWithoutVersion(), HOLD1); - - rmAuditService.clearAuditLog(); - - STEP("Remove held content from the hold."); - holdsAPI.removeItemFromHold(rmAdmin.getUsername(), rmAdmin.getPassword(), heldFile.getNodeRefWithoutVersion(), HOLD1); - - STEP("Check that an user with no Read permissions can't see the entry for the remove from hold event."); - assertTrue("The list of events should not contain Remove from Hold entry ", - rmAuditService.getAuditEntriesFilteredByEvent(rmManagerNoReadOnNode, REMOVE_FROM_HOLD).isEmpty()); - } - - /** - * Given a document/record/record folder is removed from a hold - * When I view the audit log as an user with no Read permissions over the hold - * Then the the hold name is replaced in the remove from hold entry - */ - @Test - public void removeFromHoldAuditEntryHoldNameNotVisible() - { - STEP("Add content to a hold."); - FileModel heldFile = dataContent.usingAdmin().usingSite(privateSite) - .createContent(CMISUtil.DocumentType.TEXT_PLAIN); - holdsAPI.addItemToHold(rmAdmin.getUsername(), rmAdmin.getPassword(), heldFile.getNodeRefWithoutVersion(), HOLD1); - - rmAuditService.clearAuditLog(); - - STEP("Remove held content from the hold."); - holdsAPI.removeItemFromHold(rmAdmin.getUsername(), rmAdmin.getPassword(), heldFile.getNodeRefWithoutVersion(), HOLD1); - - auditEntries = rmAuditService.getAuditEntriesFilteredByEvent(rmManagerNoReadOnHold, REMOVE_FROM_HOLD); - - STEP("Check that an user with no Read permissions can't see the hold name in the remove from hold event."); - String replacementHoldName = "You don't have permission to view this hold."; - assertEquals("The list of events should contain the Remove from Hold entry", 1, auditEntries.size()); - assertTrue("The hold name should not be visible in the Remove from Hold entry ", - auditEntries.stream().anyMatch(entry -> entry.getChangedValues().contains( - ImmutableMap.of("new", "", "previous", replacementHoldName, "name", "Hold Name")))); - } - - @AfterClass (alwaysRun = true) - public void cleanUpAuditRemoveFromHoldTests() - { - holdsListRef.forEach(holdRef -> holdsAPI.deleteHold(getAdminUser(), holdRef)); - dataSite.usingAdmin().deleteSite(privateSite); - asList(rmAdmin, rmManagerNoReadOnHold, rmManagerNoReadOnNode).forEach(user -> getDataUser().usingAdmin().deleteUser(user)); - getRestAPIFactory().getRecordCategoryAPI().deleteRecordCategory(recordCategory.getId()); - } -} diff --git a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-audit-context.xml b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-audit-context.xml index 3596e79165..d8033cc8a1 100644 --- a/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-audit-context.xml +++ b/rm-community/rm-community-repo/config/alfresco/module/org_alfresco_module_rm/rm-audit-context.xml @@ -130,29 +130,4 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/AddToHoldAuditEvent.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/AddToHoldAuditEvent.java deleted file mode 100644 index 34fb578d5c..0000000000 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/AddToHoldAuditEvent.java +++ /dev/null @@ -1,85 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ - -package org.alfresco.module.org_alfresco_module_rm.audit.event; - -import static org.alfresco.repo.policy.Behaviour.NotificationFrequency.EVERY_EVENT; - -import java.io.Serializable; -import java.util.Map; - -import org.alfresco.model.ContentModel; -import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies; -import org.alfresco.repo.policy.annotation.Behaviour; -import org.alfresco.repo.policy.annotation.BehaviourBean; -import org.alfresco.repo.policy.annotation.BehaviourKind; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.namespace.QName; - -/** - * Add to hold audit event. - * - * @author Sara Aspery - * @since 3.3 - */ -@BehaviourBean -public class AddToHoldAuditEvent extends AuditEvent implements HoldServicePolicies.OnAddToHoldPolicy -{ - /** - * Node Service - */ - private NodeService nodeService; - - /** - * Sets the node service - * - * @param nodeService nodeService to set - */ - public void setNodeService(NodeService nodeService) - { - this.nodeService = nodeService; - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.OnAddToHoldPolicy#onAddToHold(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - @Behaviour - ( - kind = BehaviourKind.CLASS, - type = "rma:hold", - notificationFrequency = EVERY_EVENT - ) - public void onAddToHold(NodeRef holdNodeRef, NodeRef contentNodeRef) - { - Map auditProperties = HoldUtils.makePropertiesMap(holdNodeRef, nodeService); - auditProperties.put(ContentModel.PROP_NAME, nodeService.getProperty(contentNodeRef, ContentModel.PROP_NAME)); - - recordsManagementAuditService.auditEvent(contentNodeRef, getName(), null, auditProperties, true, false); - } -} diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/CreateHoldAuditEvent.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/CreateHoldAuditEvent.java deleted file mode 100644 index 85bf2e38b8..0000000000 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/CreateHoldAuditEvent.java +++ /dev/null @@ -1,88 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ - -package org.alfresco.module.org_alfresco_module_rm.audit.event; - -import java.io.Serializable; -import java.util.Map; - -import org.alfresco.repo.node.NodeServicePolicies; -import org.alfresco.repo.policy.Behaviour.NotificationFrequency; -import org.alfresco.repo.policy.annotation.Behaviour; -import org.alfresco.repo.policy.annotation.BehaviourBean; -import org.alfresco.repo.policy.annotation.BehaviourKind; -import org.alfresco.service.cmr.repository.ChildAssociationRef; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.namespace.QName; - -/** - * Create hold audit event. - * This listens to the NodeServicePolicies.OnCreateNodePolicy in order to cover the create hold action from Share - * since that does not call the createHold from HoldService - * - * @author Sara Aspery - * @since 3.3 - */ -@BehaviourBean -public class CreateHoldAuditEvent extends AuditEvent implements NodeServicePolicies.OnCreateNodePolicy -{ - /** - * Node Service - */ - private NodeService nodeService; - - /** - * Sets the node service - * - * @param nodeService nodeService to set - */ - public void setNodeService(NodeService nodeService) - { - this.nodeService = nodeService; - } - - /** - * @see org.alfresco.repo.node.NodeServicePolicies.OnCreateNodePolicy#onCreateNode(org.alfresco.service.cmr.repository.ChildAssociationRef) - */ - @Override - @Behaviour - ( - kind = BehaviourKind.CLASS, - type = "rma:hold", - notificationFrequency = NotificationFrequency.TRANSACTION_COMMIT - ) - public void onCreateNode(ChildAssociationRef childAssociationRef) - { - NodeRef holdNodeRef = childAssociationRef.getChildRef(); - - Map auditProperties = HoldUtils.makePropertiesMap(holdNodeRef, nodeService); - auditProperties.put(PROP_HOLD_REASON, nodeService.getProperty(holdNodeRef, PROP_HOLD_REASON)); - - recordsManagementAuditService.auditEvent(holdNodeRef, getName(), null, auditProperties); - } -} diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/DeleteHoldAuditEvent.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/DeleteHoldAuditEvent.java deleted file mode 100644 index 6699ff629c..0000000000 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/DeleteHoldAuditEvent.java +++ /dev/null @@ -1,82 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ - -package org.alfresco.module.org_alfresco_module_rm.audit.event; - -import static org.alfresco.repo.policy.Behaviour.NotificationFrequency.EVERY_EVENT; - -import java.io.Serializable; -import java.util.Map; - -import org.alfresco.repo.node.NodeServicePolicies; -import org.alfresco.repo.policy.annotation.Behaviour; -import org.alfresco.repo.policy.annotation.BehaviourBean; -import org.alfresco.repo.policy.annotation.BehaviourKind; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.namespace.QName; - -/** - * Delete hold audit event. - * This listens to the NodeServicePolicies.BeforeDeleteNodePolicy in order to cover the delete hold using nodes service - * - * @author Sara Aspery - * @since 3.3 - */ -@BehaviourBean -public class DeleteHoldAuditEvent extends AuditEvent implements NodeServicePolicies.BeforeDeleteNodePolicy -{ - /** - * Node Service - */ - private NodeService nodeService; - - /** - * Sets the node service - * - * @param nodeService nodeService to set - */ - public void setNodeService(NodeService nodeService) - { - this.nodeService = nodeService; - } - - /** - * @see org.alfresco.repo.node.NodeServicePolicies.BeforeDeleteNodePolicy#beforeDeleteNode(org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - @Behaviour ( - kind = BehaviourKind.CLASS, - type = "rma:hold", - notificationFrequency = EVERY_EVENT - ) - public void beforeDeleteNode(NodeRef holdNodeRef) - { - Map auditProperties = HoldUtils.makePropertiesMap(holdNodeRef, nodeService); - recordsManagementAuditService.auditEvent(holdNodeRef, getName(), auditProperties, null, true, false); - } -} diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/HoldUtils.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/HoldUtils.java deleted file mode 100644 index 23b225ef8c..0000000000 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/HoldUtils.java +++ /dev/null @@ -1,69 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ - -package org.alfresco.module.org_alfresco_module_rm.audit.event; - -import org.alfresco.model.ContentModel; -import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.namespace.QName; - -import java.io.Serializable; -import java.util.HashMap; -import java.util.Map; - -/** - * Utility class for creating audit events about holds. - * - * @author Sara Aspery - * @since 3.3 - */ -class HoldUtils -{ - /** A QName to display for the hold name. */ - public static final QName HOLD_NAME = QName.createQName(RecordsManagementModel.RM_URI, "Hold Name"); - /** A QName to display for the hold node ref. */ - public static final QName HOLD_NODEREF = QName.createQName(RecordsManagementModel.RM_URI, "Hold NodeRef"); - - /** - * Create a properties map containing the hold name and node ref for the given hold. - * - * @param nodeRef The nodeRef of the hold. - * @param nodeService The node service. - * @return A map containing the name and noderef of the hold. - */ - static Map makePropertiesMap(NodeRef nodeRef, NodeService nodeService) - { - Map auditProperties = new HashMap<>(); - - auditProperties.put(HOLD_NAME, nodeService.getProperty(nodeRef, ContentModel.PROP_NAME)); - auditProperties.put(HOLD_NODEREF, nodeRef); - - return auditProperties; - } -} diff --git a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/RemoveFromHoldAuditEvent.java b/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/RemoveFromHoldAuditEvent.java deleted file mode 100644 index d9e2111fa3..0000000000 --- a/rm-community/rm-community-repo/source/java/org/alfresco/module/org_alfresco_module_rm/audit/event/RemoveFromHoldAuditEvent.java +++ /dev/null @@ -1,84 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ - -package org.alfresco.module.org_alfresco_module_rm.audit.event; - -import java.io.Serializable; -import java.util.Map; - -import org.alfresco.model.ContentModel; -import org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies; -import org.alfresco.repo.policy.Behaviour.NotificationFrequency; -import org.alfresco.repo.policy.annotation.Behaviour; -import org.alfresco.repo.policy.annotation.BehaviourBean; -import org.alfresco.repo.policy.annotation.BehaviourKind; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.service.namespace.QName; - -/** - * Delete from hold audit event. - * - * @author Chris Shields - * @since 3.3 - */ -@BehaviourBean -public class RemoveFromHoldAuditEvent extends AuditEvent implements HoldServicePolicies.OnRemoveFromHoldPolicy -{ - /** - * Node Service - */ - private NodeService nodeService; - - /** - * Sets the node service - * - * @param nodeService nodeService to set - */ - public void setNodeService(NodeService nodeService) - { - this.nodeService = nodeService; - } - - /** - * @see org.alfresco.module.org_alfresco_module_rm.hold.HoldServicePolicies.OnRemoveFromHoldPolicy#onRemoveFromHold(org.alfresco.service.cmr.repository.NodeRef, org.alfresco.service.cmr.repository.NodeRef) - */ - @Override - @Behaviour - ( - kind = BehaviourKind.CLASS, - type = "rma:hold", - notificationFrequency = NotificationFrequency.EVERY_EVENT - ) - public void onRemoveFromHold(NodeRef holdNodeRef, NodeRef contentNodeRef) - { - Map auditProperties = HoldUtils.makePropertiesMap(holdNodeRef, nodeService); - auditProperties.put(ContentModel.PROP_NAME, nodeService.getProperty(contentNodeRef, ContentModel.PROP_NAME)); - - recordsManagementAuditService.auditEvent(contentNodeRef, getName(), auditProperties, null, true); - } -} diff --git a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordsManagementAuditServiceImplTest.java b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordsManagementAuditServiceImplTest.java index d7787236cb..6c21cf9d4b 100644 --- a/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordsManagementAuditServiceImplTest.java +++ b/rm-community/rm-community-repo/test/java/org/alfresco/module/org_alfresco_module_rm/test/legacy/service/RecordsManagementAuditServiceImplTest.java @@ -28,7 +28,6 @@ package org.alfresco.module.org_alfresco_module_rm.test.legacy.service; import java.io.Serializable; -import java.util.Arrays; import java.util.Date; import java.util.HashMap; import java.util.List; @@ -41,14 +40,12 @@ import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditQu import org.alfresco.module.org_alfresco_module_rm.audit.RecordsManagementAuditService; import org.alfresco.module.org_alfresco_module_rm.audit.event.AuditEvent; import org.alfresco.module.org_alfresco_module_rm.capability.RMPermissionModel; -import org.alfresco.module.org_alfresco_module_rm.model.RecordsManagementModel; import org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase; import org.alfresco.repo.security.authentication.AuthenticationException; import org.alfresco.repo.security.authentication.AuthenticationUtil; import org.alfresco.service.cmr.repository.NodeRef; import org.alfresco.service.namespace.QName; import org.alfresco.util.EqualsHelper; -import org.alfresco.util.GUID; import org.alfresco.util.Pair; /** @@ -62,21 +59,12 @@ import org.alfresco.util.Pair; public class RecordsManagementAuditServiceImplTest extends BaseRMTestCase implements RMPermissionModel { - /** A QName to display for the hold name. */ - private static final QName HOLD_NAME = QName.createQName(RecordsManagementModel.RM_URI, "Hold Name"); - /** Test record */ private NodeRef record; /** Test start time */ private Date testStartTime; - /** - * Remove from hold audit event name. - */ - private static final String REMOVE_FROM_HOLD_AUDIT_EVENT = "Remove From Hold"; - - /** * @see org.alfresco.module.org_alfresco_module_rm.test.util.BaseRMTestCase#setUp() */ @@ -173,7 +161,7 @@ public class RecordsManagementAuditServiceImplTest extends BaseRMTestCase /** * Test getAuditTrail method to check that deleted items always show in the audit. - * + * * @see RM-2391 (last addressed isue) */ public void testGetAuditTrailForDeletedItem() @@ -588,315 +576,6 @@ public class RecordsManagementAuditServiceImplTest extends BaseRMTestCase }); } - /** - * Given I have created a hold - * When I will get the RM audit filter by create hold event - * Then there will be an entry for the created hold, including the hold name and reason - */ - public void testAuditForCreateHold() - { - doBehaviourDrivenTest(new BehaviourDrivenTest() - { - final static String CREATE_HOLD_AUDIT_EVENT = "Create Hold"; - - String holdName = "Hold " + GUID.generate(); - String holdReason = "Reason " + GUID.generate(); - - Map auditEventProperties; - - @Override - public void given() - { - rmAuditService.clearAuditLog(filePlan); - utils.createHold(filePlan, holdName, holdReason); - } - - @Override - public void when() - { - auditEventProperties = getAuditEntry(CREATE_HOLD_AUDIT_EVENT).getAfterProperties(); - } - - @Override - public void then() - { - // check create hold audit event includes the hold name - assertEquals("Create Hold event does not include hold name.", holdName, - auditEventProperties.get(HOLD_NAME)); - - // check create hold audit event includes the hold reason - assertEquals("Create Hold event does not include hold reason.", holdReason, - auditEventProperties.get(PROP_HOLD_REASON)); - } - - @Override - public void after() - { - // Stop and delete all entries - rmAuditService.stopAuditLog(filePlan); - rmAuditService.clearAuditLog(filePlan); - } - }); - } - - /** - * Given I have created a hold - * When I delete the hold and get the RM audit filter by delete hold event - * Then there will be an entry for the deleted hold, including the hold name - */ - public void testAuditForDeleteHold() - { - doBehaviourDrivenTest(new BehaviourDrivenTest() - { - final static String DELETE_HOLD_AUDIT_EVENT = "Delete Hold"; - - String holdName = "Hold " + GUID.generate(); - - NodeRef hold; - Map auditEventProperties; - - @Override - public void given() - { - rmAuditService.clearAuditLog(filePlan); - hold = utils.createHold(filePlan, holdName, "Reason " + GUID.generate()); - } - - @Override - public void when() - { - utils.deleteHold(hold); - auditEventProperties = getAuditEntry(DELETE_HOLD_AUDIT_EVENT).getBeforeProperties(); - } - - @Override - public void then() - { - // check delete hold audit event includes the hold name - assertEquals("Delete Hold event does not include hold name.", holdName, - auditEventProperties.get(HOLD_NAME)); - } - - @Override - public void after() - { - // Stop and delete all entries - rmAuditService.stopAuditLog(filePlan); - rmAuditService.clearAuditLog(filePlan); - } - }); - } - - /** - * Given I have added an item of content to a hold - * When I get the RM audit filter by add to hold event - * Then there will be an entry for the item added to the hold, including both the item name and hold name - */ - public void testAuditForAddContentToHold() - { - doBehaviourDrivenTest(new BehaviourDrivenTest() - { - final static String ADD_TO_HOLD_AUDIT_EVENT = "Add To Hold"; - - String holdName = "Hold " + GUID.generate(); - NodeRef hold; - - Map auditEventProperties; - - @Override - public void given() - { - rmAuditService.clearAuditLog(filePlan); - hold = utils.createHold(filePlan, holdName, "Reason " + GUID.generate()); - utils.addItemToHold(hold, dmDocument); - } - - @Override - public void when() - { - auditEventProperties = getAuditEntry(ADD_TO_HOLD_AUDIT_EVENT).getAfterProperties(); - } - - @Override - public void then() - { - // check add to hold audit event includes the hold name - assertEquals("Add To Hold event does not include hold name.", holdName, - auditEventProperties.get(HOLD_NAME)); - - // check add to hold audit event includes the content name - String contentName = (String) nodeService.getProperty(dmDocument, PROP_NAME); - assertEquals("Add To Hold event does not include content name.", contentName, - auditEventProperties.get(PROP_NAME)); - } - - @Override - public void after() - { - // Stop and delete all entries - rmAuditService.stopAuditLog(filePlan); - rmAuditService.clearAuditLog(filePlan); - } - }); - } - - - /** - * Given I have an item in a hold - * When I remove the item from the hold - * Then there will be an audit entry for the item removed from the hold, including both the item name and hold name - */ - @org.junit.Test - public void testAuditForRemoveContentFromHold() - { - doBehaviourDrivenTest(new BehaviourDrivenTest() - { - String holdName = "Hold " + GUID.generate(); - NodeRef hold; - - @Override - public void given() - { - rmAuditService.clearAuditLog(filePlan); - hold = utils.createHold(filePlan, holdName, "Reason " + GUID.generate()); - utils.addItemToHold(hold, dmDocument); - } - - @Override - public void when() - { - utils.removeItemFromHold(hold, dmDocument); - } - - @Override - public void then() - { - Map auditEventProperties = getAuditEntry(REMOVE_FROM_HOLD_AUDIT_EVENT).getBeforeProperties(); - - // check remove from hold audit event includes the hold name - assertEquals("Remove From Hold event does not include hold name.", holdName, - auditEventProperties.get(HOLD_NAME)); - - // check remove from hold audit event includes the content name - String contentName = (String) nodeService.getProperty(dmDocument, PROP_NAME); - assertEquals("Remove From Hold event does not include content name.", contentName, - auditEventProperties.get(PROP_NAME)); - } - - @Override - public void after() - { - // Stop and delete all entries - rmAuditService.stopAuditLog(filePlan); - rmAuditService.clearAuditLog(filePlan); - } - }); - - } - - - /** - * Given I have removed an item from multiple holds - * When I will get the RM audit filter by remove from hold events - * Then there will be entries for the item removed from each hold, including both the item name and hold name - */ - @org.junit.Test - public void testAuditForRemoveContentFromMultipleHolds() - { - doBehaviourDrivenTest(new BehaviourDrivenTest() - { - String holdName1 = "Hold " + GUID.generate(); - String holdName2 = "Hold " + GUID.generate(); - NodeRef hold1, hold2; - - @Override - public void given() - { - rmAuditService.clearAuditLog(filePlan); - - hold1 = utils.createHold(filePlan, holdName1, "Reason " + GUID.generate()); - hold2 = utils.createHold(filePlan, holdName2, "Reason " + GUID.generate()); - utils.addItemToHold(hold1, dmDocument); - utils.addItemToHold(hold2, dmDocument); - } - - @Override - public void when() - { - utils.removeItemsFromHolds(Arrays.asList(hold1, hold2), Arrays.asList(dmDocument)); - } - - @Override - public void then() - { - List auditEntries = getAuditEntries(REMOVE_FROM_HOLD_AUDIT_EVENT); - - // check remove from hold audit event exists for both holds - assertEquals(2, auditEntries.size()); - } - - @Override - public void after() - { - // Stop and delete all entries - rmAuditService.stopAuditLog(filePlan); - rmAuditService.clearAuditLog(filePlan); - } - }); - - } - - - /** - * Given I have removed items from a hold - * When I will get the RM audit filter by remove from hold events - * Then there will be entries for the items removed from the hold, including both the item name and hold name - */ - @org.junit.Test - public void testAuditForRemoveMultipleContentFromHold() - { - doBehaviourDrivenTest(new BehaviourDrivenTest() - { - String holdName = "Hold " + GUID.generate(); - NodeRef hold; - - @Override - public void given() - { - rmAuditService.clearAuditLog(filePlan); - - hold = utils.createHold(filePlan, holdName, "Reason " + GUID.generate()); - utils.addItemToHold(hold, dmDocument); - utils.addItemToHold(hold, dmDocument1); - } - - @Override - public void when() - { - utils.removeItemsFromHolds(Arrays.asList(hold), Arrays.asList(dmDocument, dmDocument1)); - } - - @Override - public void then() - { - List auditEntries = getAuditEntries(REMOVE_FROM_HOLD_AUDIT_EVENT); - - // check remove from hold audit event exists for both documents - assertEquals(2, auditEntries.size()); - } - - @Override - public void after() - { - // Stop and delete all entries - rmAuditService.stopAuditLog(filePlan); - rmAuditService.clearAuditLog(filePlan); - } - }); - - } - - /** === Helper methods === */ private List getAuditTrail(String asUser) @@ -945,47 +624,6 @@ public class RecordsManagementAuditServiceImplTest extends BaseRMTestCase }, asUser); } - private RecordsManagementAuditEntry getAuditEntry(String auditEvent) - { - // create the audit query parameters for the given event - RecordsManagementAuditQueryParameters params = createAuditQueryParameters(auditEvent); - - // get the audit entries for the given event - List auditEntries = getAuditEntryAssertOnlyOne(params); - - // verify we have the expected audit event - RecordsManagementAuditEntry auditEntry = auditEntries.get(0); - assertEquals(auditEvent + " event is not audited.", auditEvent, auditEntry.getEvent()); - - // return the properties of the audit event - return auditEntry; - } - - private List getAuditEntryAssertOnlyOne(RecordsManagementAuditQueryParameters params) - { - List auditEntries; - auditEntries = getAuditTrail(params, 1, ADMIN_USER); - return auditEntries; - } - - private List getAuditEntries(String auditEvent) - { - // create the audit query parameters for the given event - RecordsManagementAuditQueryParameters params = createAuditQueryParameters(auditEvent); - - // get the audit entries for the given event - List auditEntries = getAllAuditEntries(params); - - return auditEntries; - } - - private List getAllAuditEntries(RecordsManagementAuditQueryParameters params) - { - List auditEntries; - auditEntries = getAuditTrail(params, -1, ADMIN_USER); - return auditEntries; - } - private RecordsManagementAuditQueryParameters createAuditQueryParameters(String auditEvent) { RecordsManagementAuditQueryParameters params = new RecordsManagementAuditQueryParameters(); diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/audit/event/AddToHoldAuditEventUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/audit/event/AddToHoldAuditEventUnitTest.java deleted file mode 100644 index 11159f2d1c..0000000000 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/audit/event/AddToHoldAuditEventUnitTest.java +++ /dev/null @@ -1,92 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ - -package org.alfresco.module.org_alfresco_module_rm.audit.event; - -import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.util.GUID; -import org.junit.Before; -import org.junit.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import java.util.Map; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Matchers.isNull; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; - -/** - * Unit tests for {@link AddToHoldAuditEvent}. - * - * @author Sara Aspery - * @since 3.3 - */ -public class AddToHoldAuditEventUnitTest extends BaseUnitTest -{ - @InjectMocks - private AddToHoldAuditEvent addToHoldAuditEvent; - - @Mock - private NodeService mockedNodeService; - - private NodeRef holdNodeRef; - private NodeRef contentNodeRef; - - /** Set up the mocks. */ - @Before - public void setUp() - { - initMocks(this); - - holdNodeRef = generateNodeRef(); - String holdName = "Hold " + GUID.generate(); - - contentNodeRef = generateNodeRef(); - String contentName = "Content " + GUID.generate(); - - when(mockedNodeService.getProperty(holdNodeRef, PROP_NAME)).thenReturn(holdName); - when(mockedNodeService.getProperty(contentNodeRef, PROP_NAME)).thenReturn(contentName); - } - - /** - * Check that the add to hold event calls an audit event. - * - */ - @Test - public void testAddToHoldCausesAuditEvent() - { - addToHoldAuditEvent.onAddToHold(holdNodeRef, contentNodeRef); - verify(mockedRecordsManagementAuditService, times(1)).auditEvent(eq(contentNodeRef), any(String.class), isNull(Map.class), any(Map.class), eq(true), eq(false)); - } -} diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/audit/event/CreateHoldAuditEventUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/audit/event/CreateHoldAuditEventUnitTest.java deleted file mode 100644 index f41c321fd0..0000000000 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/audit/event/CreateHoldAuditEventUnitTest.java +++ /dev/null @@ -1,93 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ - -package org.alfresco.module.org_alfresco_module_rm.audit.event; - -import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; -import org.alfresco.service.cmr.repository.ChildAssociationRef; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.util.GUID; -import org.junit.Before; -import org.junit.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -import java.util.Map; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Matchers.isNull; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; - -/** - * Unit tests for {@link CreateHoldAuditEvent}. - * - * @author Sara Aspery - * @since 3.3 - */ -public class CreateHoldAuditEventUnitTest extends BaseUnitTest -{ - @InjectMocks - private CreateHoldAuditEvent createHoldAuditEvent; - - @Mock - private NodeService mockedNodeService; - - private NodeRef holdNodeRef; - private ChildAssociationRef childAssociationRef; - - /** Set up the mocks. */ - @Before - public void setUp() - { - initMocks(this); - - holdNodeRef = generateNodeRef(); - String holdName = "Hold " + GUID.generate(); - String holdReason = "Reason " + GUID.generate(); - childAssociationRef = generateChildAssociationRef(null, holdNodeRef); - - when(childAssociationRef.getChildRef()).thenReturn(holdNodeRef); - when(mockedNodeService.getProperty(holdNodeRef, PROP_NAME)).thenReturn(holdName); - when(mockedNodeService.getProperty(holdNodeRef, PROP_HOLD_REASON)).thenReturn(holdReason); - } - - /** - * Check that the create hold event calls an audit event. - * - */ - @Test - public void testCreateHoldCausesAuditEvent() - { - createHoldAuditEvent.onCreateNode(childAssociationRef); - verify(mockedRecordsManagementAuditService, times(1)).auditEvent(eq(holdNodeRef), any(String.class), isNull(Map.class), any(Map.class)); - } -} diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/audit/event/DeleteHoldAuditEventUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/audit/event/DeleteHoldAuditEventUnitTest.java deleted file mode 100644 index 8ef99fe9b6..0000000000 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/audit/event/DeleteHoldAuditEventUnitTest.java +++ /dev/null @@ -1,89 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ - - package org.alfresco.module.org_alfresco_module_rm.audit.event; - -import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.util.GUID; -import org.junit.Before; -import org.junit.Test; -import org.mockito.InjectMocks; -import org.mockito.Matchers; -import org.mockito.Mock; - -import java.util.Map; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Matchers.isNull; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; - -/** - * Unit tests for {@link DeleteHoldAuditEvent}. - * - * @author Sara Aspery - * @since 3.3 - */ -public class DeleteHoldAuditEventUnitTest extends BaseUnitTest -{ - @InjectMocks - private DeleteHoldAuditEvent deleteHoldAuditEvent; - - @Mock - private NodeService mockedNodeService; - - private NodeRef holdNodeRef; - - /** Set up the mocks. */ - @Before - public void setUp() - { - initMocks(this); - - holdNodeRef = generateNodeRef(); - String holdName = "Hold " + GUID.generate(); - - when(mockedNodeService.getProperty(holdNodeRef, PROP_NAME)).thenReturn(holdName); - } - - /** - * Check that the delete hold event calls an audit event. - * - */ - @Test - public void testDeleteHoldCausesAuditEvent() - { - deleteHoldAuditEvent.beforeDeleteNode(holdNodeRef); - verify(mockedRecordsManagementAuditService, times(1)) - .auditEvent(eq(holdNodeRef), any(String.class), any(Map.class), isNull(Map.class), Matchers.eq(true), Matchers.eq(false)); - } -} diff --git a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/audit/event/RemoveFromHoldAuditEventUnitTest.java b/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/audit/event/RemoveFromHoldAuditEventUnitTest.java deleted file mode 100644 index 2ed91b0e96..0000000000 --- a/rm-community/rm-community-repo/unit-test/java/org/alfresco/module/org_alfresco_module_rm/audit/event/RemoveFromHoldAuditEventUnitTest.java +++ /dev/null @@ -1,95 +0,0 @@ -/* - * #%L - * Alfresco Records Management Module - * %% - * Copyright (C) 2005 - 2021 Alfresco Software Limited - * %% - * This file is part of the Alfresco software. - * - - * If the software was purchased under a paid Alfresco license, the terms of - * the paid license agreement will prevail. Otherwise, the software is - * provided under the following open source license terms: - * - - * Alfresco is free software: you can redistribute it and/or modify - * it under the terms of the GNU Lesser General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - - * Alfresco is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Lesser General Public License for more details. - * - - * You should have received a copy of the GNU Lesser General Public License - * along with Alfresco. If not, see . - * #L% - */ - -package org.alfresco.module.org_alfresco_module_rm.audit.event; - -import static org.mockito.Matchers.any; -import static org.mockito.Matchers.eq; -import static org.mockito.Matchers.isNull; -import static org.mockito.Mockito.times; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static org.mockito.MockitoAnnotations.initMocks; - -import java.util.Map; - -import org.alfresco.module.org_alfresco_module_rm.test.util.BaseUnitTest; -import org.alfresco.service.cmr.repository.ChildAssociationRef; -import org.alfresco.service.cmr.repository.NodeRef; -import org.alfresco.service.cmr.repository.NodeService; -import org.alfresco.util.GUID; -import org.junit.Before; -import org.junit.Test; -import org.mockito.InjectMocks; -import org.mockito.Mock; - -/** - * Unit tests for {@link RemoveFromHoldAuditEvent}. - * - * @author Chris Shields - * @since 3.3 - */ -public class RemoveFromHoldAuditEventUnitTest extends BaseUnitTest -{ - @InjectMocks - private RemoveFromHoldAuditEvent removeFromHoldAuditEvent; - - @Mock - private NodeService mockedNodeService; - - private NodeRef holdNodeRef; - private NodeRef contentNodeRef; - - /** - * Set up the mocks. - */ - @Before - public void setUp() - { - initMocks(this); - - holdNodeRef = generateNodeRef(); - String holdName = "Hold " + GUID.generate(); - - contentNodeRef = generateNodeRef(); - String contentName = "Content " + GUID.generate(); - - when(mockedNodeService.getProperty(holdNodeRef, PROP_NAME)).thenReturn(holdName); - when(mockedNodeService.getProperty(contentNodeRef, PROP_NAME)).thenReturn(contentName); - } - - /** - * Check that the remove from hold event calls an audit event. - */ - @Test - public void testRemoveFromHoldCausesAuditEvent() - { - removeFromHoldAuditEvent.onRemoveFromHold(holdNodeRef, contentNodeRef); - verify(mockedRecordsManagementAuditService, times(1)).auditEvent(eq(contentNodeRef), any(String.class), any(Map.class), isNull(Map.class), eq(true)); - } - -} diff --git a/travis/.travis.tests-stage.yml b/travis/.travis.tests-stage.yml index f5afdff84c..2828fb1329 100644 --- a/travis/.travis.tests-stage.yml +++ b/travis/.travis.tests-stage.yml @@ -130,7 +130,7 @@ jobs: - travis_wait 90 xvfb-run --server-args="-screen 0 1920x1080x24" mvn -B test -pl :alfresco-governance-services-automation-ui -Dskip.automationtests=false -DsuiteXmlFile=communitySmokeRMSite.xml -Dshare.url=${SHARE_URL} -Dalfresco.url=${ALFRESCO_URL} ${WEBDRIVER_ARGUMENTS} - <<: *community_shared_UI_configuration - name: "Community Level 2: Disposition Schedules, Holds, Records UI Tests" + name: "Community Level 2: Disposition Schedules, Records UI Tests" script: - travis_wait 90 xvfb-run --server-args="-screen 0 1920x1080x24" mvn -B test -pl :alfresco-governance-services-automation-ui -Dskip.automationtests=false -DsuiteXmlFile=communityLevel2Tests.xml -Dshare.url=${SHARE_URL} -Dalfresco.url=${ALFRESCO_URL} ${WEBDRIVER_ARGUMENTS}