package com.constellio.app.modules.rm.model.calculators.folder; import static java.util.Arrays.asList; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; import java.util.List; import org.joda.time.LocalDate; import org.junit.Test; import org.mockito.Mock; import com.constellio.app.modules.rm.model.CopyRetentionRule; import com.constellio.app.modules.rm.model.CopyRetentionRuleBuilder; import com.constellio.app.modules.rm.model.CopyRetentionRuleBuilderWithDefinedIds; import com.constellio.model.entities.calculators.CalculatorParameters; import com.constellio.model.entities.calculators.CalculatorParametersValidatingDependencies; import com.constellio.sdk.tests.ConstellioTest; public class FolderMainCopyRuleCalculatorTest extends ConstellioTest { @Mock CalculatorParameters parameters; List<CopyRetentionRule> copyRules; List<LocalDate> expectedDepositDates; List<LocalDate> expectedDestructionDates; CopyRetentionRuleBuilder copyBuilder = new CopyRetentionRuleBuilderWithDefinedIds(); @Test public void givenOnlyOneApplicableCopyRuleAndNoInactiveDatesThenReturnThatCopyRule() throws Exception { copyRules = asList(copy("2-2-D")); expectedDepositDates = asList(new LocalDate[] { null }); expectedDestructionDates = asList(new LocalDate[] { null }); assertThat(calculate()).isEqualTo(copy("2-2-D")); } @Test public void givenOnlyMultipleApplicableCopyRulesThenReturnRuleWithSmallestDate() throws Exception { copyRules = asList(copy("1-2-D"), copy("2-888-D"), copy("2-3-D"), copy("2-4-D")); expectedDepositDates = asList(new LocalDate(2015, 1, 1), new LocalDate(2013, 1, 1), null, null); expectedDestructionDates = asList(new LocalDate(2015, 1, 1), null, new LocalDate(2014, 1, 1), null); assertThat(calculate()).isEqualTo(copy("2-888-D")); } @Test public void givenOnlyMultipleApplicableCopyRulesThenReturnRuleWithSmallestDate2() throws Exception { copyRules = asList(copy("1-2-D"), copy("2-888-D"), copy("2-3-D"), copy("2-4-D")); expectedDepositDates = asList(new LocalDate(2015, 1, 1), new LocalDate(2014, 1, 1), null, null); expectedDestructionDates = asList(new LocalDate(2015, 1, 1), null, new LocalDate(2013, 1, 1), null); assertThat(calculate()).isEqualTo(copy("2-3-D")); } @Test public void givenOnlyMultipleApplicableCopyRulesThenReturnRuleWithSmallestDate3() throws Exception { copyRules = asList(copy("1-2-D"), copy("2-888-D"), copy("2-3-D"), copy("2-4-D")); expectedDepositDates = asList(new LocalDate(2012, 1, 1), new LocalDate(2014, 1, 1), null, null); expectedDestructionDates = asList(new LocalDate(2012, 1, 1), null, new LocalDate(2013, 1, 1), null); assertThat(calculate()).isEqualTo(copy("1-2-D")); } //-------------------------------------------- private CopyRetentionRule copy(String delays) { return copyBuilder.newPrincipal(asList("PA", "MD"), delays); } private CopyRetentionRule calculate() { FolderMainCopyRuleCalculator2 calculator = new FolderMainCopyRuleCalculator2(); when(parameters.get(calculator.copyRulesParam)).thenReturn(copyRules); when(parameters.get(calculator.expectedDepositDatesParam)).thenReturn(expectedDepositDates); when(parameters.get(calculator.expectedDestructionDatesParam)).thenReturn(expectedDestructionDates); calculator.calculate(parameters); return calculator.calculate(new CalculatorParametersValidatingDependencies(parameters, calculator)); } }