package com.constellio.app.modules.rm.services.decommissioning; import static org.assertj.core.api.Assertions.assertThat; import java.util.Arrays; import java.util.List; import org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; import com.constellio.app.modules.rm.RMConfigs; import com.constellio.app.modules.rm.RMConfigs.DecommissioningPhase; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.model.enums.DecommissioningListType; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.DecommissioningList; import com.constellio.app.modules.rm.wrappers.Document; import com.constellio.model.entities.records.wrappers.User; import com.constellio.model.services.configs.SystemConfigurationsManager; import com.constellio.model.services.records.RecordServices; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.annotations.SlowTest; public class DecommissioningServiceDocumentDecommissioningAcceptTest extends ConstellioTest { RMTestRecords records = new RMTestRecords(zeCollection); DecommissioningService service; RMSchemasRecordsServices rm; RecordServices recordServices; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records) .withFoldersAndContainersOfEveryStatus().withDocumentsDecommissioningList() ); rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); recordServices = getModelLayerFactory().newRecordServices(); service = new DecommissioningService(zeCollection, getAppLayerFactory()); } @Test public void givenTransferSearchThenCreateListToTransfer() { DecommissioningListParams params = new DecommissioningListParams(); params.setTitle("Ze title"); params.setDescription("Ze description"); params.setAdministrativeUnit(records.unitId_10a); params.setSearchType(SearchType.documentTransfer); params.setSelectedRecordIds(Arrays.asList(records.folder_A10 + "_paperContractWithDifferentCopy")); DecommissioningList decommissioningList = service.createDecommissioningList(params, records.getChuckNorris()); assertThat(decommissioningList.getTitle()).isEqualTo("Ze title"); assertThat(decommissioningList.getDescription()).isEqualTo("Ze description"); assertThat(decommissioningList.getAdministrativeUnit()).isEqualTo(records.unitId_10a); assertThat(decommissioningList.getDecommissioningListType()).isEqualTo(DecommissioningListType.DOCUMENTS_TO_TRANSFER); assertThat(decommissioningList.getDocuments()).containsExactly(records.folder_A10 + "_paperContractWithDifferentCopy"); assertThat(decommissioningList.getFolderDetails()).isEmpty(); assertThat(decommissioningList.getContainerDetails()).isEmpty(); } @Test public void givenActiveToDepositSearchThenCreateListToDeposit() { DecommissioningListParams params = new DecommissioningListParams(); params.setTitle("Ze title"); params.setDescription("Ze description"); params.setAdministrativeUnit(records.unitId_10a); params.setSearchType(SearchType.documentActiveToDeposit); params.setSelectedRecordIds(Arrays.asList(records.folder_A10 + "_paperContractWithDifferentCopy")); DecommissioningList decommissioningList = service.createDecommissioningList(params, records.getChuckNorris()); assertThat(decommissioningList.getTitle()).isEqualTo("Ze title"); assertThat(decommissioningList.getDescription()).isEqualTo("Ze description"); assertThat(decommissioningList.getAdministrativeUnit()).isEqualTo(records.unitId_10a); assertThat(decommissioningList.getDecommissioningListType()).isEqualTo(DecommissioningListType.DOCUMENTS_TO_DEPOSIT); assertThat(decommissioningList.getDocuments()).containsExactly(records.folder_A10 + "_paperContractWithDifferentCopy"); assertThat(decommissioningList.getFolderDetails()).isEmpty(); assertThat(decommissioningList.getContainerDetails()).isEmpty(); } @Test public void givenActiveToDestroySearchThenCreateListToDestroy() { DecommissioningListParams params = new DecommissioningListParams(); params.setTitle("Ze title"); params.setDescription("Ze description"); params.setAdministrativeUnit(records.unitId_10a); params.setSearchType(SearchType.documentActiveToDestroy); params.setSelectedRecordIds(Arrays.asList(records.folder_A10 + "_paperContractWithDifferentCopy")); DecommissioningList decommissioningList = service.createDecommissioningList(params, records.getChuckNorris()); assertThat(decommissioningList.getTitle()).isEqualTo("Ze title"); assertThat(decommissioningList.getDescription()).isEqualTo("Ze description"); assertThat(decommissioningList.getAdministrativeUnit()).isEqualTo(records.unitId_10a); assertThat(decommissioningList.getDecommissioningListType()).isEqualTo(DecommissioningListType.DOCUMENTS_TO_DESTROY); assertThat(decommissioningList.getDocuments()).containsExactly(records.folder_A10 + "_paperContractWithDifferentCopy"); assertThat(decommissioningList.getFolderDetails()).isEmpty(); assertThat(decommissioningList.getContainerDetails()).isEmpty(); } @Test public void givenSemiActiveToDepositSearchThenCreateListToDeposit() { DecommissioningListParams params = new DecommissioningListParams(); params.setTitle("Ze title"); params.setDescription("Ze description"); params.setAdministrativeUnit(records.unitId_10a); params.setSearchType(SearchType.documentSemiActiveToDeposit); params.setSelectedRecordIds(Arrays.asList(records.folder_A42 + "_paperContractWithDifferentCopy")); DecommissioningList decommissioningList = service.createDecommissioningList(params, records.getChuckNorris()); assertThat(decommissioningList.getTitle()).isEqualTo("Ze title"); assertThat(decommissioningList.getDescription()).isEqualTo("Ze description"); assertThat(decommissioningList.getAdministrativeUnit()).isEqualTo(records.unitId_10a); assertThat(decommissioningList.getDecommissioningListType()).isEqualTo(DecommissioningListType.DOCUMENTS_TO_DEPOSIT); assertThat(decommissioningList.getDocuments()).containsExactly(records.folder_A42 + "_paperContractWithDifferentCopy"); assertThat(decommissioningList.getFolderDetails()).isEmpty(); assertThat(decommissioningList.getContainerDetails()).isEmpty(); } @Test public void givenSemiActiveToDestroySearchThenCreateListToDestroy() { DecommissioningListParams params = new DecommissioningListParams(); params.setTitle("Ze title"); params.setDescription("Ze description"); params.setAdministrativeUnit(records.unitId_10a); params.setSearchType(SearchType.documentSemiActiveToDestroy); params.setSelectedRecordIds(Arrays.asList(records.folder_A42 + "_paperContractWithDifferentCopy")); DecommissioningList decommissioningList = service.createDecommissioningList(params, records.getChuckNorris()); assertThat(decommissioningList.getTitle()).isEqualTo("Ze title"); assertThat(decommissioningList.getDescription()).isEqualTo("Ze description"); assertThat(decommissioningList.getAdministrativeUnit()).isEqualTo(records.unitId_10a); assertThat(decommissioningList.getDecommissioningListType()).isEqualTo(DecommissioningListType.DOCUMENTS_TO_DESTROY); assertThat(decommissioningList.getDocuments()).containsExactly(records.folder_A42 + "_paperContractWithDifferentCopy"); assertThat(decommissioningList.getFolderDetails()).isEmpty(); assertThat(decommissioningList.getContainerDetails()).isEmpty(); } @Test public void givenListToTransferThenAllDocumentsAreTransferred() { User processingUser = records.getChuckNorris(); LocalDate processingDate = new LocalDate(); givenTimeIs(processingDate); service.decommission(records.getList31(), processingUser); verifyProcessed(processingDate, processingUser, records.getList31()); for (Document document : getListDocuments(records.getList31())) { assertThat(document.getActualTransferDateEntered()).isEqualTo(processingDate); } } @Test public void givenListOfActiveToDepositThenAllDocumentsAreDeposited() { User processingUser = records.getChuckNorris(); LocalDate processingDate = new LocalDate(); givenTimeIs(processingDate); service.decommission(records.getList34(), processingUser); verifyProcessed(processingDate, processingUser, records.getList34()); for (Document document : getListDocuments(records.getList34())) { assertThat(document.getActualDepositDateEntered()).isEqualTo(processingDate); } } @Test public void givenListOfSemiActiveToDepositThenAllDocumentsAreDeposited() { User processingUser = records.getChuckNorris(); LocalDate processingDate = new LocalDate(); givenTimeIs(processingDate); service.decommission(records.getList33(), processingUser); verifyProcessed(processingDate, processingUser, records.getList33()); for (Document document : getListDocuments(records.getList33())) { assertThat(document.getActualDepositDateEntered()).isEqualTo(processingDate); } } @Test public void givenListOfActiveToDestroyThenAllDocumentsAreDestroyed() { User processingUser = records.getChuckNorris(); LocalDate processingDate = new LocalDate(); givenTimeIs(processingDate); service.decommission(records.getList35(), processingUser); verifyProcessed(processingDate, processingUser, records.getList35()); for (Document document : getListDocuments(records.getList35())) { assertThat(document.getActualDestructionDateEntered()).isEqualTo(processingDate); } } @Test public void givenListOfActiveToDestroyWhenDeletionEnabledThenAllDocumentsAreDeleted() { User processingUser = records.getChuckNorris(); LocalDate processingDate = new LocalDate(); givenTimeIs(processingDate); getConfigurationManager().setValue(RMConfigs.DELETE_DOCUMENT_RECORDS_WITH_DESTRUCTION, true); service.decommission(records.getList35(), processingUser); verifyProcessed(processingDate, processingUser, records.getList35()); for (Document document : getListDocuments(records.getList35())) { assertThat(document.getActualDestructionDateEntered()).isEqualTo(processingDate); assertThat(document.isLogicallyDeletedStatus()).isTrue(); } } @Test public void givenListOfSemiActiveToDestroyThenAllDocumentsAreDestroyed() { User processingUser = records.getChuckNorris(); LocalDate processingDate = new LocalDate(); givenTimeIs(processingDate); service.decommission(records.getList36(), processingUser); verifyProcessed(processingDate, processingUser, records.getList36()); for (Document document : getListDocuments(records.getList36())) { assertThat(document.getActualDestructionDateEntered()).isEqualTo(processingDate); } } @Test public void givenListOfSemiActiveToDestroyWhenDeletionEnabledThenAllDocumentsAreDeleted() { User processingUser = records.getChuckNorris(); LocalDate processingDate = new LocalDate(); givenTimeIs(processingDate); getConfigurationManager().setValue(RMConfigs.DELETE_DOCUMENT_RECORDS_WITH_DESTRUCTION, true); service.decommission(records.getList36(), processingUser); verifyProcessed(processingDate, processingUser, records.getList36()); for (Document document : getListDocuments(records.getList36())) { assertThat(document.getActualDestructionDateEntered()).isEqualTo(processingDate); assertThat(document.isLogicallyDeletedStatus()).isTrue(); } } @Test @SlowTest public void givenListToTransferWhenCreatePDFaOnTransferThenPDFaCreated() { getConfigurationManager().setValue(RMConfigs.PDFA_CREATED_ON, DecommissioningPhase.ON_TRANSFER_OR_DEPOSIT); givenDisabledAfterTestValidations(); service.decommission(records.getList31(), records.getChuckNorris()); for (Document document : getListDocuments(records.getList31())) { if (document.getContent() != null) { assertThat(document.getContent().getCurrentVersion().getMimetype()).isEqualTo("application/pdf"); } } } @Test @SlowTest public void givenListToDepositWhenCreatePDFaOnTransferThenPDFaCreated() { getConfigurationManager().setValue(RMConfigs.PDFA_CREATED_ON, DecommissioningPhase.ON_TRANSFER_OR_DEPOSIT); givenDisabledAfterTestValidations(); service.decommission(records.getList34(), records.getChuckNorris()); for (Document document : getListDocuments(records.getList34())) { if (document.getContent() != null) { assertThat(document.getContent().getCurrentVersion().getMimetype()).isEqualTo("application/pdf"); } } } @Test @SlowTest public void givenListToDepositWhenCreatePDFaOnDepositThenPDFaCreated() { getConfigurationManager().setValue(RMConfigs.PDFA_CREATED_ON, DecommissioningPhase.ON_DEPOSIT); givenDisabledAfterTestValidations(); service.decommission(records.getList33(), records.getChuckNorris()); for (Document document : getListDocuments(records.getList33())) { if (document.getContent() != null) { assertThat(document.getContent().getCurrentVersion().getMimetype()).isEqualTo("application/pdf"); } } } private void verifyProcessed(LocalDate processingDate, User processingUser, DecommissioningList decommissioningList) { assertThat(decommissioningList.getProcessingDate()).isEqualTo(processingDate); assertThat(decommissioningList.getProcessingUser()).isEqualTo(processingUser.getId()); } private List<Document> getListDocuments(DecommissioningList list) { return rm.wrapDocuments(recordServices.getRecordsById(zeCollection, list.getDocuments())); } private SystemConfigurationsManager getConfigurationManager() { return getModelLayerFactory().getSystemConfigurationsManager(); } }