package com.constellio.app.modules.rm.model.calculators; import com.constellio.model.entities.calculators.CalculatorParameters; import com.constellio.model.entities.calculators.CalculatorParametersValidatingDependencies; import com.constellio.sdk.tests.ConstellioTest; import org.joda.time.LocalDate; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import static com.constellio.app.modules.rm.model.enums.DecommissioningDateBasedOn.CLOSE_DATE; import static com.constellio.app.modules.rm.model.enums.DecommissioningDateBasedOn.OPEN_DATE; import static com.constellio.app.modules.rm.model.enums.FolderStatus.*; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.when; public class FolderDecommissioningDateCalculatorTest extends ConstellioTest { @Mock CalculatorParameters parameters; LocalDate november3_2012 = new LocalDate(2012, 11, 3); LocalDate november4_2012 = new LocalDate(2012, 11, 4); LocalDate november5_2012 = new LocalDate(2012, 11, 5); LocalDate november3_2013 = new LocalDate(2013, 11, 3); LocalDate december13_2013 = new LocalDate(2013, 11, 13); LocalDate december13_2014 = new LocalDate(2014, 11, 13); LocalDate december13_2015 = new LocalDate(2014, 11, 13); LocalDate may30_2013 = new LocalDate(2013, 5, 30); LocalDate may31_2013 = new LocalDate(2013, 5, 31); LocalDate may31_2014 = new LocalDate(2014, 5, 31); LocalDate may31_2015 = new LocalDate(2015, 5, 31); LocalDate april16_2014 = new LocalDate(2014, 4, 16); LocalDate april16_2015 = new LocalDate(2015, 4, 16); FolderDecommissioningDateCalculator2 calculator = new FolderDecommissioningDateCalculator2(); int confiRequiredDaysBeforeYearEnd = 90; String configYearEnd = "05/31"; @Before public void setUp() throws Exception { when(parameters.get(calculator.configRequiredDaysBeforeYearEndParam)).thenReturn(confiRequiredDaysBeforeYearEnd); when(parameters.get(calculator.configYearEndParam)).thenReturn(configYearEnd); } @Test public void givenDecommissioningDateBasedOnOpenDateWhenCalculatingOnActiveFolderThenReturnOpenDateAtEndOfYear() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(OPEN_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(ACTIVE); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(december13_2013); assertThat(calculate()).isEqualTo(may31_2013); } @Test public void givenDecommissioningDateBasedOnOpenDateWhenCalculatingOnActiveFolderWithOpenDateAtEndOfYearThenReturnSameDate() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(OPEN_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(ACTIVE); when(parameters.get(calculator.openingDateParam)).thenReturn(may31_2013); when(parameters.get(calculator.closingDateParam)).thenReturn(december13_2013); assertThat(calculate()).isEqualTo(may31_2013); } @Test public void givenDecommissioningDateBasedOnOpenDateWithInsufficientRequiredPeriodBeforeEndOfYearWhenCalculatingOnActiveFolderThenReturnOpenDateAtEndOfNextYear() throws Exception { when(parameters.get(calculator.configRequiredDaysBeforeYearEndParam)).thenReturn(180); when(parameters.get(calculator.configYearEndParam)).thenReturn("04/16"); when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(OPEN_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(ACTIVE); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(december13_2013); assertThat(calculate()).isEqualTo(april16_2014); } @Test public void givenDecommissioningDateBasedOnCloseDateWhenCalculatingOnActiveFolderThenReturnCloseDate() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(CLOSE_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(ACTIVE); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(may31_2013); assertThat(calculate()).isEqualTo(may31_2013); } @Test public void givenDecommissioningDateBasedOnCloseDateAndNullDateWhenCalculatingOnActiveFolderThenReturnNull() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(CLOSE_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(ACTIVE); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(null); when(parameters.get(calculator.actualTransferDateParam)).thenReturn(null); assertThat(calculate()).isNull(); } @Test public void givenDecommissioningDateBasedOnCloseDateWhenCalculatingOnActiveFolderWithCloseDateNotAtEndOfYEarWithSufficientPeriod() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(CLOSE_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(ACTIVE); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(november3_2013); assertThat(calculate()).isEqualTo(may31_2014); } @Test public void givenDecommissioningDateBasedOnCloseDateWhenCalculatingOnActiveFolderWithCloseDateNotAtEndOfYEarWithInufficientPeriod() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(CLOSE_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(ACTIVE); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(may30_2013); assertThat(calculate()).isEqualTo(may31_2014); } @Test public void givenDecommissioningDateBasedOnCloseDateWhenCalculatingOnSemiActiveFolderThenReturnTransferDateAtYearEnd() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(CLOSE_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(SEMI_ACTIVE); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(november4_2012); when(parameters.get(calculator.actualTransferDateParam)).thenReturn(december13_2013); assertThat(calculate()).isEqualTo(may31_2014); } @Test public void givenDecommissioningDateBasedOnCloseDateWhenCalculatingOnSemiActiveFolderWithTransferDateAtYearThenReturnTransferDate() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(CLOSE_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(SEMI_ACTIVE); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(november4_2012); when(parameters.get(calculator.actualTransferDateParam)).thenReturn(may31_2014); assertThat(calculate()).isEqualTo(may31_2014); } @Test public void givenDecommissioningDateBasedOnCloseDateWhenCalculatingOnActiveFolderWithTransferDateThenReturnTransferDateAtEndOfNextYear() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(CLOSE_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(ACTIVE); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(november4_2012); when(parameters.get(calculator.actualTransferDateParam)).thenReturn(december13_2013); assertThat(calculate()).isEqualTo(may31_2014); } @Test public void givenDecommissioningDateBasedOnCloseDateWhenCalculatingOnActiveFolderWithTransferDateWithInsufficientPeriodBeforeEnfOfYEarThenReturnTransferDateAAtEndOfNextYear() throws Exception { when(parameters.get(calculator.configRequiredDaysBeforeYearEndParam)).thenReturn(180); when(parameters.get(calculator.configYearEndParam)).thenReturn("04/16"); when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(CLOSE_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(ACTIVE); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(november4_2012); when(parameters.get(calculator.actualTransferDateParam)).thenReturn(december13_2013); assertThat(calculate()).isEqualTo(april16_2015); } @Test public void givenDecommissioningDateBasedOnCloseDateWhenCalculatingOnDepositedFolderThenReturnCloseDate() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(CLOSE_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(INACTIVE_DEPOSITED); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(november4_2012); when(parameters.get(calculator.actualTransferDateParam)).thenReturn(december13_2013); assertThat(calculate()).isEqualTo(may31_2013); } @Test public void givenDecommissioningDateBasedOnOpenDateWhenCalculatingOnDepositedFolderThenReturnOpenDate() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(OPEN_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(INACTIVE_DEPOSITED); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(may31_2014); when(parameters.get(calculator.actualTransferDateParam)).thenReturn(december13_2014); assertThat(calculate()).isEqualTo(may31_2013); } @Test public void givenDecommissioningDateBasedOnCloseDateWhenCalculatingOnDestroyedFolderThenReturnCloseDate() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(CLOSE_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(INACTIVE_DESTROYED); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(may31_2013); when(parameters.get(calculator.actualTransferDateParam)).thenReturn(december13_2014); assertThat(calculate()).isEqualTo(may31_2013); } @Test public void givenDecommissioningDateBasedOnOpenDateWhenCalculatingOnDestroyedFolderThenReturnOpenDate() throws Exception { when(parameters.get(calculator.decommissioningDateBasedOnParam)).thenReturn(OPEN_DATE); when(parameters.get(calculator.folderStatusParam)).thenReturn(INACTIVE_DESTROYED); when(parameters.get(calculator.openingDateParam)).thenReturn(november3_2012); when(parameters.get(calculator.closingDateParam)).thenReturn(may31_2014); when(parameters.get(calculator.actualTransferDateParam)).thenReturn(december13_2015); assertThat(calculate()).isEqualTo(may31_2013); } private LocalDate calculate() { return calculator.calculate(new CalculatorParametersValidatingDependencies(parameters, calculator)); } }