package com.constellio.app.modules.rm.services.decommissioning;
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.model.enums.DecommissioningType;
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.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.structures.FolderDetailWithType;
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.model.services.records.RecordServicesException;
import com.constellio.sdk.tests.ConstellioTest;
import com.constellio.sdk.tests.annotations.SlowTest;
import org.joda.time.LocalDate;
import org.junit.Before;
import org.junit.Test;
import java.util.Arrays;
import static org.assertj.core.api.Assertions.assertThat;
public class DecommissioningServiceFolderDecommissioningAcceptTest extends ConstellioTest {
DecommissioningService service;
RMSchemasRecordsServices rm;
RMTestRecords records = new RMTestRecords(zeCollection);
RecordServices recordServices;
@Before
public void setUp()
throws Exception {
prepareSystem(
withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records)
.withFoldersAndContainersOfEveryStatus().withDocumentsHavingContent()
);
rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory());
service = new DecommissioningService(zeCollection, getAppLayerFactory());
recordServices = getModelLayerFactory().newRecordServices();
}
@Test
public void givenUnprocessedListAndRgdThenIsEditable() {
assertThat(service.isEditable(records.getList01(), records.getChuckNorris())).isTrue();
assertThat(service.isEditable(records.getList02(), records.getChuckNorris())).isTrue();
assertThat(service.isEditable(records.getList03(), records.getChuckNorris())).isTrue();
assertThat(service.isEditable(records.getList04(), records.getChuckNorris())).isTrue();
assertThat(service.isEditable(records.getList05(), records.getChuckNorris())).isTrue();
assertThat(service.isEditable(records.getList06(), records.getChuckNorris())).isTrue();
assertThat(service.isEditable(records.getList07(), records.getChuckNorris())).isTrue();
assertThat(service.isEditable(records.getList08(), records.getChuckNorris())).isTrue();
assertThat(service.isEditable(records.getList09(), records.getChuckNorris())).isTrue();
assertThat(service.isEditable(records.getList10(), records.getChuckNorris())).isTrue();
}
@Test
public void givenProcessedListThenIsNotEditable() {
assertThat(service.isEditable(records.getList11(), records.getChuckNorris())).isFalse();
assertThat(service.isEditable(records.getList12(), records.getChuckNorris())).isFalse();
assertThat(service.isEditable(records.getList13(), records.getChuckNorris())).isFalse();
assertThat(service.isEditable(records.getList14(), records.getChuckNorris())).isFalse();
assertThat(service.isEditable(records.getList15(), records.getChuckNorris())).isFalse();
}
@Test
public void givenUnprocessedListAndRgdThenIsDeletable() {
assertThat(service.isDeletable(records.getList01(), records.getChuckNorris())).isTrue();
assertThat(service.isDeletable(records.getList02(), records.getChuckNorris())).isTrue();
assertThat(service.isDeletable(records.getList03(), records.getChuckNorris())).isTrue();
assertThat(service.isDeletable(records.getList04(), records.getChuckNorris())).isTrue();
assertThat(service.isDeletable(records.getList05(), records.getChuckNorris())).isTrue();
assertThat(service.isDeletable(records.getList06(), records.getChuckNorris())).isTrue();
assertThat(service.isDeletable(records.getList07(), records.getChuckNorris())).isTrue();
assertThat(service.isDeletable(records.getList08(), records.getChuckNorris())).isTrue();
assertThat(service.isDeletable(records.getList09(), records.getChuckNorris())).isTrue();
assertThat(service.isDeletable(records.getList10(), records.getChuckNorris())).isTrue();
}
@Test
public void givenProcessedListThenIsNotDeletable() {
assertThat(service.isDeletable(records.getList11(), records.getChuckNorris())).isFalse();
assertThat(service.isDeletable(records.getList12(), records.getChuckNorris())).isFalse();
assertThat(service.isDeletable(records.getList13(), records.getChuckNorris())).isFalse();
assertThat(service.isDeletable(records.getList14(), records.getChuckNorris())).isFalse();
assertThat(service.isDeletable(records.getList15(), records.getChuckNorris())).isFalse();
}
@Test
public void givenUnprocessedListToCloseOrDestroyAndRdgThenIsProcessableIfApproved() {
assertThat(service.isProcessable(records.getList02(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList02()), records.getChuckNorris())).isTrue();
assertThat(service.isProcessable(records.getList03(), records.getGandalf_managerInABC())).isFalse();
assertThat(service.isProcessable(approved(records.getList03()), records.getChuckNorris())).isTrue();
assertThat(service.isProcessable(records.getList07(), records.getGandalf_managerInABC())).isFalse();
assertThat(service.isProcessable(approved(records.getList07()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedListToCloseThenIsProcessableWithoutApprovalIfApprovalNotRequired() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_CLOSING, false);
assertThat(service.isProcessable(records.getList03(), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedListToCloseAndApprovalNotRequiredButApprovalRequestedThenIsProcessableIfApproved() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_CLOSING, false);
assertThat(service.isProcessable(requestApproval(records.getList03()), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList03()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedListToCloseAndApprovalNotRequiredButValidationRequestedThenIsProcessableIfValidated() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_CLOSING, false);
assertThat(service.isProcessable(requestValidation(records.getList03()), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(validated(records.getList03()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedListWithAllElectronicAndRdgThenIsProcessableIfApproved() {
assertThat(service.isProcessable(records.getList06(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList06()), records.getChuckNorris())).isTrue();
assertThat(service.isProcessable(records.getList09(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList09()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedActiveToDepositListThenIsProcessableWithoutApprovalIfApprovalNotRequired() {
DecommissioningList list = packed(records.getList20(), records.containerId_bac01);
assertThat(service.isProcessable(list, records.getChuckNorris())).isFalse();
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_DEPOSIT_OF_ACTIVE, false);
assertThat(service.isProcessable(list, records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedActiveToDepositListAndApprovalNotRequiredButApprovalRequestedThenIsProcessableIfApproved() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_DEPOSIT_OF_ACTIVE, false);
DecommissioningList list = packed(records.getList20(), records.containerId_bac01);
assertThat(service.isProcessable(requestApproval(list), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList20()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedActiveToDepositListAndApprovalNotRequiredButValidationRequestedThenIsProcessableIfValidated() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_DEPOSIT_OF_ACTIVE, false);
DecommissioningList list = packed(records.getList20(), records.containerId_bac01);
assertThat(service.isProcessable(requestValidation(list), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(validated(records.getList20()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedSemiActiveToDepositListThenIsProcessableWithoutApprovalIfApprovalNotRequired() {
assertThat(service.isProcessable(records.getList09(), records.getChuckNorris())).isFalse();
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_DEPOSIT_OF_SEMIACTIVE, false);
assertThat(service.isProcessable(records.getList09(), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedSemiActiveToDepositListAndApprovalNotRequiredButApprovalRequestedThenIsProcessableIfApproved() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_DEPOSIT_OF_SEMIACTIVE, false);
assertThat(service.isProcessable(requestApproval(records.getList09()), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList09()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedSemiActiveToDepositListAndApprovalNotRequiredButValidationRequestedThenIsProcessableIfValidated() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_DEPOSIT_OF_SEMIACTIVE, false);
assertThat(service.isProcessable(requestValidation(records.getList09()), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(validated(records.getList09()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedListWithNonElectronicAndManagerWhenFoldersAlreadyInContainersThenIsProcessableIfApproved() {
assertThat(service.isProcessable(records.getList08(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList08()), records.getChuckNorris())).isTrue();
assertThat(service.isProcessable(records.getList10(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList10()), records.getChuckNorris())).isTrue();
assertThat(service.isProcessable(records.getList16(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList16()), records.getChuckNorris())).isTrue();
}
@Test
public void giveUnprocessedTransferListThenIsProcessableWithoutApprovalIfApprovalNotRequired() {
assertThat(service.isProcessable(records.getList16(), records.getChuckNorris())).isFalse();
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_TRANSFER, false);
assertThat(service.isProcessable(records.getList16(), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedTransferListAndApprovalNotRequiredButApprovalRequestedThenIsProcessableIfApproved() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_TRANSFER, false);
assertThat(service.isProcessable(requestApproval(records.getList16()), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList16()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedTransferListAndApprovalNotRequiredButValidationRequestedThenIsProcessableIfValidated() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_TRANSFER, false);
assertThat(service.isProcessable(requestValidation(records.getList16()), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(validated(records.getList16()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedListWithNonElectronicAndRdgWhenFoldersNotInContainersThenIsNotProcessable() {
assertThat(service.isProcessable(records.getList04(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList04()), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(records.getList05(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList05()), records.getChuckNorris())).isFalse();
}
@Test
public void givenUnprocessedActiveToDestroyListThenIsProcessableIfApproved() {
assertThat(service.isProcessable(records.getList21(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList21()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedActiveToDestroyListThenIsProcessableWithoutApprovalIfApprovalNotRequired() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_DESTRUCTION_OF_ACTIVE, false);
assertThat(service.isProcessable(records.getList21(), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedActiveToDestroyListAndApprovalNotRequiredButApprovalRequestedThenIsProcessableIfApproved() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_DESTRUCTION_OF_ACTIVE, false);
assertThat(service.isProcessable(requestApproval(records.getList21()), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList21()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedActiveToDestroyListAndApprovalNotRequiredButValidationRequestedThenIsProcessableIfValidated() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_DESTRUCTION_OF_ACTIVE, false);
assertThat(service.isProcessable(requestValidation(records.getList21()), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(validated(records.getList21()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedSemiActiveToDestroyListThenIsProcessableIfApproved() {
assertThat(service.isProcessable(records.getList01(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList01()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedSemiActiveToDestroyListThenIsProcessableWithoutApprovalIfApprovalNotRequired() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_DESTRUCTION_OF_SEMIACTIVE, false);
assertThat(service.isProcessable(records.getList01(), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedSemiActiveToDestroyListAndApprovalNotRequiredButApprovalRequestedThenIsProcessableIfApproved() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_DESTRUCTION_OF_SEMIACTIVE, false);
assertThat(service.isProcessable(requestApproval(records.getList01()), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(approved(records.getList01()), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedSemiActiveToDestroyListAndApprovalNotRequiredButValidationRequestedThenIsProcessableIfValidated() {
getConfigurationManager().setValue(RMConfigs.REQUIRE_APPROVAL_FOR_DESTRUCTION_OF_SEMIACTIVE, false);
assertThat(service.isProcessable(requestValidation(records.getList01()), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(validated(records.getList01()), records.getChuckNorris())).isTrue();
}
@Test
public void givenProcessedListThenIsNotProcessable() {
assertThat(service.isProcessable(records.getList11(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(records.getList12(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(records.getList13(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(records.getList14(), records.getChuckNorris())).isFalse();
assertThat(service.isProcessable(records.getList15(), records.getChuckNorris())).isFalse();
}
@Test
public void givenUnprocessedSortableListToDestroyThenCanEditContainers() {
assertThat(service.canEditContainers(records.getList01(), records.getChuckNorris())).isTrue();
}
@Test
public void givenUnprocessedListToCloseOrDestroyThenCannotEditContainers() {
assertThat(service.canEditContainers(records.getList02(), records.getChuckNorris())).isFalse();
assertThat(service.canEditContainers(records.getList03(), records.getChuckNorris())).isFalse();
assertThat(service.canEditContainers(records.getList07(), records.getChuckNorris())).isFalse();
}
@Test
public void givenProcessedListThenCannotEditContainers() {
assertThat(service.canEditContainers(records.getList11(), records.getChuckNorris())).isFalse();
assertThat(service.canEditContainers(records.getList12(), records.getChuckNorris())).isFalse();
assertThat(service.canEditContainers(records.getList13(), records.getChuckNorris())).isFalse();
assertThat(service.canEditContainers(records.getList14(), records.getChuckNorris())).isFalse();
assertThat(service.canEditContainers(records.getList15(), records.getChuckNorris())).isFalse();
}
@Test
public void givenRegularUserOrAdminThenIsNotEditableDeletableProcessableContainerizable() {
assertThat(service.isEditable(records.getList01(), records.getAlice())).isFalse();
assertThat(service.isDeletable(records.getList01(), records.getAlice())).isFalse();
assertThat(service.isProcessable(records.getList01(), records.getAlice())).isFalse();
assertThat(service.canEditContainers(records.getList01(), records.getAlice())).isFalse();
assertThat(service.isEditable(records.getList01(), records.getGandalf_managerInABC())).isFalse();
assertThat(service.isDeletable(records.getList01(), records.getGandalf_managerInABC())).isFalse();
assertThat(service.isProcessable(records.getList01(), records.getGandalf_managerInABC())).isFalse();
assertThat(service.canEditContainers(records.getList01(), records.getGandalf_managerInABC())).isFalse();
}
@Test
public void givenUnprocessedListToCloseOrDestroyThenAllFoldersAreProcessable() {
verifyFolderProcessabilityForAllFoldersIn(records.getList01(), true);
verifyFolderProcessabilityForAllFoldersIn(records.getList02(), true);
verifyFolderProcessabilityForAllFoldersIn(records.getList03(), true);
verifyFolderProcessabilityForAllFoldersIn(records.getList07(), true);
}
@Test
public void givenUnprocessedListWithAllElectronicThenAllFoldersAreProcessable() {
verifyFolderProcessabilityForAllFoldersIn(records.getList06(), true);
verifyFolderProcessabilityForAllFoldersIn(records.getList09(), true);
}
@Test
public void givenUnprocessedListWithNonElectronicWhenFoldersAlreadyInContainersThenAllFoldersAreProcessable() {
verifyFolderProcessabilityForAllFoldersIn(records.getList09(), true);
}
@Test
public void givenUnprocessedListWithNonElectronicWhenFoldersNotInContainersThenNoFoldersAreProcessable() {
verifyFolderProcessabilityForAllFoldersIn(records.getList04(), false);
}
@Test
public void givenListToDepositOrDestroyWithSortableFoldersThenIsSortable() {
assertThat(service.isSortable(records.getList01())).isTrue();
assertThat(service.isSortable(records.getList10())).isTrue();
assertThat(service.isSortable(records.getList18())).isTrue();
assertThat(service.isSortable(records.getList19())).isTrue();
// Already treated
assertThat(service.isSortable(records.getList14())).isTrue();
}
@Test
public void givenListToDepositOrDestroyWithoutSortableFoldersThenIsNotSortable() {
assertThat(service.isSortable(records.getList02())).isFalse();
assertThat(service.isSortable(records.getList07())).isFalse();
assertThat(service.isSortable(records.getList09())).isFalse();
// Already treated
assertThat(service.isSortable(records.getList15())).isFalse();
}
@Test
public void givenListToCloseOrTransferThenIsNotSortable() {
assertThat(service.isSortable(records.getList03())).isFalse();
assertThat(service.isSortable(records.getList04())).isFalse();
assertThat(service.isSortable(records.getList05())).isFalse();
assertThat(service.isSortable(records.getList06())).isFalse();
assertThat(service.isSortable(records.getList16())).isFalse();
assertThat(service.isSortable(records.getList17())).isFalse();
// Already treated
assertThat(service.isSortable(records.getList11())).isFalse();
assertThat(service.isSortable(records.getList12())).isFalse();
assertThat(service.isSortable(records.getList13())).isFalse();
}
@Test
public void givenFixedPeriodSearchThenCreateListToClose() {
DecommissioningListParams params = new DecommissioningListParams();
params.setTitle("Ze title");
params.setDescription("Ze description");
params.setAdministrativeUnit(records.unitId_10a);
params.setSearchType(SearchType.fixedPeriod);
params.setSelectedRecordIds(Arrays.asList(records.folder_A01));
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.FOLDERS_TO_CLOSE);
assertThat(decommissioningList.getFolderDetails()).containsOnly(new DecomListFolderDetail(records.getFolder_A01()));
assertThat(decommissioningList.getContainerDetails()).isEmpty();
}
@Test
public void givenCode888SearchThenCreateListToClose() {
DecommissioningListParams params = new DecommissioningListParams();
params.setTitle("Ze title");
params.setDescription("Ze description");
params.setAdministrativeUnit(records.unitId_10a);
params.setSearchType(SearchType.code888);
params.setSelectedRecordIds(Arrays.asList(records.folder_A04));
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.FOLDERS_TO_CLOSE);
assertThat(decommissioningList.getFolderDetails()).containsOnly(new DecomListFolderDetail(records.getFolder_A04()));
assertThat(decommissioningList.getContainerDetails()).isEmpty();
}
@Test
public void givenCode999SearchThenCreateListToClose() {
DecommissioningListParams params = new DecommissioningListParams();
params.setTitle("Ze title");
params.setDescription("Ze description");
params.setAdministrativeUnit(records.unitId_10a);
params.setSearchType(SearchType.code999);
params.setSelectedRecordIds(Arrays.asList(records.folder_A07));
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.FOLDERS_TO_CLOSE);
assertThat(decommissioningList.getFolderDetails()).containsOnly(new DecomListFolderDetail(records.getFolder_A07()));
assertThat(decommissioningList.getContainerDetails()).isEmpty();
}
@Test
public void givenTransferSearchThenCreateListToTransfer() {
DecommissioningListParams params = new DecommissioningListParams();
params.setTitle("Ze title");
params.setDescription("Ze description");
params.setAdministrativeUnit(records.unitId_10a);
params.setSearchType(SearchType.transfer);
params.setSelectedRecordIds(Arrays.asList(records.folder_A10));
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.FOLDERS_TO_TRANSFER);
assertThat(decommissioningList.getFolderDetails()).containsOnly(new DecomListFolderDetail(records.getFolder_A10()));
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.activeToDeposit);
params.setSelectedRecordIds(Arrays.asList(records.folder_A10));
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.FOLDERS_TO_DEPOSIT);
assertThat(decommissioningList.getFolderDetails()).containsOnly(new DecomListFolderDetail(records.getFolder_A10()));
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.activeToDestroy);
params.setSelectedRecordIds(Arrays.asList(records.folder_A10));
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.FOLDERS_TO_DESTROY);
assertThat(decommissioningList.getFolderDetails()).containsOnly(new DecomListFolderDetail(records.getFolder_A10()));
assertThat(decommissioningList.getContainerDetails()).isEmpty();
}
@Test
public void givenSemiActiveToDepositSearchThenCreateListToDepositWithContainerDetailsAndFoldersFromSameContainers() {
DecommissioningListParams params = new DecommissioningListParams();
params.setTitle("Ze title");
params.setDescription("Ze description");
params.setAdministrativeUnit(records.unitId_10a);
params.setSearchType(SearchType.semiActiveToDeposit);
params.setSelectedRecordIds(Arrays.asList(records.folder_A42));
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.FOLDERS_TO_DEPOSIT);
assertThat(decommissioningList.getFolderDetails()).containsOnly(
new DecomListFolderDetail(records.getFolder_A42()).setContainerRecordId(records.containerId_bac13),
new DecomListFolderDetail(records.getFolder_A43()).setContainerRecordId(records.containerId_bac13),
new DecomListFolderDetail(records.getFolder_A44()).setContainerRecordId(records.containerId_bac13));
assertThat(decommissioningList.getContainerDetails()).containsOnly(
new DecomListContainerDetail(records.containerId_bac13));
}
@Test
public void givenSemiActiveToDepositSearchWhenMixedContainersAllowedThenCreateListWithOnlyGivenFolders() {
getConfigurationManager().setValue(RMConfigs.MIXED_CONTAINERS_ALLOWED, true);
DecommissioningListParams params = new DecommissioningListParams();
params.setTitle("Ze title");
params.setDescription("Ze description");
params.setAdministrativeUnit(records.unitId_10a);
params.setSearchType(SearchType.semiActiveToDeposit);
params.setSelectedRecordIds(Arrays.asList(records.folder_A42));
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.FOLDERS_TO_DEPOSIT);
assertThat(decommissioningList.getFolderDetails()).containsOnly(
new DecomListFolderDetail(records.getFolder_A42()).setContainerRecordId(records.containerId_bac13));
assertThat(decommissioningList.getContainerDetails()).containsOnly(
new DecomListContainerDetail(records.containerId_bac13));
}
@Test
public void givenSemiActiveToDestroySearchThenCreateListToDepositWithContainerDetailsAndFoldersFromSameContainers() {
DecommissioningListParams params = new DecommissioningListParams();
params.setTitle("Ze title");
params.setDescription("Ze description");
params.setAdministrativeUnit(records.unitId_10a);
params.setSearchType(SearchType.semiActiveToDestroy);
params.setSelectedRecordIds(Arrays.asList(records.folder_A42));
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.FOLDERS_TO_DESTROY);
assertThat(decommissioningList.getFolderDetails()).containsOnly(
new DecomListFolderDetail(records.getFolder_A42()).setContainerRecordId(records.containerId_bac13),
new DecomListFolderDetail(records.getFolder_A43()).setContainerRecordId(records.containerId_bac13),
new DecomListFolderDetail(records.getFolder_A44()).setContainerRecordId(records.containerId_bac13));
assertThat(decommissioningList.getContainerDetails()).containsOnly(
new DecomListContainerDetail(records.containerId_bac13));
}
@Test
public void givenContainerIsRecycledThenEmptyTheContainer() {
User user = records.getGandalf_managerInABC();
service.recycleContainer(records.getContainerBac13(), user);
assertThat(records.getFolder_A42().getContainer()).isNull();
assertThat(records.getFolder_A43().getContainer()).isNull();
assertThat(records.getFolder_A44().getContainer()).isNull();
}
@Test
public void givenContainerIsRecycledThenResetTheDecommissioningDatesFullnessAndSize() {
User user = records.getGandalf_managerInABC();
service.recycleContainer(records.getContainerBac13().setFull(true).setFillRatioEntered(100.0), user);
assertThat(records.getContainerBac13().getRealTransferDate()).isNull();
assertThat(records.getContainerBac13().getRealDepositDate()).isNull();
assertThat(records.getContainerBac13().isFull()).isFalse();
assertThat(records.getContainerBac13().getFillRatioEntered()).isEqualTo(0.0);
}
@Test
public void givenListToCloseThenAllFoldersAreClosed() {
User processingUser = records.getChuckNorris();
LocalDate processingDate = new LocalDate();
givenTimeIs(processingDate);
service.decommission(approved(records.getList03()), processingUser);
verifyProcessed(processingDate, processingUser, records.getList03());
verifyFoldersClosed(processingDate, records.getFolder_A01(), records.getFolder_A02(),
records.getFolder_A03());
}
@Test
public void givenListToTransferThenAllFoldersAreTransferred() {
User processingUser = records.getChuckNorris();
LocalDate processingDate = new LocalDate();
givenTimeIs(processingDate);
service.decommission(approved(records.getList16()), processingUser);
verifyProcessed(processingDate, processingUser, records.getList16());
verifyFoldersTransferred(processingDate, records.containerId_bac14,
records.getFolder_A22(), records.getFolder_A23(), records.getFolder_A24());
verifyContainersTransferred(processingDate, records.getContainerBac14());
}
@Test
public void givenListToTransferWhenPurgeMinorVersionOnTransferThenMinorVersionsArePurged() {
getConfigurationManager().setValue(RMConfigs.MINOR_VERSIONS_PURGED_ON, DecommissioningPhase.ON_TRANSFER_OR_DEPOSIT);
givenDisabledAfterTestValidations();
service.decommission(approved(packed(records.getList05(), records.containerId_bac15)), records.getChuckNorris());
assertThat(records.getDocumentWithContent_A19().getContent().getHistoryVersions()).isEmpty();
}
@Test
@SlowTest
public void givenListToTransferWhenCreatePDFaOnTransferThenPDFaCreated() {
getConfigurationManager().setValue(RMConfigs.PDFA_CREATED_ON, DecommissioningPhase.ON_TRANSFER_OR_DEPOSIT);
givenDisabledAfterTestValidations();
service.decommission(approved(packed(records.getList05(), records.containerId_bac15)), records.getChuckNorris());
assertThat(records.getDocumentWithContent_A19().getContent().getCurrentVersion().getMimetype())
.isEqualTo("application/pdf");
}
@Test
public void givenListToDepositThenAllFoldersAreDeposited() {
User processingUser = records.getChuckNorris();
LocalDate processingDate = new LocalDate();
givenTimeIs(processingDate);
service.decommission(approved(records.getList17()), processingUser);
verifyProcessed(processingDate, processingUser, records.getList17());
verifyFoldersDeposited(processingDate, records.containerId_bac11,
records.getFolder_A49(), records.getFolder_A50());
// Electronic only: not in container
verifyFoldersDeposited(processingDate, null, records.getFolder_A48());
verifyContainersDeposited(processingDate, records.getContainerBac11());
}
@Test
public void givenListToDepositWhenPurgeMinorVersionOnTransferThenMinorVersionsArePurged() {
getConfigurationManager().setValue(RMConfigs.MINOR_VERSIONS_PURGED_ON, DecommissioningPhase.ON_TRANSFER_OR_DEPOSIT);
givenDisabledAfterTestValidations();
service.decommission(approved(packed(records.getList20(), records.containerId_bac16)), records.getChuckNorris());
assertThat(records.getDocumentWithContent_A19().getContent().getHistoryVersions()).isEmpty();
}
@Test
public void givenListToDepositWhenPurgeMinorVersionsOnDepositThenMinorVersionsArePurged() {
getConfigurationManager().setValue(RMConfigs.MINOR_VERSIONS_PURGED_ON, DecommissioningPhase.ON_DEPOSIT);
givenDisabledAfterTestValidations();
service.decommission(approved(records.getList17()), records.getChuckNorris());
assertThat(records.getDocumentWithContent_A49().getContent().getHistoryVersions()).isEmpty();
}
@Test
@SlowTest
public void givenListToDepositWhenCreatePDFaOnTransferThenPDFaCreated() {
getConfigurationManager().setValue(RMConfigs.PDFA_CREATED_ON, DecommissioningPhase.ON_TRANSFER_OR_DEPOSIT);
givenDisabledAfterTestValidations();
service.decommission(approved(packed(records.getList20(), records.containerId_bac16)), records.getChuckNorris());
assertThat(records.getDocumentWithContent_A19().getContent().getCurrentVersion().getMimetype())
.isEqualTo("application/pdf");
}
@Test
@SlowTest
public void givenListToDepositWhenCreatePDFaOnDepositThenPDFaCreated() {
getConfigurationManager().setValue(RMConfigs.PDFA_CREATED_ON, DecommissioningPhase.ON_DEPOSIT);
givenDisabledAfterTestValidations();
service.decommission(approved(records.getList17()), records.getChuckNorris());
assertThat(records.getDocumentWithContent_A49().getContent().getCurrentVersion().getMimetype())
.isEqualTo("application/pdf");
}
@Test
public void givenListToDestroyThenAllFoldersAreDestroyed() {
User processingUser = records.getChuckNorris();
LocalDate processingDate = new LocalDate();
givenTimeIs(processingDate);
service.decommission(approved(records.getList02()), processingUser);
verifyProcessed(processingDate, processingUser, records.getList02());
verifyFoldersDestroyed(processingDate,
records.getFolder_A54(), records.getFolder_A55(), records.getFolder_A56());
assertThat(records.getContainerBac10().isFull()).isFalse();
}
@Test
public void givenListToDestroyThenDocumentsContentsAreDestroyed() {
givenDisabledAfterTestValidations();
service.decommission(approved(records.getList21()), records.getChuckNorris());
assertThat(records.getDocumentWithContent_A19().getContent()).isNull();
}
@Test
public void givenListToDestroyWhenDocumentDeletionIsEnabledThenDocumentsAreDeleted() {
getConfigurationManager().setValue(RMConfigs.DELETE_DOCUMENT_RECORDS_WITH_DESTRUCTION, true);
givenDisabledAfterTestValidations();
service.decommission(approved(records.getList21()), records.getChuckNorris());
assertThat(records.getDocumentWithContent_A19().isLogicallyDeletedStatus()).isTrue();
assertThat(records.getDocumentWithContent_A19().getContent()).isNull();
}
@Test
public void givenListToDestroyWhenFolderDeletionIsEnabledThenFoldersAreDeleted() {
User processingUser = records.getChuckNorris();
LocalDate processingDate = new LocalDate();
givenTimeIs(processingDate);
getConfigurationManager().setValue(RMConfigs.DELETE_FOLDER_RECORDS_WITH_DESTRUCTION, true);
service.decommission(approved(records.getList02()), records.getChuckNorris());
verifyProcessed(processingDate, processingUser, records.getList02());
verifyFoldersDestroyed(processingDate,
records.getFolder_A54(), records.getFolder_A55(), records.getFolder_A56());
assertThat(records.getContainerBac10().isFull()).isFalse();
assertThat(records.getFolder_A54().isLogicallyDeletedStatus()).isTrue();
assertThat(records.getFolder_A55().isLogicallyDeletedStatus()).isTrue();
assertThat(records.getFolder_A56().isLogicallyDeletedStatus()).isTrue();
}
@Test
public void givenListToDepositWithSortThenRegularFoldersAreDepositedAndReversedFoldersAreDestroyed() {
User processingUser = records.getChuckNorris();
LocalDate processingDate = new LocalDate();
givenTimeIs(processingDate);
service.decommission(approved(records.getList18()), processingUser);
verifyProcessed(processingDate, processingUser, records.getList18());
verifyFoldersDeposited(processingDate, records.containerId_bac08, records.getFolder_B30());
verifyFoldersDestroyed(processingDate, records.getFolder_B33());
verifyContainersDeposited(processingDate, records.getContainerBac08(), records.getContainerBac09());
}
@Test
public void givenListToDestroyWithSortThenRegularFoldersAreDestroyedAndReversedFoldersAreDeposited() {
User processingUser = records.getChuckNorris();
LocalDate processingDate = new LocalDate();
givenTimeIs(processingDate);
service.decommission(approved(records.getList19()), processingUser);
verifyProcessed(processingDate, processingUser, records.getList19());
verifyFoldersDeposited(processingDate, records.containerId_bac09, records.getFolder_B33());
verifyFoldersDestroyed(processingDate, records.getFolder_B30());
verifyContainersDeposited(processingDate, records.getContainerBac08(), records.getContainerBac09());
}
private void verifyFolderProcessabilityForAllFoldersIn(DecommissioningList list, boolean expected) {
for (FolderDetailWithType folder : list.getFolderDetailsWithType()) {
assertThat(service.isFolderProcessable(list, folder)).isEqualTo(expected);
}
}
private void verifyProcessed(LocalDate processingDate, User processingUser, DecommissioningList decommissioningList) {
assertThat(decommissioningList.getProcessingDate()).isEqualTo(processingDate);
assertThat(decommissioningList.getProcessingUser()).isEqualTo(processingUser.getId());
}
private void verifyFoldersClosed(LocalDate processingDate, Folder... folders) {
for (Folder folder : folders) {
assertThat(folder.getCloseDateEntered()).isEqualTo(processingDate);
}
}
private void verifyFoldersTransferred(
LocalDate processingDate, String containerId, Folder... folders) {
for (Folder folder : folders) {
assertThat(folder.getActualTransferDate()).isEqualTo(processingDate);
assertThat(folder.getContainer()).isEqualTo(containerId);
}
}
private void verifyContainersTransferred(LocalDate processingDate, ContainerRecord... containers) {
for (ContainerRecord container : containers) {
assertThat(container.getRealTransferDate()).isEqualTo(processingDate);
assertThat(container.getDecommissioningType()).isEqualTo(DecommissioningType.TRANSFERT_TO_SEMI_ACTIVE);
}
}
private void verifyFoldersDeposited(LocalDate processingDate, String containerId, Folder... folders) {
for (Folder folder : folders) {
assertThat(folder.getActualDepositDate()).isEqualTo(processingDate);
assertThat(folder.getContainer()).isEqualTo(containerId);
}
}
private void verifyContainersDeposited(LocalDate processingDate, ContainerRecord... containers) {
for (ContainerRecord container : containers) {
assertThat(container.getRealDepositDate()).isEqualTo(processingDate);
assertThat(container.getDecommissioningType()).isEqualTo(DecommissioningType.DEPOSIT);
}
}
private void verifyFoldersDestroyed(LocalDate processingDate, Folder... folders) {
for (Folder folder : folders) {
assertThat(folder.getActualDestructionDate()).isEqualTo(processingDate);
assertThat(folder.getContainer()).isNull();
}
}
private DecommissioningList packed(DecommissioningList list, String container) {
for (FolderDetailWithType folder : list.getFolderDetailsWithType()) {
if (folder.getType().potentiallyHasAnalogMedium()) {
folder.getDetail().setContainerRecordId(container);
}
}
return list.setContainerDetailsFor(container);
}
private DecommissioningList requestValidation(DecommissioningList list) {
return savedAndRefreshed(list.addValidationRequest(records.getAlice(), new LocalDate()));
}
private DecommissioningList validated(DecommissioningList list) {
for (DecomListValidation validation : list.getValidations()) {
validation.setValidationDate(new LocalDate());
}
return savedAndRefreshed(list);
}
private DecommissioningList requestApproval(DecommissioningList list) {
return savedAndRefreshed(list.setApprovalRequestDate(new LocalDate()).setApprovalRequest(records.getChuckNorris()));
}
private DecommissioningList approved(DecommissioningList list) {
return savedAndRefreshed(list.setApprovalDate(new LocalDate()).setApprovalUser(records.getGandalf_managerInABC()));
}
private DecommissioningList savedAndRefreshed(DecommissioningList list) {
try {
recordServices.update(list);
} catch (RecordServicesException e) {
throw new RuntimeException(e);
}
recordServices.refresh(list);
return list;
}
private SystemConfigurationsManager getConfigurationManager() {
return getModelLayerFactory().getSystemConfigurationsManager();
}
}