package com.constellio.app.modules.rm.model; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import java.util.List; import org.junit.Test; import com.constellio.app.modules.rm.model.CopyRetentionRuleFactoryRuntimeException.CopyRetentionRuleFactoryRuntimeException_CannotModifyId; import com.constellio.app.modules.rm.model.enums.CopyType; import com.constellio.app.modules.rm.model.enums.DisposalType; import com.constellio.sdk.tests.ConstellioTest; public class CopyRetentionRuleTest extends ConstellioTest { CopyRetentionRuleFactory factory = new CopyRetentionRuleFactory(); CopyRetentionRuleBuilder copyBuilder = CopyRetentionRuleBuilder.UUID(); @Test public void whenSetAttributeValueThenBecomeDirty() { CopyRetentionRule rule = new CopyRetentionRule(); assertThat(rule.isDirty()).isFalse(); rule.setId("zeId"); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setCode("zeCode:\n\tline2"); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setCopyType(CopyType.PRINCIPAL); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setMediumTypeIds(asList("firstType", "secondType")); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setContentTypesComment("zeContentTypesComment"); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setActiveRetentionPeriod(RetentionPeriod.OPEN_888); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setActiveRetentionComment("zeActive_RétentionComment"); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setSemiActiveRetentionPeriod(RetentionPeriod.OPEN_999); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setSemiActiveRetentionComment("zeSemi=;ActiveRetention-Comment"); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setInactiveDisposalType(DisposalType.DESTRUCTION); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setInactiveDisposalComment("zeInactive:Disposable\nComment"); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setTypeId("zeDocumentTypeId"); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setActiveDateMetadata("codeActiveDate"); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setSemiActiveDateMetadata("codeSemiActiveDate"); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setEssential(false); assertThat(rule.isDirty()).isTrue(); rule = new CopyRetentionRule(); rule.setEssential(true); assertThat(rule.isDirty()).isTrue(); } @Test public void whenConvertingStructureWithCommentsAndCodeThenRemainsEqual() throws Exception { CopyRetentionRule rule = new CopyRetentionRule(); rule.setId("zeId"); rule.setCode("zeCode:\n\tline2"); rule.setCopyType(CopyType.PRINCIPAL); rule.setMediumTypeIds(asList("firstType", "secondType")); rule.setContentTypesComment("zeContentTypesComment"); rule.setActiveRetentionPeriod(RetentionPeriod.OPEN_888); rule.setActiveRetentionComment("zeActive_RétentionComment"); rule.setSemiActiveRetentionPeriod(RetentionPeriod.OPEN_999); rule.setSemiActiveRetentionComment("zeSemi=;ActiveRetention-Comment"); rule.setInactiveDisposalType(DisposalType.DESTRUCTION); rule.setInactiveDisposalComment("zeInactive:Disposable\nComment"); rule.setTypeId("zeDocumentTypeId"); rule.setActiveDateMetadata("codeActiveDate"); rule.setSemiActiveDateMetadata("codeSemiActiveDate"); String stringValue = factory.toString(rule); CopyRetentionRule builtRule = (CopyRetentionRule) factory.build(stringValue); String stringValue2 = factory.toString(builtRule); assertThat(builtRule).isEqualTo(rule); assertThat(stringValue2).isEqualTo(stringValue); assertThat(builtRule.isDirty()).isFalse(); assertThat(builtRule.isEssential()).isFalse(); } @Test public void whenConvertingStructureWithNullStatusAndCodeThenRemainsEqual() throws Exception { CopyRetentionRule rule = new CopyRetentionRule(); rule.setId("zeId"); rule.setCode("zeCode:\n\tline2"); rule.setCopyType(CopyType.PRINCIPAL); rule.setMediumTypeIds(asList("firstType", "secondType")); rule.setContentTypesComment("zeContentTypesComment"); rule.setActiveRetentionPeriod(null); rule.setActiveRetentionComment("zeActive_RétentionComment"); rule.setSemiActiveRetentionPeriod(null); rule.setSemiActiveRetentionComment("zeSemi=;ActiveRetention-Comment"); rule.setInactiveDisposalType(DisposalType.DESTRUCTION); rule.setInactiveDisposalComment("zeInactive:Disposable\nComment"); rule.setTypeId("zeDocumentTypeId"); rule.setActiveDateMetadata("codeActiveDate"); rule.setSemiActiveDateMetadata("codeSemiActiveDate"); rule.setEssential(true); String stringValue = factory.toString(rule); CopyRetentionRule builtRule = (CopyRetentionRule) factory.build(stringValue); String stringValue2 = factory.toString(builtRule); assertThat(builtRule).isEqualTo(rule); assertThat(stringValue2).isEqualTo(stringValue); assertThat(builtRule.isDirty()).isFalse(); assertThat(builtRule.getActiveRetentionPeriod()).isSameAs(RetentionPeriod.ZERO); assertThat(builtRule.getSemiActiveRetentionPeriod()).isSameAs(RetentionPeriod.ZERO); assertThat(builtRule.getInactiveDisposalType()).isEqualTo(DisposalType.DESTRUCTION); assertThat(builtRule.isEssential()).isTrue(); } @Test public void whenConvertingStructureVersion1WithoutDisposalTypeThenSetToDestruction() throws Exception { String strValue = "~null~:S:~null~:F1:~null~:F2:~null~:R1:firstType:secondType:thirdType"; String strValue2 = "~null~:S:~null~:F1:~null~:F2:~null~:~null~:firstType:secondType:thirdType"; CopyRetentionRule rule1 = (CopyRetentionRule) factory.build(strValue); CopyRetentionRule rule2 = (CopyRetentionRule) factory.build(strValue2); assertThat(rule1.getInactiveDisposalType()).isEqualTo(DisposalType.DESTRUCTION); assertThat(rule1.getInactiveDisposalComment()).isEqualTo("R1"); assertThat(rule2.getInactiveDisposalType()).isEqualTo(DisposalType.DESTRUCTION); assertThat(rule2.getInactiveDisposalComment()).isNull(); } @Test public void whenConvertingStructureVersion2WithoutDisposalTypeThenSetToDestruction() throws Exception { String strValue = "version2:~null~:S:~null~:F1:~null~:F2:~null~:R1:zeDocumentTypeId:codeActiveDate:codeSemiActiveDate:firstType:secondType:thirdType"; String strValue2 = "version2:~null~:S:~null~:F1:~null~:F2:~null~:~null~:zeDocumentTypeId:codeActiveDate:codeSemiActiveDate:firstType:secondType:thirdType"; CopyRetentionRule rule1 = (CopyRetentionRule) factory.build(strValue); CopyRetentionRule rule2 = (CopyRetentionRule) factory.build(strValue2); assertThat(rule1.getInactiveDisposalType()).isEqualTo(DisposalType.DESTRUCTION); assertThat(rule1.getInactiveDisposalComment()).isEqualTo("R1"); assertThat(rule1.getOpenActiveRetentionPeriod()).isNull(); assertThat(rule2.getInactiveDisposalType()).isEqualTo(DisposalType.DESTRUCTION); assertThat(rule2.getInactiveDisposalComment()).isNull(); assertThat(rule2.getOpenActiveRetentionPeriod()).isNull(); } @Test public void whenConvertingStructureThenCorrectInfos() throws Exception { String strValue = "375:P:~null~:888::888::T:~null~:00000000003:00000000001"; CopyRetentionRule rule1 = (CopyRetentionRule) factory.build(strValue); assertThat(rule1.getCode()).isEqualTo("375"); assertThat(rule1.getCopyType()).isEqualTo(CopyType.PRINCIPAL); assertThat(rule1.getMediumTypeIds()).isEqualTo(asList("00000000003", "00000000001")); assertThat(rule1.getActiveRetentionPeriod()).isEqualTo(RetentionPeriod.OPEN_888); assertThat(rule1.getSemiActiveRetentionPeriod()).isEqualTo(RetentionPeriod.OPEN_888); assertThat(rule1.getInactiveDisposalType()).isEqualTo(DisposalType.SORT); assertThat(rule1.getActiveRetentionComment()).isNull(); assertThat(rule1.getSemiActiveRetentionComment()).isNull(); assertThat(rule1.getInactiveDisposalComment()).isNull(); assertThat(rule1.getTypeId()).isNull(); assertThat(rule1.getActiveDateMetadata()).isNull(); assertThat(rule1.getSemiActiveDateMetadata()).isNull(); assertThat(rule1.getOpenActiveRetentionPeriod()).isNull(); assertThat(rule1.isEssential()).isFalse(); } @Test public void whenConvertingStructureVersion2ThenCorrectInfos() throws Exception { String strValue = "version2:375:P:~null~:888::888::T:~null~:zeDocumentTypeId:codeActiveDate:codeSemiActiveDate:00000000003:00000000001"; CopyRetentionRule rule1 = (CopyRetentionRule) factory.build(strValue); assertThat(rule1.getCode()).isEqualTo("375"); assertThat(rule1.getCopyType()).isEqualTo(CopyType.PRINCIPAL); assertThat(rule1.getMediumTypeIds()).isEqualTo(asList("00000000003", "00000000001")); assertThat(rule1.getActiveRetentionPeriod()).isEqualTo(RetentionPeriod.OPEN_888); assertThat(rule1.getSemiActiveRetentionPeriod()).isEqualTo(RetentionPeriod.OPEN_888); assertThat(rule1.getInactiveDisposalType()).isEqualTo(DisposalType.SORT); assertThat(rule1.getActiveRetentionComment()).isNull(); assertThat(rule1.getSemiActiveRetentionComment()).isNull(); assertThat(rule1.getInactiveDisposalComment()).isNull(); assertThat(rule1.getTypeId()).isEqualTo("zeDocumentTypeId"); assertThat(rule1.getActiveDateMetadata()).isEqualTo("codeActiveDate"); assertThat(rule1.getSemiActiveDateMetadata()).isEqualTo("codeSemiActiveDate"); assertThat(rule1.getOpenActiveRetentionPeriod()).isNull(); assertThat(rule1.isEssential()).isFalse(); } @Test public void whenConvertingStructureWithoutCommentsAndCodeThenRemainsEqual() throws Exception { CopyRetentionRule rule = new CopyRetentionRule(); rule.setId("zeId"); rule.setCopyType(CopyType.SECONDARY); rule.setMediumTypeIds(asList("firstType", "secondType", "thirdType")); rule.setActiveRetentionPeriod(RetentionPeriod.fixed(1)); rule.setSemiActiveRetentionPeriod(RetentionPeriod.fixed(2)); rule.setInactiveDisposalType(DisposalType.SORT); String stringValue = factory.toString(rule); System.out.println(stringValue); CopyRetentionRule builtRule = (CopyRetentionRule) factory.build(stringValue); String stringValue2 = factory.toString(builtRule); assertThat(builtRule).isEqualTo(rule); assertThat(stringValue2).isEqualTo(stringValue); } @Test public void whenCreateCopyRetentionRuleWithEmptyPeriodsThenSetToNull() throws Exception { CopyRetentionRule rule = copyBuilder.newRetentionRule(CopyType.PRINCIPAL, asList("PA", "FI"), "888-0-"); assertThat(rule.getActiveRetentionPeriod()).isEqualTo(RetentionPeriod.OPEN_888); assertThat(rule.getSemiActiveRetentionPeriod()).isSameAs(RetentionPeriod.ZERO); assertThat(rule.getInactiveDisposalType()).isNull(); rule = copyBuilder.newRetentionRule(CopyType.PRINCIPAL, asList("PA", "FI"), "0-2-"); assertThat(rule.getActiveRetentionPeriod()).isSameAs(RetentionPeriod.ZERO); assertThat(rule.getSemiActiveRetentionPeriod()).isEqualTo(RetentionPeriod.fixed(2)); assertThat(rule.getInactiveDisposalType()).isNull(); rule = copyBuilder.newRetentionRule(CopyType.PRINCIPAL, asList("PA", "FI"), "0-0-"); assertThat(rule.getActiveRetentionPeriod()).isSameAs(RetentionPeriod.ZERO); assertThat(rule.getSemiActiveRetentionPeriod()).isSameAs(RetentionPeriod.ZERO); assertThat(rule.getInactiveDisposalType()).isNull(); rule = copyBuilder.newRetentionRule(CopyType.PRINCIPAL, asList("PA", "FI"), "0-0-T"); assertThat(rule.getActiveRetentionPeriod()).isSameAs(RetentionPeriod.ZERO); assertThat(rule.getSemiActiveRetentionPeriod()).isSameAs(RetentionPeriod.ZERO); assertThat(rule.getInactiveDisposalType()).isEqualTo(DisposalType.SORT); } @Test public void whenConvertingCopyRetentionRuleWithOpenActivePeriodThenPersisted() throws Exception { CopyRetentionRule copyRuleWithZeroOpenActivePeriod = copyBuilder.newRetentionRule(CopyType.PRINCIPAL, asList("PA", "FI"), "888-0-").setOpenActiveRetentionPeriod(0); CopyRetentionRule copyRuleWithZeroOneYearActivePeriod = copyBuilder.newRetentionRule(CopyType.PRINCIPAL, asList("PA", "FI"), "888-0-").setOpenActiveRetentionPeriod(1); CopyRetentionRule copyRuleWithNullActivePeriod = copyBuilder.newRetentionRule(CopyType.PRINCIPAL, asList("PA", "FI"), "888-0-").setOpenActiveRetentionPeriod(null); copyRuleWithZeroOpenActivePeriod = (CopyRetentionRule) factory.build(factory.toString(copyRuleWithZeroOpenActivePeriod)); copyRuleWithZeroOneYearActivePeriod = (CopyRetentionRule) factory .build(factory.toString(copyRuleWithZeroOneYearActivePeriod)); copyRuleWithNullActivePeriod = (CopyRetentionRule) factory .build(factory.toString(copyRuleWithNullActivePeriod)); assertThat(copyRuleWithZeroOpenActivePeriod.getOpenActiveRetentionPeriod()).isEqualTo(0); assertThat(copyRuleWithZeroOneYearActivePeriod.getOpenActiveRetentionPeriod()).isEqualTo(1); assertThat(copyRuleWithNullActivePeriod.getOpenActiveRetentionPeriod()).isNull(); } @Test public void whenEvaluateDecommissioningActionsThenBasedOnTypes() throws Exception { List<String> types = asList("PA", "FI"); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-0-D").canTransferToSemiActive()).isFalse(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-0-D").canDeposit()).isFalse(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-0-D").canDestroy()).isTrue(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-0-D").canSort()).isFalse(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-2-T").canTransferToSemiActive()).isTrue(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-2-T").canDeposit()).isTrue(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-2-T").canDestroy()).isTrue(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-2-T").canSort()).isTrue(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-2-C").canTransferToSemiActive()).isTrue(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-2-C").canDeposit()).isTrue(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-2-C").canDestroy()).isFalse(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-2-C").canSort()).isFalse(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-2-").canTransferToSemiActive()).isTrue(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-2-").canDeposit()).isFalse(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-2-").canDestroy()).isFalse(); assertThat(copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-2-").canSort()).isFalse(); } @Test(expected = CopyRetentionRuleFactoryRuntimeException_CannotModifyId.class) public void whenModifyIdThenException() throws Exception { List<String> types = asList("PA", "FI"); CopyRetentionRule copyRetentionRule = copyBuilder.newRetentionRule(CopyType.PRINCIPAL, types, "888-0-D").setId("newId"); factory.toString(copyRetentionRule); } }