package com.constellio.app.modules.rm.model; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.constants.RMTaxonomies; import com.constellio.app.modules.rm.model.enums.*; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.ContainerRecord; import com.constellio.app.modules.rm.wrappers.DecommissioningList; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.app.modules.rm.wrappers.StorageSpace; import com.constellio.app.modules.rm.wrappers.structures.DecomListContainerDetail; import com.constellio.app.modules.rm.wrappers.structures.DecomListFolderDetail; import com.constellio.app.modules.rm.wrappers.structures.DecomListValidation; import com.constellio.app.modules.rm.wrappers.type.ContainerRecordType; import com.constellio.model.entities.records.Content; import com.constellio.model.entities.records.Transaction; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.entities.schemas.Schemas; import com.constellio.model.services.contents.ContentManager; import com.constellio.model.services.contents.ContentVersionDataSummary; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.records.RecordServicesException; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.sdk.tests.ConstellioTest; import org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; import java.util.ArrayList; import java.util.List; import static com.constellio.app.modules.rm.model.enums.FolderMediaType.*; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; public class DecommissioningListAcceptanceTest extends ConstellioTest { LocalDate november4 = new LocalDate(2009, 11, 4); LocalDate december12 = new LocalDate(2009, 12, 12); RMSchemasRecordsServices rm; RMTestRecords records = new RMTestRecords(zeCollection); RecordServices recordServices; ContainerRecord containerRecord; Folder folder; DecommissioningList decommissioningList; CopyRetentionRuleBuilder copyBuilder = CopyRetentionRuleBuilder.UUID(); @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records) .withFoldersAndContainersOfEveryStatus() ); assertThat(getModelLayerFactory().getTaxonomiesManager().getPrincipalTaxonomy(zeCollection).getCode()) .isEqualTo(RMTaxonomies.ADMINISTRATIVE_UNITS); rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); recordServices = getModelLayerFactory().newRecordServices(); decommissioningList = rm.newDecommissioningList(); containerRecord = getContainerRecord(); } @Test public void givenInitializedThenSchemaHasNoSecurity() throws Exception { assertThat(getModelLayerFactory().getMetadataSchemasManager().getSchemaTypes(zeCollection) .getSchemaType(DecommissioningList.SCHEMA_TYPE).hasSecurity()).isFalse(); } @Test public void whenSaveDecommissioningListThenMetadataValuesSaved() throws Exception { Folder aFolder = newFolder(); Folder anotherFolder = newFolder(); ContainerRecord aContainer = newContainerRecord("A"); ContainerRecord anotherContainer = newContainerRecord("B"); List<DecomListValidation> validations = new ArrayList<>(); validations.add(new DecomListValidation(records.getDakota_managerInA_userInB().getId(), november4)); validations.add(new DecomListValidation(records.getBob_userInAC().getId(), november4)); validations.add(new DecomListValidation(records.getCharles_userInA().getId(), november4)); ContentManager contentManager = getModelLayerFactory().getContentManager(); ContentVersionDataSummary newDocumentsVersions = contentManager.upload(getTestResourceInputStream("documents.pdf")); Content documentContent = contentManager.createMajor(records.getAdmin(), "documents.pdf", newDocumentsVersions); ContentVersionDataSummary newFoldersVersions = contentManager.upload(getTestResourceInputStream("folders.pdf")); Content folderContent = contentManager.createMajor(records.getAdmin(), "folders.pdf", newFoldersVersions); decommissioningList = rm.newDecommissioningList(); decommissioningList.setTitle("Ze list"); decommissioningList.setAdministrativeUnit(records.unitId_10a); decommissioningList.setDocumentsReportContent(documentContent); decommissioningList.setFoldersReportContent(folderContent); decommissioningList.setApprovalDate(november4); decommissioningList.setDescription("zeDescription"); decommissioningList.setApprovalRequest(records.getUsers().dakotaLIndienIn(zeCollection).getId()); decommissioningList.setApprovalUser(records.getUsers().dakotaLIndienIn(zeCollection)); decommissioningList.setDecommissioningListType(DecommissioningListType.FOLDERS_TO_CLOSE); decommissioningList.setOriginArchivisticStatus(OriginStatus.SEMI_ACTIVE); decommissioningList.setFolderDetailsFor(asList(aFolder, anotherFolder)); decommissioningList.setContainerDetailsFor(aContainer.getId(), anotherContainer.getId()); decommissioningList.setProcessingDate(december12); decommissioningList.setProcessingUser(records.getUsers().dakotaLIndienIn(zeCollection).getId()); decommissioningList.setValidations(validations); decommissioningList = saveAndLoad(decommissioningList); assertThat(decommissioningList.getAdministrativeUnit()).isEqualTo(records.unitId_10a); assertThat(decommissioningList.getApprovalDate()).isEqualTo(november4); assertThat(decommissioningList.getDescription()).isEqualTo("zeDescription"); assertThat(decommissioningList.getTitle()).isEqualTo("Ze list"); assertThat(decommissioningList.getApprovalRequest()).isEqualTo(records.getUsers().dakotaLIndienIn(zeCollection).getId()); assertThat(decommissioningList.getApprovalUser()).isEqualTo(records.getUsers().dakotaLIndienIn(zeCollection).getId()); assertThat(decommissioningList.getFolders()).isEqualTo(asList(aFolder.getId(), anotherFolder.getId())); assertThat(decommissioningList.getFolderDetails()) .isEqualTo(asList(new DecomListFolderDetail(aFolder), new DecomListFolderDetail(anotherFolder))); assertThat(decommissioningList.getContainers()).isEqualTo(asList(aContainer.getId(), anotherContainer.getId())); assertThat(decommissioningList.getContainerDetails()).isEqualTo(asList( new DecomListContainerDetail(aContainer.getId()), new DecomListContainerDetail(anotherContainer.getId()))); assertThat(decommissioningList.getFoldersReportContent().getCurrentVersion().getFilename()).isEqualTo("folders.pdf"); assertThat(decommissioningList.getDocumentsReportContent().getCurrentVersion().getFilename()).isEqualTo("documents.pdf"); assertThat(decommissioningList.getProcessingDate()).isEqualTo(december12); assertThat(decommissioningList.getProcessingUser()).isEqualTo(records.getUsers().dakotaLIndienIn(zeCollection).getId()); assertThat(decommissioningList.getDecommissioningListType()).isEqualTo(DecommissioningListType.FOLDERS_TO_CLOSE); assertThat(decommissioningList.getOriginArchivisticStatus()).isEqualTo(OriginStatus.SEMI_ACTIVE); assertThat(decommissioningList.getValidations()).isEqualTo(validations); } @Test public void givenFoldersWithUniformRuleAndNonUniformCopyAndCategoryThenNotUniform() throws Exception { decommissioningList = saveAndLoad(newFilingSpaceAList().setDecommissioningListType(DecommissioningListType.FOLDERS_TO_TRANSFER).setFolderDetailsFor(rm.getFolders(records.folders("A04-A06")))); assertThat(decommissioningList.hasAnalogicalMedium()).isEqualTo(true); assertThat(decommissioningList.hasElectronicMedium()).isEqualTo(true); assertThat(decommissioningList.getFoldersMediaTypes()).containsOnly(HYBRID, HYBRID, HYBRID); assertThat(decommissioningList.getStatus()).isEqualTo(DecomListStatus.GENERATED); assertThat(decommissioningList.getUniformCategory()).isEqualTo(records.categoryId_X110); assertThat(decommissioningList.getUniformCopyRule().toString()) .isEqualTo(copyBuilder.newPrincipal(records.PA_MD, "42-5-C").toString()); assertThat(decommissioningList.getUniformCopyType()).isEqualTo(CopyType.PRINCIPAL); assertThat(decommissioningList.getUniformRule()).isEqualTo(records.ruleId_1); assertThat(decommissioningList.isUniform()).isEqualTo(true); decommissioningList = saveAndLoad(newFilingSpaceAList().setDecommissioningListType(DecommissioningListType.FOLDERS_TO_TRANSFER).setFolderDetailsFor(rm.getFolders(records.folders("A04-A06, A16-A18")))); assertThat(decommissioningList.hasAnalogicalMedium()).isEqualTo(true); assertThat(decommissioningList.hasElectronicMedium()).isEqualTo(true); assertThat(decommissioningList.getFoldersMediaTypes()).containsOnly(HYBRID, HYBRID, HYBRID, HYBRID, HYBRID, HYBRID); assertThat(decommissioningList.getStatus()).isEqualTo(DecomListStatus.GENERATED); assertThat(decommissioningList.getUniformCategory()).isNull(); assertThat(decommissioningList.getUniformCopyRule().toString()) .isEqualTo(copyBuilder.newPrincipal(records.PA_MD, "42-5-C").toString()); assertThat(decommissioningList.getUniformCopyType()).isEqualTo(CopyType.PRINCIPAL); assertThat(decommissioningList.getUniformRule()).isEqualTo(records.ruleId_1); assertThat(decommissioningList.isUniform()).isEqualTo(false); decommissioningList = saveAndLoad(newFilingSpaceAList().setDecommissioningListType(DecommissioningListType.FOLDERS_TO_TRANSFER).setFolderDetailsFor(rm.getFolders(records.folders("A22-A24")))); assertThat(decommissioningList.getFoldersMediaTypes()).containsOnly(ANALOG, ANALOG, ANALOG); assertThat(decommissioningList.hasAnalogicalMedium()).isEqualTo(true); assertThat(decommissioningList.hasElectronicMedium()).isEqualTo(false); decommissioningList = saveAndLoad(newFilingSpaceAList().setDecommissioningListType(DecommissioningListType.FOLDERS_TO_TRANSFER).setFolderDetailsFor(rm.getFolders(records.folders("A25-A27")))); assertThat(decommissioningList.getFoldersMediaTypes()).containsOnly(ELECTRONIC, ELECTRONIC, ELECTRONIC); assertThat(decommissioningList.hasAnalogicalMedium()).isEqualTo(false); assertThat(decommissioningList.hasElectronicMedium()).isEqualTo(true); decommissioningList = saveAndLoad(newFilingSpaceAList().setDecommissioningListType(DecommissioningListType.FOLDERS_TO_TRANSFER).setFolderDetailsFor(rm.getFolders(records.folders("A22-A27")))); assertThat(decommissioningList.hasAnalogicalMedium()).isEqualTo(true); assertThat(decommissioningList.hasElectronicMedium()).isEqualTo(true); assertThat(decommissioningList.getFoldersMediaTypes()) .containsOnly(ANALOG, ANALOG, ANALOG, ELECTRONIC, ELECTRONIC, ELECTRONIC); assertThat(decommissioningList.getStatus()).isEqualTo(DecomListStatus.GENERATED); assertThat(decommissioningList.getUniformCategory()).isEqualTo(records.categoryId_X120); assertThat(decommissioningList.getUniformCopyRule()).isNull(); assertThat(decommissioningList.getUniformCopyType()).isEqualTo(CopyType.PRINCIPAL); assertThat(decommissioningList.getUniformRule()).isEqualTo(records.ruleId_4); assertThat(decommissioningList.isUniform()).isEqualTo(false); } @Test public void givenDecommissioningListwithUniformDocumentsThenUniformValues() throws Exception { decommissioningList = saveAndLoad((DecommissioningList) newFilingSpaceAList() .setDecommissioningListType(DecommissioningListType.DOCUMENTS_TO_TRANSFER).set(DecommissioningList.DOCUMENTS, documentIn(records.folders("A04-A06")))); assertThat(decommissioningList.getList(DecommissioningList.DOCUMENTS)).hasSize(9); assertThat(decommissioningList.getUniformCategory()).isEqualTo(records.categoryId_X110); assertThat(decommissioningList.getUniformCopyRule().toString()) .isEqualTo(copyBuilder.newPrincipal(records.PA_MD, "42-5-C").toString()); assertThat(decommissioningList.getUniformCopyType()).isEqualTo(CopyType.PRINCIPAL); assertThat(decommissioningList.getUniformRule()).isEqualTo(records.ruleId_1); assertThat(decommissioningList.isUniform()).isEqualTo(true); decommissioningList = saveAndLoad((DecommissioningList) newFilingSpaceAList() .setDecommissioningListType(DecommissioningListType.DOCUMENTS_TO_TRANSFER).set(DecommissioningList.DOCUMENTS, documentIn(records.folders("A04-A06, A16-A18")))); assertThat(decommissioningList.getUniformCategory()).isNull(); assertThat(decommissioningList.getUniformCopyRule().toString()) .isEqualTo(copyBuilder.newPrincipal(records.PA_MD, "42-5-C").toString()); assertThat(decommissioningList.getUniformCopyType()).isEqualTo(CopyType.PRINCIPAL); assertThat(decommissioningList.getUniformRule()).isEqualTo(records.ruleId_1); assertThat(decommissioningList.isUniform()).isEqualTo(false); decommissioningList = saveAndLoad((DecommissioningList) newFilingSpaceAList() .setDecommissioningListType(DecommissioningListType.DOCUMENTS_TO_TRANSFER).set(DecommissioningList.DOCUMENTS, documentIn(records.folders("A04-A18, B52-B54")))); assertThat(decommissioningList.getUniformCategory()).isNull(); assertThat(decommissioningList.getUniformCopyRule()).isNull(); assertThat(decommissioningList.getUniformCopyType()).isNull(); assertThat(decommissioningList.getUniformRule()).isNull(); assertThat(decommissioningList.isUniform()).isEqualTo(false); } private List<String> documentIn(List<String> folders) { LogicalSearchQuery query = new LogicalSearchQuery(from(rm.documentSchemaType()).where(rm.documentFolder()).isIn(folders)); return getModelLayerFactory().newSearchServices().searchRecordIds(query); } @Test public void whenCreateRecordContainerInDecommissioningListThenCorrectlySaved() throws Exception { decommissioningList = saveAndLoad(newFilingSpaceAList().setDecommissioningListType(DecommissioningListType.FOLDERS_TO_TRANSFER).setFolderDetailsFor(rm.getFolders(records.folders("A04-A06")))); String containerRecordType = records.getContainerBac01().getType(); ContainerRecord containerRecord = rm.newContainerRecord().setTitle("ze container").setTemporaryIdentifier("42") .setType(containerRecordType); containerRecord.getWrappedRecord().set(Schemas.LOGICALLY_DELETED_STATUS, null); DecomListContainerDetail decomListContainerDetail = new DecomListContainerDetail(containerRecord.getId()); decommissioningList.setContainerDetails(asList(decomListContainerDetail)); Transaction transaction = new Transaction(); transaction.addAll(containerRecord, decommissioningList); recordServices.execute(transaction); } private DecommissioningList newFilingSpaceAList() { DecommissioningList decommissioningList = rm.newDecommissioningList(); decommissioningList.setTitle("Ze list"); decommissioningList.setAdministrativeUnit(records.unitId_10a); return decommissioningList; } // private DecommissioningList saveAndLoad(DecommissioningList decommissioningList) throws RecordServicesException { recordServices.add(decommissioningList, records.getGandalf_managerInABC()); return rm.getDecommissioningList(decommissioningList.getId()); } private Folder getFolder() { if (folder != null && rm.getFolder(folder.getId()) != null) { return rm.getFolder(folder.getId()); } else { return folder = newFolder(); } } private Folder newFolder() { Folder folder = rm.newFolder(); folder.setAdministrativeUnitEntered(records.unitId_11b); folder.setCategoryEntered(records.categoryId_X110); folder.setRetentionRuleEntered(records.ruleId_2); folder.setCopyStatusEntered(CopyType.PRINCIPAL); folder.setTitle("Ze folder"); folder.setOpenDate(november4); folder.setCloseDateEntered(december12); try { recordServices.add(folder.getWrappedRecord(), User.GOD); } catch (RecordServicesException e) { throw new RuntimeException(e); } return rm.getFolder(folder.getId()); } private ContainerRecord getContainerRecord() { if (containerRecord != null && containerRecord.getWrappedRecord() != null) { return containerRecord; } else { return containerRecord = newContainerRecord(aString()); } } private ContainerRecord newContainerRecord(String token) { ContainerRecordType type = newContainerRecordType(token); ContainerRecord containerRecord = rm.newContainerRecord(); containerRecord.setType(type); containerRecord.setTitle("zeContainerRecord Title " + token); containerRecord.setAdministrativeUnit(records.unitId_10a); containerRecord.setDecommissioningType(DecommissioningType.TRANSFERT_TO_SEMI_ACTIVE); containerRecord.setFull(true); containerRecord.setStorageSpace(newStorageSpace()); containerRecord.setTemporaryIdentifier("zeContainerRecord " + token); try { recordServices.add(containerRecord.getWrappedRecord(), User.GOD); return containerRecord; } catch (RecordServicesException e) { throw new RuntimeException(e); } } StorageSpace newStorageSpace() { int token = anInteger(); StorageSpace storageSpace = rm.newStorageSpace(); storageSpace.setTitle("Storage space " + token); storageSpace.setCode("storageSpace" + token); try { recordServices.add(storageSpace.getWrappedRecord(), User.GOD); return storageSpace; } catch (RecordServicesException e) { throw new RuntimeException(e); } } ContainerRecordType newContainerRecordType(String token) { ContainerRecordType type = rm.newContainerRecordType(); type.setCode("zeContainerType." + token); type.setDescription("zeContainerType Description"); type.setTitle("zeContainerType Title " + token); try { recordServices.add(type.getWrappedRecord(), User.GOD); return type; } catch (RecordServicesException e) { throw new RuntimeException(e); } } }