package com.constellio.app.modules.rm.extensions.imports; import static com.constellio.app.modules.rm.model.enums.DisposalType.DESTRUCTION; import static com.constellio.sdk.tests.TestUtils.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.groups.Tuple.tuple; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.junit.Before; import org.junit.Test; import com.constellio.app.modules.rm.model.CopyRetentionRule; import com.constellio.app.modules.rm.model.RetentionPeriod; import com.constellio.app.modules.rm.model.enums.CopyType; import com.constellio.app.modules.rm.model.enums.RetentionRuleScope; import com.constellio.app.modules.rm.services.RMSchemasRecordsServices; import com.constellio.app.modules.rm.wrappers.RetentionRule; import com.constellio.app.services.schemas.bulkImport.data.ImportData; import com.constellio.model.extensions.events.recordsImport.BuildParams; import com.constellio.model.extensions.events.recordsImport.PrevalidationParams; import com.constellio.model.extensions.events.recordsImport.ValidationParams; import com.constellio.model.frameworks.validation.ValidationErrors; import com.constellio.sdk.tests.ConstellioTest; public class RetentionRuleImportExtensionRealTest extends ConstellioTest { public static final String SEMI_ACTIVE_RETENTION_PERIOD_COMMENT = "semiActiveRetentionPeriodComment"; public static final String ACTIVE_RETENTION_PERIOD_COMMENT = "activeRetentionPeriodComment"; public static final String SEMI_ACTIVE_RETENTION_PERIOD = "semiActiveRetentionPeriod"; public static final String INACTIVE_DISPOSAL_COMMENT = "inactiveDisposalComment"; public static final String COPY_RETENTION_RULE_INDEX = "copyRetentionRuleIndex"; public static final String ACTIVE_RETENTION_PERIOD = "activeRetentionPeriod"; public static final String INACTIVE_DISPOSAL_TYPE = "inactiveDisposalType"; public static final String CONTENT_TYPES_COMMENT = "contentTypesComment"; public static final String DOCUMENT_TYPE_INDEX = "documentTypeIndex"; public static final String ARCHIVISTIC_STATUS = "archivisticStatus"; public static final String MEDIUM_TYPES = "mediumTypes"; public static final String COPY_TYPE = "copyType"; public static final String CODE = "code"; public static final String COPY_RET_RULE_ID = "id"; public static final String OPEN_ACTIVE_RETENTION_PERIOD = "openActiveRetentionPeriod"; public static final String ACTIVE_DATE_METADATA = "activeDateMetadata"; public static final String SEMI_ACTIVE_DATE_METADATA = "semiActiveDateMetadata"; public static final String TYPE_ID = "typeId"; private RetentionRuleImportExtension importExtension; private RMSchemasRecordsServices rm; @Before public void setUp() throws Exception { prepareSystem( withZeCollection().withConstellioRMModule() ); importExtension = new RetentionRuleImportExtension(zeCollection, getModelLayerFactory()); rm = new RMSchemasRecordsServices(zeCollection, getAppLayerFactory()); } @Test public void givenRulesWithDifferentValuesAndFieldsThenAllImportedProperly() throws Exception { RetentionRule retentionRule = rm.newRetentionRule(); retentionRule.setScope(RetentionRuleScope.DOCUMENTS); Map<String, Object> importDataMap = new HashMap<String, Object>(); // Two CopyRetentionRules for DOCUMENT_COPY_RETENTION_RULES List<Map<String, String>> docCopyRetRules = new ArrayList<>(); Map<String, String> docCopyRetRule1 = new HashMap<>(); docCopyRetRule1.put(COPY_RET_RULE_ID, "DCR001"); docCopyRetRule1.put(COPY_TYPE, CopyType.PRINCIPAL.getCode()); docCopyRetRule1.put(MEDIUM_TYPES, "P"); docCopyRetRule1.put(ACTIVE_RETENTION_PERIOD, "2"); docCopyRetRule1.put(SEMI_ACTIVE_RETENTION_PERIOD, "3"); docCopyRetRule1.put(INACTIVE_DISPOSAL_TYPE, "D"); //docCopyRetRule1.put(OPEN_ACTIVE_RETENTION_PERIOD,"2"); This is optional, testing case where it's absent. //docCopyRetRule1.put(ACTIVE_DATE_METADATA,""); This is optional, testing case where it's absent. //docCopyRetRule1.put(SEMI_ACTIVE_DATE_METADATA,""); This is optional, testing case where it's absent. docCopyRetRule1.put(TYPE_ID, "DocType1"); Map<String, String> docCopyRetRule2 = new HashMap<>(); docCopyRetRule2.put(COPY_RET_RULE_ID, "DCR002"); docCopyRetRule2.put(COPY_TYPE, CopyType.PRINCIPAL.getCode()); docCopyRetRule2.put(MEDIUM_TYPES, "P"); docCopyRetRule2.put(ACTIVE_RETENTION_PERIOD, "2"); docCopyRetRule2.put(SEMI_ACTIVE_RETENTION_PERIOD, "3"); docCopyRetRule2.put(INACTIVE_DISPOSAL_TYPE, "D"); //docCopyRetRule2.put(OPEN_ACTIVE_RETENTION_PERIOD,"2"); This is optional, testing case where it's absent. //docCopyRetRule2.put(ACTIVE_DATE_METADATA,"dateMeta"); This is optional, testing case where it's absent. //docCopyRetRule2.put(SEMI_ACTIVE_DATE_METADATA,"dateMeta"); This is optional, testing case where it's absent. docCopyRetRule2.put(TYPE_ID, "DocType2"); docCopyRetRules.add(docCopyRetRule1); docCopyRetRules.add(docCopyRetRule2); // One CopyRetRule for PRINCIPAL_DEFAULT_DOCUMENT_COPY_RETENTION_RULE Map<String, String> princDefaultDocCopyRetRule = new HashMap<>(); princDefaultDocCopyRetRule.put(COPY_RET_RULE_ID, "DCR003"); princDefaultDocCopyRetRule.put(COPY_TYPE, CopyType.PRINCIPAL.getCode()); princDefaultDocCopyRetRule.put(MEDIUM_TYPES, "P"); princDefaultDocCopyRetRule.put(ACTIVE_RETENTION_PERIOD, "2"); princDefaultDocCopyRetRule.put(SEMI_ACTIVE_RETENTION_PERIOD, "3"); princDefaultDocCopyRetRule.put(INACTIVE_DISPOSAL_TYPE, "D"); princDefaultDocCopyRetRule.put(OPEN_ACTIVE_RETENTION_PERIOD, "2"); princDefaultDocCopyRetRule.put(ACTIVE_DATE_METADATA, "dateMeta1"); princDefaultDocCopyRetRule.put(SEMI_ACTIVE_DATE_METADATA, "dateMeta2"); princDefaultDocCopyRetRule.put(TYPE_ID, "DocType3"); // One CopyRetRule for SECONDARY_DEFAULT_DOCUMENT_COPY_RETENTION_RULE Map<String, String> secDefaultDocCopyRetRule = new HashMap<>(); //secDefaultDocCopyRetRule.put(COPY_RET_RULE_ID,"DCR004"); Testing case where ID is generated secDefaultDocCopyRetRule.put(COPY_TYPE, CopyType.PRINCIPAL.getCode()); secDefaultDocCopyRetRule.put(MEDIUM_TYPES, "P"); secDefaultDocCopyRetRule.put(ACTIVE_RETENTION_PERIOD, "2"); secDefaultDocCopyRetRule.put(SEMI_ACTIVE_RETENTION_PERIOD, "3"); secDefaultDocCopyRetRule.put(INACTIVE_DISPOSAL_TYPE, "D"); secDefaultDocCopyRetRule.put(TYPE_ID, "DocType4"); importDataMap.put(RetentionRule.DOCUMENT_COPY_RETENTION_RULES, docCopyRetRules); importDataMap.put(RetentionRule.PRINCIPAL_DEFAULT_DOCUMENT_COPY_RETENTION_RULE, princDefaultDocCopyRetRule); importDataMap.put(RetentionRule.SECONDARY_DEFAULT_DOCUMENT_COPY_RETENTION_RULE, secDefaultDocCopyRetRule); ImportData importData = new ImportData(1, retentionRule.getSchemaCode(), "zeLegacyId", importDataMap); BuildParams buildParams = new BuildParams(retentionRule.getWrappedRecord(), rm.getTypes(), importData); importExtension.build(buildParams); RetentionRule rule = rm.wrapRetentionRule(buildParams.getRecord()); List<CopyRetentionRule> docCopyRetRulesBuilt = rule.getDocumentCopyRetentionRules(); assertThat(docCopyRetRulesBuilt).hasSize(2); CopyRetentionRule princCopyRetRuleBuilt = rule.getPrincipalDefaultDocumentCopyRetentionRule(); assertThat(princCopyRetRuleBuilt.getId()).isEqualTo("DCR003"); assertThat(princCopyRetRuleBuilt.getOpenActiveRetentionPeriod()).isEqualTo(2); assertThat(princCopyRetRuleBuilt.getActiveDateMetadata()).isEqualTo("dateMeta1"); assertThat(princCopyRetRuleBuilt.getSemiActiveDateMetadata()).isEqualTo("dateMeta2"); assertThat(princCopyRetRuleBuilt.getTypeId()).isEqualTo("DocType3"); CopyRetentionRule secCopyRetRuleBuilt = rule.getSecondaryDefaultDocumentCopyRetentionRule(); assertThat(secCopyRetRuleBuilt.getId()).isNotNull(); assertThat(secCopyRetRuleBuilt.getOpenActiveRetentionPeriod()).isNull(); assertThat(secCopyRetRuleBuilt.getActiveDateMetadata()).isNull(); assertThat(secCopyRetRuleBuilt.getSemiActiveDateMetadata()).isNull(); assertThat(secCopyRetRuleBuilt.getTypeId()).isEqualTo("DocType4"); } @Test public void givenRulesWithEmptyCopyRulesThenOK() throws Exception { RetentionRule retentionRule = rm.newRetentionRule(); Map<String, Object> importDataMap = new HashMap<String, Object>(); // Two CopyRetentionRules for DOCUMENT_COPY_RETENTION_RULES List<Map<String, String>> copyRules = new ArrayList<>(); Map<String, String> copyRule1 = new HashMap<>(); copyRule1.put(CODE, "1"); copyRule1.put(COPY_TYPE, CopyType.PRINCIPAL.getCode()); copyRule1.put(MEDIUM_TYPES, "PA"); copyRule1.put(ACTIVE_RETENTION_PERIOD, "2"); copyRule1.put(SEMI_ACTIVE_RETENTION_PERIOD, "3"); copyRule1.put(INACTIVE_DISPOSAL_TYPE, "D"); //docCopyRetRule1.put(OPEN_ACTIVE_RETENTION_PERIOD,"2"); This is optional, testing case where it's absent. //docCopyRetRule1.put(ACTIVE_DATE_METADATA,""); This is optional, testing case where it's absent. //docCopyRetRule1.put(SEMI_ACTIVE_DATE_METADATA,""); This is optional, testing case where it's absent. copyRule1.put(TYPE_ID, "DocType1"); Map<String, String> copyRule2 = new HashMap<>(); copyRule2.put(CODE, "2"); copyRule2.put(COPY_TYPE, CopyType.SECONDARY.getCode()); copyRule2.put(MEDIUM_TYPES, "DM"); copyRule2.put(ACTIVE_RETENTION_PERIOD, "1"); copyRule2.put(SEMI_ACTIVE_RETENTION_PERIOD, "4"); copyRule2.put(INACTIVE_DISPOSAL_TYPE, "D"); copyRule2.put(TYPE_ID, "DocType2"); Map<String, String> copyRule3 = new HashMap<>(); copyRule3.put(CODE, ""); copyRule3.put(COPY_TYPE, ""); copyRule3.put(MEDIUM_TYPES, ""); copyRule3.put(ACTIVE_RETENTION_PERIOD, ""); copyRule3.put(SEMI_ACTIVE_RETENTION_PERIOD, ""); copyRule3.put(INACTIVE_DISPOSAL_TYPE, ""); copyRule3.put(TYPE_ID, ""); Map<String, String> copyRule4 = new HashMap<>(); copyRule4.put(CODE, "3"); copyRule4.put(COPY_TYPE, CopyType.PRINCIPAL.getCode()); copyRule4.put(MEDIUM_TYPES, "DM"); copyRule4.put(ACTIVE_RETENTION_PERIOD, "6"); copyRule4.put(SEMI_ACTIVE_RETENTION_PERIOD, "6"); copyRule4.put(INACTIVE_DISPOSAL_TYPE, "D"); copyRule4.put(TYPE_ID, "DocType2"); Map<String, String> copyRule5 = new HashMap<>(); copyRule5.put(CODE, null); copyRule5.put(COPY_TYPE, null); copyRule5.put(MEDIUM_TYPES, null); copyRule5.put(ACTIVE_RETENTION_PERIOD, null); copyRule5.put(SEMI_ACTIVE_RETENTION_PERIOD, null); copyRule5.put(INACTIVE_DISPOSAL_TYPE, null); copyRule5.put(TYPE_ID, null); Map<String, String> copyRule6 = new HashMap<>(); copyRule6.put(CODE, "null"); copyRule6.put(COPY_TYPE, "null"); copyRule6.put(MEDIUM_TYPES, "null"); copyRule6.put(ACTIVE_RETENTION_PERIOD, "NULL"); copyRule6.put(SEMI_ACTIVE_RETENTION_PERIOD, "null"); copyRule6.put(INACTIVE_DISPOSAL_TYPE, "null"); copyRule6.put(TYPE_ID, "null"); copyRules.add(copyRule1); copyRules.add(copyRule2); copyRules.add(copyRule3); copyRules.add(copyRule4); copyRules.add(copyRule5); copyRules.add(copyRule6); importDataMap.put(RetentionRule.COPY_RETENTION_RULES, copyRules); ValidationErrors errors = new ValidationErrors(); ImportData importData = new ImportData(1, retentionRule.getSchemaCode(), "zeLegacyId", importDataMap); importExtension.prevalidate(new PrevalidationParams(errors, importData)); importExtension.validate(new ValidationParams(errors, importData)); importExtension.build(new BuildParams(retentionRule.getWrappedRecord(), rm.getTypes(), importData)); assertThat(asList(retentionRule.getSecondaryCopy())).extracting("code", "activeRetentionPeriod", "semiActiveRetentionPeriod", "inactiveDisposalType").containsOnly( tuple("2", RetentionPeriod.fixed(1), RetentionPeriod.fixed(4), DESTRUCTION) ); assertThat(retentionRule.getPrincipalCopies()).extracting("code", "activeRetentionPeriod", "semiActiveRetentionPeriod", "inactiveDisposalType").containsOnly( tuple("1", RetentionPeriod.fixed(2), RetentionPeriod.fixed(3), DESTRUCTION), tuple("3", RetentionPeriod.fixed(6), RetentionPeriod.fixed(6), DESTRUCTION) ); // CopyRetentionRule princCopyRetRuleBuilt = rule.getPrincipalCopies(); // assertThat(princCopyRetRuleBuilt.getId()).isEqualTo("DCR003"); // assertThat(princCopyRetRuleBuilt.getOpenActiveRetentionPeriod()).isEqualTo(2); // assertThat(princCopyRetRuleBuilt.getActiveDateMetadata()).isEqualTo("dateMeta1"); // assertThat(princCopyRetRuleBuilt.getSemiActiveDateMetadata()).isEqualTo("dateMeta2"); // assertThat(princCopyRetRuleBuilt.getTypeId()).isEqualTo("DocType3"); // // CopyRetentionRule secCopyRetRuleBuilt = rule.getSecondaryDefaultDocumentCopyRetentionRule(); // assertThat(secCopyRetRuleBuilt.getId()).isNotNull(); // assertThat(secCopyRetRuleBuilt.getOpenActiveRetentionPeriod()).isNull(); // assertThat(secCopyRetRuleBuilt.getActiveDateMetadata()).isNull(); // assertThat(secCopyRetRuleBuilt.getSemiActiveDateMetadata()).isNull(); // assertThat(secCopyRetRuleBuilt.getTypeId()).isEqualTo("DocType4"); } }