From b4eb5b6607d93e4c8743f9927c5332821a2105b5 Mon Sep 17 00:00:00 2001 From: Oskar Rajzner <115808064+viepovsky@users.noreply.github.com> Date: Tue, 1 Aug 2023 16:00:08 +0200 Subject: [PATCH] ACS-5020 Fix intermittent test class failure(#2098) --- .../DispositionScheduleLinkedRecordsTest.java | 466 +++++++++--------- 1 file changed, 237 insertions(+), 229 deletions(-) diff --git a/amps/ags/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/smoke/DispositionScheduleLinkedRecordsTest.java b/amps/ags/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/smoke/DispositionScheduleLinkedRecordsTest.java index 7d9b85d58f..d4f04fcac7 100644 --- a/amps/ags/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/smoke/DispositionScheduleLinkedRecordsTest.java +++ b/amps/ags/rm-automation/rm-automation-community-rest-api/src/test/java/org/alfresco/rest/rm/community/smoke/DispositionScheduleLinkedRecordsTest.java @@ -50,7 +50,6 @@ import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.util.EntityUtils; import org.json.JSONObject; -import org.junit.Ignore; import org.springframework.beans.factory.annotation.Autowired; import org.testng.AssertJUnit; import org.testng.annotations.BeforeClass; @@ -65,7 +64,9 @@ import java.util.List; import static org.alfresco.rest.core.v0.BaseAPI.NODE_REF_WORKSPACE_SPACES_STORE; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAlias.FILE_PLAN_ALIAS; import static org.alfresco.rest.rm.community.model.fileplancomponents.FilePlanComponentAspects.CUT_OFF_ASPECT; -import static org.alfresco.rest.rm.community.model.recordcategory.RetentionPeriodProperty.*; +import static org.alfresco.rest.rm.community.model.recordcategory.RetentionPeriodProperty.CREATED_DATE; +import static org.alfresco.rest.rm.community.model.recordcategory.RetentionPeriodProperty.DATE_FILED; +import static org.alfresco.rest.rm.community.model.recordcategory.RetentionPeriodProperty.CUT_OFF_DATE; import static org.alfresco.rest.rm.community.util.CommonTestUtils.generateTestPrefix; import static org.alfresco.utility.report.log.Step.STEP; import static org.junit.Assert.assertNull; @@ -84,28 +85,25 @@ public class DispositionScheduleLinkedRecordsTest extends BaseRMRestTest { @Autowired private RecordFoldersAPI recordFoldersAPI; private final static String TEST_PREFIX = generateTestPrefix(DispositionScheduleLinkedRecordsTest.class); - private RecordCategory Category1; - private RecordCategoryChild CopyCatFolder,folder1,CatFolder,folder2; - private static final String categoryRM3077 = TEST_PREFIX + "RM-3077_manager_sees_me"; - private static final String copyCategoryRM3077 = "Copy_of_" + categoryRM3077; - private static final String folderRM3077 = "RM-3077_folder_"+ categoryRM3077; - private static final String copyFolderRM3077 = "Copy_of_" + folderRM3077; - private final String folder = TEST_PREFIX + "RM-2937 folder ghosting"; - private static final String firstCategoryRM3060 = TEST_PREFIX + "RM-3060_category_record"; - private static final String secondCategoryRM3060 = "Copy_of_" + firstCategoryRM3060; - private static final String firstFolderRM3060 = TEST_PREFIX + "RM-3060_folder"; - private static final String secondFolderRM3060 = TEST_PREFIX + "RM-3060_disposition_on_Record_Level"; - private static final String electronicRecordRM3060 = TEST_PREFIX + "RM-3060_electronic_1_record"; - private static final String nonElectronicRecordRM3060 = TEST_PREFIX + "RM-3060_non-electronic_record"; - private static final String firstCategoryRM1622 = TEST_PREFIX + "RM-1622_category_record"; - private static final String secondCategoryRM1622 = "Copy_of_" + firstCategoryRM1622;; - private static final String firstFolderRM1622 = TEST_PREFIX + "RM-1622_folder"; - private static final String electronicRecordRM1622 = TEST_PREFIX + "RM-1622_electronic_1_record"; - private static final String secondFolderRM1622 = TEST_PREFIX + "RM-1622_disposition_on_Record_Level"; + private static final String CATEGORY_RM_3077 = TEST_PREFIX + "RM-3077_manager_sees_me"; + private static final String COPY_CATEGORY_RM_3077 = "Copy_of_" + CATEGORY_RM_3077; + private static final String FOLDER_RM_3077 = "RM-3077_folder_"+ CATEGORY_RM_3077; + private static final String COPY_FOLDER_RM_3077 = "Copy_of_" + FOLDER_RM_3077; + private static final String FIRST_CATEGORY_RM_3060 = TEST_PREFIX + "RM-3060_category_record"; + private static final String SECOND_CATEGORY_RM_3060 = "Copy_of_" + FIRST_CATEGORY_RM_3060; + private static final String FIRST_FOLDER_RM_3060 = TEST_PREFIX + "RM-3060_folder"; + private static final String SECOND_FOLDER_RM_3060 = TEST_PREFIX + "RM-3060_disposition_on_Record_Level"; + private static final String ELECTRONIC_RECORD_RM_3060 = TEST_PREFIX + "RM-3060_electronic_1_record"; + private static final String NON_ELECTRONIC_RECORD_RM_3060 = TEST_PREFIX + "RM-3060_non-electronic_record"; + private static final String FIRST_CATEGORY_RM_1622 = TEST_PREFIX + "RM-1622_category_record"; + private static final String SECOND_CATEGORY_RM_1622 = "Copy_of_" + FIRST_CATEGORY_RM_1622; + private static final String FIRST_FOLDER_RM_1622 = TEST_PREFIX + "RM-1622_folder"; + private static final String ELECTRONIC_RECORD_RM_1622 = TEST_PREFIX + "RM-1622_electronic_1_record"; + private static final String SECOND_FOLDER_RM_1622 = TEST_PREFIX + "RM-1622_disposition_on_Record_Level"; private static final String TRANSFER_LOCATION = TEST_PREFIX + "RM-3060_transferred_records"; public static final String TRANSFER_TYPE = "rma:transferred"; private FilePlan filePlanModel; - private UserModel rmAdmin, rmManager; + private UserModel rmAdmin; @BeforeClass(alwaysRun = true) public void setupDispositionScheduleLinkedRecordsTest() { @@ -120,11 +118,12 @@ public class DispositionScheduleLinkedRecordsTest extends BaseRMRestTest { UserRoles.ROLE_RM_ADMIN.roleId); // create "rm Manager" user if it does not exist and assign it to RM Administrator role - rmManager = getDataUser().createRandomTestUser(); + UserModel rmManager = getDataUser().createRandomTestUser(); rmRolesAndActionsAPI.assignRoleToUser(getDataUser().usingAdmin().getAdminUser().getUsername(), - getDataUser().usingAdmin().getAdminUser().getPassword(),rmManager.getUsername(), + getDataUser().usingAdmin().getAdminUser().getPassword(), rmManager.getUsername(), UserRoles.ROLE_RM_MANAGER.roleId); } + /** * Disposition Schedule on Record Folder with linked records test *

@@ -136,194 +135,202 @@ public class DispositionScheduleLinkedRecordsTest extends BaseRMRestTest { *

*

TestRail Test C775

**/ -// @Ignore("ACS-5020") - // @Test -// @AlfrescoTest(jira = "RM-1622") -// public void dispositionScheduleLinkedRecords() throws UnsupportedEncodingException { -// STEP("Create record category"); -// Category1 = createRootCategory(categoryRM3077); -// -// //create retention schedule -// dispositionScheduleService.createCategoryRetentionSchedule(Category1.getName(), false); -// -// // add cut off step -// dispositionScheduleService.addCutOffAfterPeriodStep(Category1.getName(), "day|2", CREATED_DATE); -// -// //create a copy of the category recordsCategory -// String CopyCategoryId = copyCategory(getAdminUser(),Category1.getId(), copyCategoryRM3077); -// -// // create folders in both categories -// CatFolder = createRecordFolder(Category1.getId(), folderRM3077); -// CopyCatFolder = createRecordFolder(CopyCategoryId, copyFolderRM3077); -// -// // create record files -// String electronicRecord = "RM-2801 electronic record"; -// Record elRecord = createElectronicRecord(CatFolder.getId(), electronicRecord); -// String elRecordFullName = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(), -// getDataUser().usingAdmin().getAdminUser().getPassword(), CatFolder.getName(), electronicRecord); -// -// String nonElectronicRecord = "RM-2801 non-electronic record"; -// Record nonElRecord = createNonElectronicRecord(CatFolder.getId(), nonElectronicRecord); -// String nonElRecordFullName = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(), -// getDataUser().usingAdmin().getAdminUser().getPassword(), CatFolder.getName(), nonElectronicRecord); -// -// // link the records to copy folder, then complete them -// List recordLists = new ArrayList<>(); -// recordLists.add(NODE_REF_WORKSPACE_SPACES_STORE + elRecord.getId()); -// recordLists.add(NODE_REF_WORKSPACE_SPACES_STORE + nonElRecord.getId()); -// -// linksAPI.linkRecord(getDataUser().getAdminUser().getUsername(), -// getDataUser().getAdminUser().getPassword(), HttpStatus.SC_OK,copyCategoryRM3077 + "/" + -// copyFolderRM3077, recordLists); -// recordsAPI.completeRecord(rmAdmin.getUsername(), rmAdmin.getPassword(), elRecordFullName); -// recordsAPI.completeRecord(rmAdmin.getUsername(), rmAdmin.getPassword(), nonElRecordFullName); -// -// // edit disposition date -// recordFoldersAPI.postFolderAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),editDispositionDateJson(),CatFolder.getName()); -// -// // cut off the Folder -// recordFoldersAPI.postFolderAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),new JSONObject().put("name","cutoff"),CatFolder.getName()); -// -// // Verify the Content -// Node electronicNode = getNode(elRecord.getId()); -// assertTrue("The content of " + electronicRecord + " is available", -// StringUtils.isEmpty(electronicNode.getNodeContent().getResponse().getBody().asString())); -// -// // verify the Properties -// AssertJUnit.assertNull("The properties are present even after cutting off the record.", elRecord.getProperties().getTitle()); -// -// // delete precondition -// deleteRecordCategory(Category1.getId()); -// deleteRecordCategory(CopyCategoryId); -// } -// /** -// * Test covering RM-3060 -// * Check the disposition steps for a record can be executed -// * When the record is linked to a folder with the same disposition schedule -// * */ -// @Ignore("ACS-5020") -//// @Test -// @AlfrescoTest (jira = "RM-3060") -// public void sameDispositionScheduleLinkedRecords() throws UnsupportedEncodingException { -// -// // create a category with retention applied on records level -// RecordCategory recordCategory = getRestAPIFactory().getFilePlansAPI(rmAdmin) -// .createRootRecordCategory(RecordCategory.builder().name(firstCategoryRM3060).build(), -// RecordCategory.DEFAULT_FILE_PLAN_ALIAS); -// dispositionScheduleService.createCategoryRetentionSchedule(firstCategoryRM3060, true); -// dispositionScheduleService.addCutOffAfterPeriodStep(firstCategoryRM3060, "week|1", DATE_FILED); -// dispositionScheduleService.addTransferAfterEventStep(firstCategoryRM3060, TRANSFER_LOCATION, RMEvents.CASE_CLOSED.getEventName()); -// dispositionScheduleService.addDestroyWithoutGhostingAfterPeriodStep(firstCategoryRM3060, "week|1", CUT_OFF_DATE); -// -// // make a copy of the category created -// String categorySecondId = copyCategory(getAdminUser(), recordCategory.getId(), secondCategoryRM3060); -// -// // create a folder on the category firstCategoryRM3060 with a complete electronic record -// RecordCategoryChild firstFolderRecordCategoryChild = createRecordFolder(recordCategory.getId(),firstFolderRM3060); -// Record firstElectronicRecord = createElectronicRecord(firstFolderRecordCategoryChild.getId(),electronicRecordRM3060); -// -// String elRecordFullName = recordsAPI.getRecordFullName(getDataUser().getAdminUser().getUsername(), -// getDataUser().getAdminUser().getPassword(),firstFolderRM3060, electronicRecordRM3060); -// String elRecordNameNodeRef = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(), -// getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName, "/" + firstCategoryRM3060 + "/" + firstFolderRM3060); -// -// recordsAPI.completeRecord(getDataUser().getAdminUser().getUsername(), -// getDataUser().getAdminUser().getPassword(), elRecordFullName); -// -// // create a folder on the category secondCategoryRM3060 with a non electronic record -// RecordCategoryChild secondFolderRecordCategoryChild = createRecordFolder(categorySecondId,secondFolderRM3060); -// Record secondNonElectronicRecord = createNonElectronicRecord(secondFolderRecordCategoryChild.getId(),nonElectronicRecordRM3060); -// -// // link the nonElectronicRecordRM3060 to firstFolderRM3060 -// List recordLists = new ArrayList<>(); -// recordLists.add(NODE_REF_WORKSPACE_SPACES_STORE + secondNonElectronicRecord.getId()); -// -// linksAPI.linkRecord(getDataUser().getAdminUser().getUsername(), -// getDataUser().getAdminUser().getPassword(), HttpStatus.SC_OK,secondCategoryRM3060 + "/" + -// secondFolderRM3060, recordLists); -// String nonElRecordFullName = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(), -// getDataUser().usingAdmin().getAdminUser().getPassword(), secondFolderRM3060, secondNonElectronicRecord.getName()); -// String nonElRecordNameNodeRef = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(), -// getDataUser().usingAdmin().getAdminUser().getPassword(), nonElRecordFullName, "/" + secondCategoryRM3060 + "/" + secondFolderRM3060); -// -// // complete records and cut them off -// recordsAPI.completeRecord(getDataUser().getAdminUser().getUsername(), -// getDataUser().getAdminUser().getPassword(), nonElRecordFullName); -// -// // edit the disposition date -// recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),editDispositionDateJson(),nonElRecordNameNodeRef); -// -// // cut off the record -// recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),new JSONObject().put("name","cutoff"),nonElRecordNameNodeRef); -// -// //check the record is cut off -// AssertJUnit.assertTrue("The file " + nonElectronicRecordRM3060 + " has not been successfully cut off.", getRestAPIFactory().getRecordsAPI().getRecord(secondNonElectronicRecord.getId()).getAspectNames().contains(CUT_OFF_ASPECT)); -// -// // link the electronic record to secondFolderRM3060 -// recordLists.clear(); -// recordLists.add(NODE_REF_WORKSPACE_SPACES_STORE + secondNonElectronicRecord.getId()); -// linksAPI.linkRecord(getDataUser().getAdminUser().getUsername(), -// getDataUser().getAdminUser().getPassword(), HttpStatus.SC_OK,secondCategoryRM3060 + "/" + -// secondFolderRM3060, recordLists); -// -// // edit the disposition date and cut off the record -// recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),editDispositionDateJson(),elRecordNameNodeRef); -// recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),new JSONObject().put("name","cutoff"),elRecordNameNodeRef); -// -// AssertJUnit.assertTrue("The file " + electronicRecordRM3060 + " has not been successfully cut off.", getRestAPIFactory().getRecordsAPI().getRecord(firstElectronicRecord.getId()).getAspectNames().contains(CUT_OFF_ASPECT)); -// -// // open the record and complete the disposition schedule event -// rmRolesAndActionsAPI.completeEvent(getAdminUser().getUsername(), -// getAdminUser().getPassword(), elRecordFullName, RMEvents.CASE_CLOSED, Instant.now()); -// rmRolesAndActionsAPI.completeEvent(getAdminUser().getUsername(), -// getAdminUser().getPassword(), nonElRecordFullName, RMEvents.CASE_CLOSED, Instant.now()); -// -// // transfer the files & complete transfers -// HttpResponse nonElRecordNameHttpResponse = recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),new JSONObject().put("name","transfer"),recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(), -// getDataUser().usingAdmin().getAdminUser().getPassword(), nonElRecordFullName, "/" + secondCategoryRM3060 + "/" + secondFolderRM3060)); -// -// String nonElRecordNameTransferId = getTransferId(nonElRecordNameHttpResponse,nonElRecordNameNodeRef); -// recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),new JSONObject().put("name","transferComplete"),nonElRecordNameTransferId); -// -// HttpResponse elRecordNameHttpResponse = recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),new JSONObject().put("name","transfer"),recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(), -// getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName, "/" + firstCategoryRM3060 + "/" + firstFolderRM3060)); -// -// String elRecordNameTransferId = getTransferId(elRecordNameHttpResponse,elRecordNameNodeRef); -// recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),new JSONObject().put("name","transferComplete"),elRecordNameTransferId); -// -// AssertJUnit.assertTrue("The file " + electronicRecordRM3060 + " has not been successfully transferred", getRestAPIFactory().getRecordsAPI().getRecord(firstElectronicRecord.getId()).getAspectNames().contains(TRANSFER_TYPE)); -// AssertJUnit.assertTrue("The file " + nonElectronicRecordRM3060 + " has not been successfully transferred.", getRestAPIFactory().getRecordsAPI().getRecord(secondNonElectronicRecord.getId()).getAspectNames().contains(TRANSFER_TYPE)); -// -// // edit the disposition date for nonElectronicRecordRM3060 & electronicRecordRM3060 -// recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),editDispositionDateJson(),nonElRecordNameNodeRef); -// recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),editDispositionDateJson(),elRecordNameNodeRef); -// -// // destroy nonElectronicRecordRM3060 & electronicRecordRM3060 records -// recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),new JSONObject().put("name","destroy"),nonElRecordNameNodeRef); -// recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), -// getAdminUser().getPassword(),new JSONObject().put("name","destroy"),elRecordNameNodeRef); -// -// // check the file is not displayed -// assertNull("The file " + nonElectronicRecordRM3060 + " has not been successfully destroyed.", secondNonElectronicRecord.getContent()); -// assertNull("The file " + electronicRecordRM3060 + " has not been successfully destroyed.", firstElectronicRecord.getContent()); -// -// // delete precondition -// deleteRecordCategory(recordCategory.getId()); -// deleteRecordCategory(categorySecondId); -// } + @Test + @AlfrescoTest(jira = "RM-1622") + public void dispositionScheduleLinkedRecords() throws UnsupportedEncodingException { + STEP("Create record category"); + RecordCategory category1 = createRootCategory(CATEGORY_RM_3077); + + //create retention schedule + dispositionScheduleService.createCategoryRetentionSchedule(category1.getName(), false); + + // add cut off step + dispositionScheduleService.addCutOffAfterPeriodStep(category1.getName(), "day|2", CREATED_DATE); + + //create a copy of the category recordsCategory + String copyCategoryId = copyCategory(getAdminUser(), category1.getId(), COPY_CATEGORY_RM_3077); + + // create folders in both categories + RecordCategoryChild catFolder = createRecordFolder(category1.getId(), FOLDER_RM_3077); + createRecordFolder(copyCategoryId, COPY_FOLDER_RM_3077); + + // create record files + String electronicRecord = "RM-2801 electronic record"; + Record elRecord = createElectronicRecord(catFolder.getId(), electronicRecord); + String elRecordFullName = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(), + getDataUser().usingAdmin().getAdminUser().getPassword(), catFolder.getName(), electronicRecord); + + String nonElectronicRecord = "RM-2801 non-electronic record"; + Record nonElRecord = createNonElectronicRecord(catFolder.getId(), nonElectronicRecord); + String nonElRecordFullName = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(), + getDataUser().usingAdmin().getAdminUser().getPassword(), catFolder.getName(), nonElectronicRecord); + + // link the records to copy folder, then complete them + List recordLists = new ArrayList<>(); + recordLists.add(NODE_REF_WORKSPACE_SPACES_STORE + elRecord.getId()); + recordLists.add(NODE_REF_WORKSPACE_SPACES_STORE + nonElRecord.getId()); + + linksAPI.linkRecord(getDataUser().getAdminUser().getUsername(), + getDataUser().getAdminUser().getPassword(), HttpStatus.SC_OK, COPY_CATEGORY_RM_3077 + "/" + + COPY_FOLDER_RM_3077, recordLists); + recordsAPI.completeRecord(rmAdmin.getUsername(), rmAdmin.getPassword(), elRecordFullName); + recordsAPI.completeRecord(rmAdmin.getUsername(), rmAdmin.getPassword(), nonElRecordFullName); + + // edit disposition date + recordFoldersAPI.postFolderAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),editDispositionDateJson(), catFolder.getName()); + + // cut off the Folder + recordFoldersAPI.postFolderAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),new JSONObject().put("name","cutoff"), catFolder.getName()); + + // Verify the Content + Node electronicNode = getNode(elRecord.getId()); + assertTrue("The content of " + electronicRecord + " is available", + StringUtils.isEmpty(electronicNode.getNodeContent().getResponse().getBody().asString())); + + // verify the Properties + AssertJUnit.assertNull("The properties are present even after cutting off the record.", elRecord.getProperties().getTitle()); + + // delete precondition + deleteRecordCategory(category1.getId()); + deleteRecordCategory(copyCategoryId); + } + + /** + * Test covering RM-3060 + * Check the disposition steps for a record can be executed + * When the record is linked to a folder with the same disposition schedule + * */ + @Test + @AlfrescoTest (jira = "RM-3060") + public void sameDispositionScheduleLinkedRecords() throws UnsupportedEncodingException { + + // create a category with retention applied on records level + RecordCategory recordCategory = getRestAPIFactory().getFilePlansAPI(rmAdmin) + .createRootRecordCategory(RecordCategory.builder().name(FIRST_CATEGORY_RM_3060).build(), + RecordCategory.DEFAULT_FILE_PLAN_ALIAS); + dispositionScheduleService.createCategoryRetentionSchedule(FIRST_CATEGORY_RM_3060, true); + dispositionScheduleService.addCutOffAfterPeriodStep(FIRST_CATEGORY_RM_3060, "week|1", DATE_FILED); + dispositionScheduleService.addTransferAfterEventStep( + FIRST_CATEGORY_RM_3060, TRANSFER_LOCATION, RMEvents.CASE_CLOSED.getEventName()); + dispositionScheduleService.addDestroyWithoutGhostingAfterPeriodStep(FIRST_CATEGORY_RM_3060, "week|1", CUT_OFF_DATE); + + // make a copy of the category created + String categorySecondId = copyCategory(getAdminUser(), recordCategory.getId(), SECOND_CATEGORY_RM_3060); + + // create a folder on the category firstCategoryRM3060 with a complete electronic record + RecordCategoryChild firstFolderRecordCategoryChild = createRecordFolder(recordCategory.getId(), + FIRST_FOLDER_RM_3060); + Record firstElectronicRecord = createElectronicRecord(firstFolderRecordCategoryChild.getId(), + ELECTRONIC_RECORD_RM_3060); + + String elRecordFullName = recordsAPI.getRecordFullName(getDataUser().getAdminUser().getUsername(), + getDataUser().getAdminUser().getPassword(), FIRST_FOLDER_RM_3060, ELECTRONIC_RECORD_RM_3060); + String elRecordNameNodeRef = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(), + getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName, "/" + FIRST_CATEGORY_RM_3060 + "/" + FIRST_FOLDER_RM_3060); + + recordsAPI.completeRecord(getDataUser().getAdminUser().getUsername(), + getDataUser().getAdminUser().getPassword(), elRecordFullName); + + // create a folder on the category secondCategoryRM3060 with a non electronic record + RecordCategoryChild secondFolderRecordCategoryChild = createRecordFolder(categorySecondId, + SECOND_FOLDER_RM_3060); + Record secondNonElectronicRecord = createNonElectronicRecord(secondFolderRecordCategoryChild.getId(), + NON_ELECTRONIC_RECORD_RM_3060); + + // link the nonElectronicRecordRM3060 to firstFolderRM3060 + List recordLists = new ArrayList<>(); + recordLists.add(NODE_REF_WORKSPACE_SPACES_STORE + secondNonElectronicRecord.getId()); + + linksAPI.linkRecord(getDataUser().getAdminUser().getUsername(), + getDataUser().getAdminUser().getPassword(), HttpStatus.SC_OK, SECOND_CATEGORY_RM_3060 + "/" + + SECOND_FOLDER_RM_3060, recordLists); + String nonElRecordFullName = recordsAPI.getRecordFullName(getDataUser().usingAdmin().getAdminUser().getUsername(), + getDataUser().usingAdmin().getAdminUser().getPassword(), + SECOND_FOLDER_RM_3060, secondNonElectronicRecord.getName()); + String nonElRecordNameNodeRef = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(), + getDataUser().usingAdmin().getAdminUser().getPassword(), nonElRecordFullName, "/" + SECOND_CATEGORY_RM_3060 + + "/" + SECOND_FOLDER_RM_3060); + + // complete records and cut them off + recordsAPI.completeRecord(getDataUser().getAdminUser().getUsername(), + getDataUser().getAdminUser().getPassword(), nonElRecordFullName); + + // edit the disposition date + recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),editDispositionDateJson(),nonElRecordNameNodeRef); + + // cut off the record + recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),new JSONObject().put("name","cutoff"),nonElRecordNameNodeRef); + + //check the record is cut off + AssertJUnit.assertTrue("The file " + NON_ELECTRONIC_RECORD_RM_3060 + " has not been successfully cut off.", getRestAPIFactory().getRecordsAPI().getRecord(secondNonElectronicRecord.getId()).getAspectNames().contains(CUT_OFF_ASPECT)); + + // link the electronic record to secondFolderRM3060 + recordLists.clear(); + recordLists.add(NODE_REF_WORKSPACE_SPACES_STORE + secondNonElectronicRecord.getId()); + linksAPI.linkRecord(getDataUser().getAdminUser().getUsername(), + getDataUser().getAdminUser().getPassword(), HttpStatus.SC_OK, SECOND_CATEGORY_RM_3060 + "/" + + SECOND_FOLDER_RM_3060, recordLists); + + // edit the disposition date and cut off the record + recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),editDispositionDateJson(),elRecordNameNodeRef); + recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),new JSONObject().put("name","cutoff"),elRecordNameNodeRef); + + AssertJUnit.assertTrue("The file " + ELECTRONIC_RECORD_RM_3060 + " has not been successfully cut off.", getRestAPIFactory().getRecordsAPI().getRecord(firstElectronicRecord.getId()).getAspectNames().contains(CUT_OFF_ASPECT)); + + // open the record and complete the disposition schedule event + rmRolesAndActionsAPI.completeEvent(getAdminUser().getUsername(), + getAdminUser().getPassword(), elRecordFullName, RMEvents.CASE_CLOSED, Instant.now()); + rmRolesAndActionsAPI.completeEvent(getAdminUser().getUsername(), + getAdminUser().getPassword(), nonElRecordFullName, RMEvents.CASE_CLOSED, Instant.now()); + + // transfer the files & complete transfers + HttpResponse nonElRecordNameHttpResponse = recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),new JSONObject().put("name","transfer"),recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(), + getDataUser().usingAdmin().getAdminUser().getPassword(), nonElRecordFullName, "/" + SECOND_CATEGORY_RM_3060 + + "/" + SECOND_FOLDER_RM_3060)); + + String nonElRecordNameTransferId = getTransferId(nonElRecordNameHttpResponse,nonElRecordNameNodeRef); + recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),new JSONObject().put("name","transferComplete"),nonElRecordNameTransferId); + + HttpResponse elRecordNameHttpResponse = recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),new JSONObject().put("name","transfer"),recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(), + getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName, "/" + FIRST_CATEGORY_RM_3060 + + "/" + FIRST_FOLDER_RM_3060)); + + String elRecordNameTransferId = getTransferId(elRecordNameHttpResponse,elRecordNameNodeRef); + recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),new JSONObject().put("name","transferComplete"),elRecordNameTransferId); + + AssertJUnit.assertTrue("The file " + ELECTRONIC_RECORD_RM_3060 + " has not been successfully transferred", getRestAPIFactory().getRecordsAPI().getRecord(firstElectronicRecord.getId()).getAspectNames().contains(TRANSFER_TYPE)); + AssertJUnit.assertTrue("The file " + NON_ELECTRONIC_RECORD_RM_3060 + " has not been successfully transferred.", getRestAPIFactory().getRecordsAPI().getRecord(secondNonElectronicRecord.getId()).getAspectNames().contains(TRANSFER_TYPE)); + + // edit the disposition date for nonElectronicRecordRM3060 & electronicRecordRM3060 + recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),editDispositionDateJson(),nonElRecordNameNodeRef); + recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),editDispositionDateJson(),elRecordNameNodeRef); + + // destroy nonElectronicRecordRM3060 & electronicRecordRM3060 records + recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),new JSONObject().put("name","destroy"),nonElRecordNameNodeRef); + recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), + getAdminUser().getPassword(),new JSONObject().put("name","destroy"),elRecordNameNodeRef); + + // check the file is not displayed + assertNull("The file " + NON_ELECTRONIC_RECORD_RM_3060 + " has not been successfully destroyed.", secondNonElectronicRecord.getContent()); + assertNull("The file " + ELECTRONIC_RECORD_RM_3060 + " has not been successfully destroyed.", firstElectronicRecord.getContent()); + + // delete precondition + deleteRecordCategory(recordCategory.getId()); + deleteRecordCategory(categorySecondId); + } private String copyCategory(UserModel user, String categoryId, String copyName) { RepoTestModel repoTestModel = new RepoTestModel() {}; @@ -354,7 +361,7 @@ public class DispositionScheduleLinkedRecordsTest extends BaseRMRestTest { private String getTransferId(HttpResponse httpResponse,String nodeRef) { HttpEntity entity = httpResponse.getEntity(); - String responseString = null; + String responseString; try { responseString = EntityUtils.toString(entity, "UTF-8"); } catch (IOException e) { @@ -365,7 +372,6 @@ public class DispositionScheduleLinkedRecordsTest extends BaseRMRestTest { .getJSONObject("results") .get(nodeRef) .toString(); - } @Test @@ -374,35 +380,39 @@ public class DispositionScheduleLinkedRecordsTest extends BaseRMRestTest { // create a category with retention applied on records level RecordCategory catsameLevel1 = getRestAPIFactory().getFilePlansAPI(rmAdmin) - .createRootRecordCategory(RecordCategory.builder().name(firstCategoryRM1622).build(), + .createRootRecordCategory(RecordCategory.builder().name( + FIRST_CATEGORY_RM_1622).build(), RecordCategory.DEFAULT_FILE_PLAN_ALIAS); RecordCategory catsameLevel2 = getRestAPIFactory().getFilePlansAPI(rmAdmin) - .createRootRecordCategory(RecordCategory.builder().name(secondCategoryRM1622).build(), + .createRootRecordCategory(RecordCategory.builder().name( + SECOND_CATEGORY_RM_1622).build(), RecordCategory.DEFAULT_FILE_PLAN_ALIAS); // create retention schedule applied on records for category 1 - dispositionScheduleService.createCategoryRetentionSchedule(firstCategoryRM1622, true); + dispositionScheduleService.createCategoryRetentionSchedule(FIRST_CATEGORY_RM_1622, true); // with retain immediately after record creation date and cut 1 day after record creation date - dispositionScheduleService.addCutOffAfterPeriodStep(firstCategoryRM1622, "day|1", DATE_FILED); + dispositionScheduleService.addCutOffAfterPeriodStep(FIRST_CATEGORY_RM_1622, "day|1", DATE_FILED); // create a folder on the category firstCategoryRM1622 with a complete electronic record - RecordCategoryChild firstFolderRecordCategoryChild = createRecordFolder(catsameLevel1.getId(),firstFolderRM1622); - Record firstElectronicRecord = createElectronicRecord(firstFolderRecordCategoryChild.getId(),electronicRecordRM1622); + RecordCategoryChild firstFolderRecordCategoryChild = createRecordFolder(catsameLevel1.getId(), + FIRST_FOLDER_RM_1622); + Record firstElectronicRecord = createElectronicRecord(firstFolderRecordCategoryChild.getId(), + ELECTRONIC_RECORD_RM_1622); String elRecordFullName = recordsAPI.getRecordFullName(getDataUser().getAdminUser().getUsername(), - getDataUser().getAdminUser().getPassword(),firstFolderRM1622, electronicRecordRM1622); - String elRecordNameNodeRef = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(), - getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName, "/" + firstCategoryRM1622 + "/" + firstFolderRM1622); + getDataUser().getAdminUser().getPassword(), FIRST_FOLDER_RM_1622, ELECTRONIC_RECORD_RM_1622); + recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(), + getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName, "/" + FIRST_CATEGORY_RM_1622 + "/" + FIRST_FOLDER_RM_1622); recordsAPI.completeRecord(getDataUser().getAdminUser().getUsername(), getDataUser().getAdminUser().getPassword(), elRecordFullName); // create a folder on the category secondCategoryRM1622 with a non electronic record - RecordCategoryChild secondFolderRecordCategoryChild = createRecordFolder(catsameLevel2.getId(),secondFolderRM1622); + createRecordFolder(catsameLevel2.getId(), SECOND_FOLDER_RM_1622); String elRecordNameNodeRefs = recordsAPI.getRecordNodeRef(getDataUser().usingAdmin().getAdminUser().getUsername(), - getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName, "/" + firstCategoryRM1622 + "/" + firstFolderRM1622); + getDataUser().usingAdmin().getAdminUser().getPassword(), elRecordFullName, "/" + FIRST_CATEGORY_RM_1622 + "/" + FIRST_FOLDER_RM_1622); // link it to the folder in second category through the details page @@ -410,14 +420,12 @@ public class DispositionScheduleLinkedRecordsTest extends BaseRMRestTest { recordLists.add(NODE_REF_WORKSPACE_SPACES_STORE + firstElectronicRecord.getId()); linksAPI.linkRecord(getDataUser().getAdminUser().getUsername(), - getDataUser().getAdminUser().getPassword(), HttpStatus.SC_OK,secondCategoryRM1622 + "/" + - secondFolderRM1622, recordLists); + getDataUser().getAdminUser().getPassword(), HttpStatus.SC_OK, SECOND_CATEGORY_RM_1622 + "/" + + SECOND_FOLDER_RM_1622, recordLists); // edit disposition date recordFoldersAPI.postRecordAction(getAdminUser().getUsername(), getAdminUser().getPassword(),editDispositionDateJson(),elRecordNameNodeRefs); - - } @Test (dependsOnMethods = {"sameLevelDispositionScheduleStepsPeriodsCalculation" }) @@ -428,4 +436,4 @@ public class DispositionScheduleLinkedRecordsTest extends BaseRMRestTest { // Verify the status code assertStatusCode(NO_CONTENT); } - } +}