package com.constellio.app.modules.rm.services.decommissioning; import static com.constellio.model.services.search.query.logical.LogicalSearchQueryOperators.from; import static org.assertj.core.api.Assertions.assertThat; import java.util.List; import com.constellio.model.services.schemas.MetadataSchemaTypesAlteration; import com.constellio.model.services.schemas.builders.MetadataSchemaTypesBuilder; import org.junit.Before; import org.junit.Test; import com.constellio.app.modules.rm.RMConfigs; import com.constellio.app.modules.rm.RMTestRecords; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.Folder; import com.constellio.model.services.records.RecordServices; import com.constellio.model.services.search.SearchServices; import com.constellio.model.services.search.query.logical.LogicalSearchQuery; import com.constellio.sdk.tests.ConstellioTest; import com.constellio.sdk.tests.setups.Users; public class DecommissioningService_francis_AcceptTest extends ConstellioTest { Users users = new Users(); DecommissioningService service; RMSchemasRecordsServices rm; RMTestRecords records = new RMTestRecords(zeCollection); RecordServices recordServices; SearchServices searchServices; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule().withAllTestUsers().withRMTest(records) .withFoldersAndContainersOfEveryStatus().withAllTestUsers() ); rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); service = new DecommissioningService(zeCollection, getAppLayerFactory()); recordServices = getModelLayerFactory().newRecordServices(); searchServices = getModelLayerFactory().newSearchServices(); users.setUp(getModelLayerFactory().newUserServices()); } @Test public void whenDuplicateFolderThenAllDuplicableMetadataDuplicated() throws Exception { Folder a13 = records.getFolder_A13(); a13.setParentFolder(records.folder_A04); a13.setCategoryEntered((String) null); a13.setAdministrativeUnitEntered((String) null); recordServices.update(a13); getModelLayerFactory().getMetadataSchemasManager().modify(zeCollection, new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getSchema(Folder.DEFAULT_SCHEMA).get(Folder.DESCRIPTION).setDuplicable(false); } }); Folder a04 = records.getFolder_A04(); Folder duplicatedFolder = service.duplicate(records.getFolder_A04(), users.adminIn(zeCollection), false); assertThat(duplicatedFolder.getActualDepositDate()).isEqualTo(a04.getActualDepositDate()); assertThat(duplicatedFolder.getActualDestructionDate()).isEqualTo(a04.getActualDestructionDate()); assertThat(duplicatedFolder.getActualTransferDate()).isEqualTo(a04.getActualTransferDate()); assertThat(duplicatedFolder.getAdministrativeUnitEntered()).isEqualTo(a04.getAdministrativeUnitEntered()); assertThat(duplicatedFolder.getAlertUsersWhenAvailable()).isEqualTo(a04.getAlertUsersWhenAvailable()); assertThat(duplicatedFolder.getBorrowDate()).isEqualTo(a04.getBorrowDate()); assertThat(duplicatedFolder.getBorrowPreviewReturnDate()).isEqualTo(a04.getBorrowPreviewReturnDate()); assertThat(duplicatedFolder.getBorrowPreviewReturnDate()).isEqualTo(a04.getBorrowPreviewReturnDate()); assertThat(duplicatedFolder.getBorrowUser()).isEqualTo(a04.getBorrowUser()); assertThat(duplicatedFolder.getBorrowed()).isEqualTo(a04.getBorrowed()); assertThat(duplicatedFolder.getBorrowType()).isEqualTo(a04.getBorrowType()); //assertThat(duplicatedFolder.getCalendarYearEntered()).isEqualTo(a04.getCalendarYearEntered()); assertThat(duplicatedFolder.getCategoryEntered()).isEqualTo(a04.getCategoryEntered()); assertThat(duplicatedFolder.getComments()).isEqualTo(a04.getComments()); assertThat(duplicatedFolder.getContainer()).isEqualTo(a04.getContainer()); assertThat(duplicatedFolder.getCopyStatusEntered()).isEqualTo(a04.getCopyStatusEntered()); assertThat(duplicatedFolder.getCloseDateEntered()).isEqualTo(a04.getCloseDateEntered()); assertThat(duplicatedFolder.getKeywords()).isEqualTo(a04.getKeywords()); assertThat(duplicatedFolder.getLinearSize()).isEqualTo(a04.getLinearSize()); assertThat(duplicatedFolder.getMainCopyRuleIdEntered()).isEqualTo(a04.getMainCopyRuleIdEntered()); assertThat(duplicatedFolder.getMediumTypes()).isEqualTo(a04.getMediumTypes()); assertThat(duplicatedFolder.getOpeningDate()).isEqualTo(a04.getOpeningDate()); assertThat(duplicatedFolder.getParentFolder()).isEqualTo(a04.getParentFolder()); assertThat(duplicatedFolder.getRetentionRuleEntered()).isEqualTo(a04.getRetentionRuleEntered()); assertThat(duplicatedFolder.getTitle()).isEqualTo(a04.getTitle() + " (Copie)"); assertThat(duplicatedFolder.getType()).isEqualTo(a04.getType()); assertThat(duplicatedFolder.getUniformSubdivisionEntered()).isEqualTo(a04.getUniformSubdivisionEntered()); List<String> children = searchServices.searchRecordIds(new LogicalSearchQuery() .setCondition(from(rm.folderSchemaType()).where(rm.folder.parentFolder()).isEqualTo(duplicatedFolder))); assertThat(children).isEmpty(); } @Test public void givenTitleNotDuplicableWhenDuplicateFolderThenAllDuplicableMetadataDuplicatedExceptTitle() throws Exception { Folder a13 = records.getFolder_A13(); a13.setParentFolder(records.folder_A04); a13.setCategoryEntered((String) null); a13.setAdministrativeUnitEntered((String) null); recordServices.update(a13); getModelLayerFactory().getMetadataSchemasManager().modify(zeCollection, new MetadataSchemaTypesAlteration() { @Override public void alter(MetadataSchemaTypesBuilder types) { types.getSchema(Folder.DEFAULT_SCHEMA).get(Folder.DESCRIPTION).setDuplicable(true); types.getSchema(Folder.DEFAULT_SCHEMA).get(Folder.TITLE).setDuplicable(false); } }); Folder a04 = records.getFolder_A04(); Folder duplicatedFolder = service.duplicate(records.getFolder_A04(), users.adminIn(zeCollection), false); assertThat(duplicatedFolder.getActualDepositDate()).isEqualTo(a04.getActualDepositDate()); assertThat(duplicatedFolder.getActualDestructionDate()).isEqualTo(a04.getActualDestructionDate()); assertThat(duplicatedFolder.getActualTransferDate()).isEqualTo(a04.getActualTransferDate()); assertThat(duplicatedFolder.getAdministrativeUnitEntered()).isEqualTo(a04.getAdministrativeUnitEntered()); assertThat(duplicatedFolder.getAlertUsersWhenAvailable()).isEqualTo(a04.getAlertUsersWhenAvailable()); assertThat(duplicatedFolder.getBorrowDate()).isEqualTo(a04.getBorrowDate()); assertThat(duplicatedFolder.getBorrowPreviewReturnDate()).isEqualTo(a04.getBorrowPreviewReturnDate()); assertThat(duplicatedFolder.getBorrowPreviewReturnDate()).isEqualTo(a04.getBorrowPreviewReturnDate()); assertThat(duplicatedFolder.getBorrowUser()).isEqualTo(a04.getBorrowUser()); assertThat(duplicatedFolder.getBorrowed()).isEqualTo(a04.getBorrowed()); assertThat(duplicatedFolder.getBorrowType()).isEqualTo(a04.getBorrowType()); //assertThat(duplicatedFolder.getCalendarYearEntered()).isEqualTo(a04.getCalendarYearEntered()); assertThat(duplicatedFolder.getCategoryEntered()).isEqualTo(a04.getCategoryEntered()); assertThat(duplicatedFolder.getComments()).isEqualTo(a04.getComments()); assertThat(duplicatedFolder.getContainer()).isEqualTo(a04.getContainer()); assertThat(duplicatedFolder.getCopyStatusEntered()).isEqualTo(a04.getCopyStatusEntered()); assertThat(duplicatedFolder.getCloseDateEntered()).isEqualTo(a04.getCloseDateEntered()); assertThat(duplicatedFolder.getKeywords()).isEqualTo(a04.getKeywords()); assertThat(duplicatedFolder.getLinearSize()).isEqualTo(a04.getLinearSize()); assertThat(duplicatedFolder.getMainCopyRuleIdEntered()).isEqualTo(a04.getMainCopyRuleIdEntered()); assertThat(duplicatedFolder.getMediumTypes()).isEqualTo(a04.getMediumTypes()); assertThat(duplicatedFolder.getOpeningDate()).isEqualTo(a04.getOpeningDate()); assertThat(duplicatedFolder.getParentFolder()).isEqualTo(a04.getParentFolder()); assertThat(duplicatedFolder.getRetentionRuleEntered()).isEqualTo(a04.getRetentionRuleEntered()); assertThat(duplicatedFolder.getTitle()).isNull(); assertThat(duplicatedFolder.getType()).isEqualTo(a04.getType()); assertThat(duplicatedFolder.getUniformSubdivisionEntered()).isEqualTo(a04.getUniformSubdivisionEntered()); List<String> children = searchServices.searchRecordIds(new LogicalSearchQuery() .setCondition(from(rm.folderSchemaType()).where(rm.folder.parentFolder()).isEqualTo(duplicatedFolder))); assertThat(children).isEmpty(); } @Test public void whenDuplicateFolderStructureThenAllDuplicableMetadataDuplicated() throws Exception { Folder a13 = records.getFolder_A13(); a13.setParentFolder(records.folder_A04); a13.setCategoryEntered((String) null); a13.setAdministrativeUnitEntered((String) null); recordServices.update(a13); Folder a04 = records.getFolder_A04(); Folder duplicatedFolder = service.duplicateStructureAndSave(records.getFolder_A04(), users.adminIn(zeCollection)); assertThat(duplicatedFolder.getActualDepositDate()).isEqualTo(a04.getActualDepositDate()); assertThat(duplicatedFolder.getActualDestructionDate()).isEqualTo(a04.getActualDestructionDate()); assertThat(duplicatedFolder.getActualTransferDate()).isEqualTo(a04.getActualTransferDate()); assertThat(duplicatedFolder.getAdministrativeUnitEntered()).isEqualTo(a04.getAdministrativeUnitEntered()); assertThat(duplicatedFolder.getAlertUsersWhenAvailable()).isEqualTo(a04.getAlertUsersWhenAvailable()); assertThat(duplicatedFolder.getBorrowDate()).isEqualTo(a04.getBorrowDate()); assertThat(duplicatedFolder.getBorrowPreviewReturnDate()).isEqualTo(a04.getBorrowPreviewReturnDate()); assertThat(duplicatedFolder.getBorrowPreviewReturnDate()).isEqualTo(a04.getBorrowPreviewReturnDate()); assertThat(duplicatedFolder.getBorrowUser()).isEqualTo(a04.getBorrowUser()); assertThat(duplicatedFolder.getBorrowed()).isEqualTo(a04.getBorrowed()); assertThat(duplicatedFolder.getBorrowType()).isEqualTo(a04.getBorrowType()); //assertThat(duplicatedFolder.getCalendarYearEntered()).isEqualTo(a04.getCalendarYearEntered()); assertThat(duplicatedFolder.getCategoryEntered()).isEqualTo(a04.getCategoryEntered()); assertThat(duplicatedFolder.getComments()).isEqualTo(a04.getComments()); assertThat(duplicatedFolder.getContainer()).isEqualTo(a04.getContainer()); assertThat(duplicatedFolder.getCopyStatusEntered()).isEqualTo(a04.getCopyStatusEntered()); assertThat(duplicatedFolder.getCloseDateEntered()).isEqualTo(a04.getCloseDateEntered()); assertThat(duplicatedFolder.getKeywords()).isEqualTo(a04.getKeywords()); assertThat(duplicatedFolder.getLinearSize()).isEqualTo(a04.getLinearSize()); assertThat(duplicatedFolder.getMainCopyRuleIdEntered()).isEqualTo(a04.getMainCopyRuleIdEntered()); assertThat(duplicatedFolder.getMediumTypes()).isEqualTo(a04.getMediumTypes()); assertThat(duplicatedFolder.getOpeningDate()).isEqualTo(a04.getOpeningDate()); assertThat(duplicatedFolder.getParentFolder()).isEqualTo(a04.getParentFolder()); assertThat(duplicatedFolder.getRetentionRuleEntered()).isEqualTo(a04.getRetentionRuleEntered()); assertThat(duplicatedFolder.getTitle()).isEqualTo(a04.getTitle() + " (Copie)"); assertThat(duplicatedFolder.getType()).isEqualTo(a04.getType()); assertThat(duplicatedFolder.getUniformSubdivisionEntered()).isEqualTo(a04.getUniformSubdivisionEntered()); List<String> children = searchServices.searchRecordIds(new LogicalSearchQuery() .setCondition(from(rm.folderSchemaType()).where(rm.folder.parentFolder()).isEqualTo(duplicatedFolder))); assertThat(children).hasSize(1); Folder duplicatedSubFolder = rm.getFolder(children.get(0)); assertThat(duplicatedSubFolder.getActualDepositDate()).isEqualTo(a13.getActualDepositDate()); assertThat(duplicatedSubFolder.getActualDestructionDate()).isEqualTo(a13.getActualDestructionDate()); assertThat(duplicatedSubFolder.getActualTransferDate()).isEqualTo(a13.getActualTransferDate()); assertThat(duplicatedSubFolder.getAdministrativeUnitEntered()).isEqualTo(a13.getAdministrativeUnitEntered()); assertThat(duplicatedSubFolder.getAlertUsersWhenAvailable()).isEqualTo(a13.getAlertUsersWhenAvailable()); assertThat(duplicatedSubFolder.getBorrowDate()).isEqualTo(a13.getBorrowDate()); assertThat(duplicatedSubFolder.getBorrowPreviewReturnDate()).isEqualTo(a13.getBorrowPreviewReturnDate()); assertThat(duplicatedSubFolder.getBorrowPreviewReturnDate()).isEqualTo(a13.getBorrowPreviewReturnDate()); assertThat(duplicatedSubFolder.getBorrowUser()).isEqualTo(a13.getBorrowUser()); assertThat(duplicatedSubFolder.getBorrowed()).isEqualTo(a13.getBorrowed()); assertThat(duplicatedSubFolder.getBorrowType()).isEqualTo(a13.getBorrowType()); //assertThat(duplicatedSubFolder.getCalendarYearEntered()).isEqualTo(a13.getCalendarYearEntered()); assertThat(duplicatedSubFolder.getCategoryEntered()).isEqualTo(a13.getCategoryEntered()); assertThat(duplicatedSubFolder.getComments()).isEqualTo(a13.getComments()); assertThat(duplicatedSubFolder.getContainer()).isEqualTo(a13.getContainer()); assertThat(duplicatedSubFolder.getCopyStatusEntered()).isEqualTo(a13.getCopyStatusEntered()); assertThat(duplicatedSubFolder.getCloseDateEntered()).isEqualTo(a13.getCloseDateEntered()); assertThat(duplicatedSubFolder.getKeywords()).isEqualTo(a13.getKeywords()); assertThat(duplicatedSubFolder.getLinearSize()).isEqualTo(a13.getLinearSize()); assertThat(duplicatedSubFolder.getMainCopyRuleIdEntered()).isEqualTo(a13.getMainCopyRuleIdEntered()); assertThat(duplicatedSubFolder.getMediumTypes()).isEqualTo(a13.getMediumTypes()); assertThat(duplicatedSubFolder.getOpeningDate()).isEqualTo(a13.getOpeningDate()); assertThat(duplicatedSubFolder.getParentFolder()).isEqualTo(duplicatedFolder.getId()); assertThat(duplicatedSubFolder.getRetentionRuleEntered()).isEqualTo(a13.getRetentionRuleEntered()); assertThat(duplicatedSubFolder.getTitle()).isEqualTo(a13.getTitle()); assertThat(duplicatedSubFolder.getType()).isEqualTo(a13.getType()); assertThat(duplicatedSubFolder.getUniformSubdivisionEntered()).isEqualTo(a13.getUniformSubdivisionEntered()); } @Test public void whenDuplicateSubFolderThenAllDuplicableMetadataDuplicated() throws Exception { Folder a13 = records.getFolder_A13(); a13.setParentFolder(records.folder_A04); a13.setCategoryEntered((String) null); a13.setAdministrativeUnitEntered((String) null); recordServices.update(a13); Folder duplicatedFolder = service.duplicate(a13, users.adminIn(zeCollection), false); assertThat(duplicatedFolder.getActualDepositDate()).isEqualTo(a13.getActualDepositDate()); assertThat(duplicatedFolder.getActualDestructionDate()).isEqualTo(a13.getActualDestructionDate()); assertThat(duplicatedFolder.getActualTransferDate()).isEqualTo(a13.getActualTransferDate()); assertThat(duplicatedFolder.getAdministrativeUnitEntered()).isEqualTo(a13.getAdministrativeUnitEntered()); assertThat(duplicatedFolder.getAlertUsersWhenAvailable()).isEqualTo(a13.getAlertUsersWhenAvailable()); assertThat(duplicatedFolder.getBorrowDate()).isEqualTo(a13.getBorrowDate()); assertThat(duplicatedFolder.getBorrowPreviewReturnDate()).isEqualTo(a13.getBorrowPreviewReturnDate()); assertThat(duplicatedFolder.getBorrowPreviewReturnDate()).isEqualTo(a13.getBorrowPreviewReturnDate()); assertThat(duplicatedFolder.getBorrowUser()).isEqualTo(a13.getBorrowUser()); assertThat(duplicatedFolder.getBorrowed()).isEqualTo(a13.getBorrowed()); assertThat(duplicatedFolder.getBorrowType()).isEqualTo(a13.getBorrowType()); //assertThat(duplicatedFolder.getCalendarYearEntered()).isEqualTo(a13.getCalendarYearEntered()); assertThat(duplicatedFolder.getCategoryEntered()).isEqualTo(a13.getCategoryEntered()); assertThat(duplicatedFolder.getComments()).isEqualTo(a13.getComments()); assertThat(duplicatedFolder.getContainer()).isEqualTo(a13.getContainer()); assertThat(duplicatedFolder.getCopyStatusEntered()).isEqualTo(a13.getCopyStatusEntered()); assertThat(duplicatedFolder.getCloseDateEntered()).isEqualTo(a13.getCloseDateEntered()); assertThat(duplicatedFolder.getKeywords()).isEqualTo(a13.getKeywords()); assertThat(duplicatedFolder.getLinearSize()).isEqualTo(a13.getLinearSize()); assertThat(duplicatedFolder.getMainCopyRuleIdEntered()).isEqualTo(a13.getMainCopyRuleIdEntered()); assertThat(duplicatedFolder.getMediumTypes()).isEqualTo(a13.getMediumTypes()); assertThat(duplicatedFolder.getOpeningDate()).isEqualTo(a13.getOpeningDate()); assertThat(duplicatedFolder.getParentFolder()).isEqualTo(a13.getParentFolder()); assertThat(duplicatedFolder.getRetentionRuleEntered()).isEqualTo(a13.getRetentionRuleEntered()); assertThat(duplicatedFolder.getTitle()).isEqualTo(a13.getTitle() + " (Copie)"); assertThat(duplicatedFolder.getType()).isEqualTo(a13.getType()); assertThat(duplicatedFolder.getUniformSubdivisionEntered()).isEqualTo(a13.getUniformSubdivisionEntered()); } @Test public void whenGetRetentionRulesForCategoryOrUniformSubdivision() throws Exception { assertThat(service.getRetentionRulesForCategory(null, null)) .isEmpty(); assertThat(service.getRetentionRulesForCategory(records.categoryId_X100, null)) .containsExactly(records.ruleId_1); assertThat(service.getRetentionRulesForCategory(records.categoryId_X110, null)) .hasSize(2).containsOnly(records.ruleId_1, records.ruleId_2); assertThat(service.getRetentionRulesForCategory(records.categoryId_X100, records.subdivId_2)) .containsExactly(records.ruleId_1); assertThat(service.getRetentionRulesForCategory(records.categoryId_X110, records.subdivId_2)) .hasSize(2).containsOnly(records.ruleId_1, records.ruleId_2); assertThat(service.getRetentionRulesForCategory(records.categoryId_X100, records.subdivId_1)) .containsExactly(records.ruleId_2); assertThat(service.getRetentionRulesForCategory(records.categoryId_X110, records.subdivId_1)) .containsExactly(records.ruleId_2); } @Test public void givenCopyRuleTypeAlwaysModifiableWhenDeterminingIfCopyTypeVisibleThenAlwaysTrue() { givenConfig(RMConfigs.COPY_RULE_TYPE_ALWAYS_MODIFIABLE, true); assertThat(service.isCopyStatusInputPossible(records.getFolder_A04())).isTrue(); assertThat(service.isCopyStatusInputPossible(records.getFolder_A10())).isTrue(); assertThat(service.isCopyStatusInputPossible(records.getFolder_A12().setRetentionRuleEntered((String) null))).isTrue(); } @Test public void givenCopyRuleTypeNOTAlwaysModifiableWhenDeterminingIfCopyTypeVisibleThenNotAlwaysTrue() { givenConfig(RMConfigs.COPY_RULE_TYPE_ALWAYS_MODIFIABLE, false); assertThat(service.isCopyStatusInputPossible(records.getFolder_A04())).isFalse(); assertThat(service.isCopyStatusInputPossible(records.getFolder_A10())).isTrue(); } //TODO Ajouter medium type when updating document }