+ * @author Kristijan Conkas + * @since 2.6 + */ +public class UpdateRecordsTests extends BaseRMRestTest +{ + /** Valid root containers where electronic records can be created */ + @DataProvider(name = "invalidParentContainers") + public Object[][] invalidContainers() throws Exception + { + return new Object[][] + { + // record category + { getFilePlanComponent(createCategoryFolderInFilePlan().getParentId()) }, + // file plan root + { getFilePlanComponent(FILE_PLAN_ALIAS) }, + // transfers + { getFilePlanComponent(TRANSFERS_ALIAS) }, + // holds + { getFilePlanComponent(HOLDS_ALIAS) }, + }; + } + + /* to be used to append to modifications */ + private final String MODIFIED_PREFIX = "modified_"; + + /** + *
+ * Given an incomplete record + * When I try to update the records meta-data + * Then the record is successfully updated + *+ * @throws Exception + */ + @Test + ( + dataProvider = "validRootContainers", + description = "Incomplete records can be updated" + ) + @AlfrescoTest(jira="RM-4362") + public void incompleteRecordsCanBeUpdated(FilePlanComponent recordFolder) throws Exception + { + FilePlanComponentAPI filePlanComponentsAPI = getRestAPIFactory().getFilePlanComponentsAPI(); + + // create electronic and non-electronic records in a folder + FilePlanComponent electronicRecord = filePlanComponentsAPI.createElectronicRecord(createElectronicRecordModel(), IMAGE_FILE, recordFolder.getId()); + assertStatusCode(CREATED); + FilePlanComponent nonElectronicRecord = filePlanComponentsAPI.createFilePlanComponent(createNonElectronicRecordModel(), recordFolder.getId()); + assertStatusCode(CREATED); + + for (FilePlanComponent record: Arrays.asList(electronicRecord, nonElectronicRecord)) { + // generate update metadata + String newName = getModifiedPropertyValue(record.getName()); + String newTitle = getModifiedPropertyValue(record.getProperties().getTitle()); + String newDescription = getModifiedPropertyValue(record.getProperties().getDescription()); + + FilePlanComponent updateRecord = FilePlanComponent.builder() + .name(newName) + .properties(FilePlanComponentProperties.builder() + .description(newDescription) + .title(newTitle) + .build()) + .build(); + + // update record + filePlanComponentsAPI.updateFilePlanComponent(updateRecord, record.getId()); + assertStatusCode(OK); + + // verify the update got applied + FilePlanComponent updatedRecord = filePlanComponentsAPI.getFilePlanComponent(record.getId()); + assertEquals(updatedRecord.getName(), newName); + assertEquals(updatedRecord.getProperties().getTitle(), newTitle); + assertEquals(updatedRecord.getProperties().getDescription(), newDescription); + } + } + + /** + *
+ * Given a complete record + * When I try to update the records meta-data + * Then it fails + * And and the records meta-data is unchanged + *+ * @throws Exception + */ + @Test + ( + dataProvider = "validRootContainers", + description = "Complete records can be updated" + ) + @AlfrescoTest(jira="RM-4362") + public void completeRecordsCantBeUpdated(FilePlanComponent recordFolder) throws Exception + { + FilePlanComponentAPI filePlanComponentsAPI = getRestAPIFactory().getFilePlanComponentsAPI(); + + // create electronic and non-electronic records in a folder + FilePlanComponent electronicRecord = filePlanComponentsAPI.createElectronicRecord(createElectronicRecordModel(), IMAGE_FILE, recordFolder.getId()); + assertStatusCode(CREATED); + closeRecord(electronicRecord); + + FilePlanComponent nonElectronicRecord = filePlanComponentsAPI.createFilePlanComponent(createNonElectronicRecordModel(), recordFolder.getId()); + assertStatusCode(CREATED); + closeRecord(nonElectronicRecord); + + for (FilePlanComponent record: Arrays.asList(electronicRecord, nonElectronicRecord)) { + // generate update metadata + String newName = getModifiedPropertyValue(record.getName()); + String newTitle = getModifiedPropertyValue(record.getProperties().getTitle()); + String newDescription = getModifiedPropertyValue(record.getProperties().getDescription()); + + FilePlanComponent updateRecord = FilePlanComponent.builder() + .name(newName) + .properties(FilePlanComponentProperties.builder() + .description(newDescription) + .title(newTitle) + .build()) + .build(); + + // attempt to update record + filePlanComponentsAPI.updateFilePlanComponent(updateRecord, record.getId()); + assertStatusCode(BAD_REQUEST); + + // verify the original record metatada has been retained + FilePlanComponent updatedRecord = filePlanComponentsAPI.getFilePlanComponent(record.getId()); + assertEquals(updatedRecord.getName(), record.getName()); + assertEquals(updatedRecord.getProperties().getTitle(), record.getProperties().getTitle()); + assertEquals(updatedRecord.getProperties().getDescription(), record.getProperties().getTitle()); + } + } + + /** + * Helper method to generate modified property value based on original value + * @param originalValue original value + * @return modified value + */ + private String getModifiedPropertyValue(String originalValue) + { + return MODIFIED_PREFIX + originalValue; + } +}