package com.constellio.app.modules.rm.model.calculators.decommissioningList;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.Mockito.when;
import java.util.ArrayList;
import java.util.List;
import org.joda.time.LocalDate;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import com.constellio.app.modules.rm.model.enums.DecomListStatus;
import com.constellio.app.modules.rm.wrappers.structures.DecomListValidation;
import com.constellio.data.utils.TimeProvider;
import com.constellio.model.entities.calculators.CalculatorParameters;
import com.constellio.model.entities.calculators.CalculatorParametersValidatingDependencies;
import com.constellio.sdk.tests.ConstellioTest;
public class DecomListStatusCalculatorTest extends ConstellioTest {
DecomListStatusCalculator2 calculator;
@Mock CalculatorParameters parameters;
LocalDate processingDate;
LocalDate approvalDate;
LocalDate approvalRequestDate;
List<DecomListValidation> validations;
@Before
public void setUp() {
processingDate = null;
approvalDate = null;
approvalRequestDate = null;
validations = new ArrayList<>();
calculator = new DecomListStatusCalculator2();
}
@Test
public void givenProcessingDateIsSetThenStatusIsProcessed() {
processingDate = TimeProvider.getLocalDate();
assertThat(calculatedValue()).isEqualTo(DecomListStatus.PROCESSED);
}
@Test
public void givenApprovalDateIsSetAndProcessingDateIsNullThenStatusIsApproved() {
approvalDate = TimeProvider.getLocalDate();
assertThat(calculatedValue()).isEqualTo(DecomListStatus.APPROVED);
}
@Test
public void givenPendingValidationRequestsAndApprovalDateIsNullThenStatusIsInValidation() {
validations.add(new DecomListValidation("SOME_ID", TimeProvider.getLocalDate()));
assertThat(calculatedValue()).isEqualTo(DecomListStatus.IN_VALIDATION);
approvalRequestDate = TimeProvider.getLocalDate().minusDays(1);
assertThat(calculatedValue()).isEqualTo(DecomListStatus.IN_VALIDATION);
}
@Test
public void givenApprovalRequestDateIsSetAndValidationsEmptyThenStatusIsInApproval() {
approvalRequestDate = TimeProvider.getLocalDate().minusDays(1);
assertThat(calculatedValue()).isEqualTo(DecomListStatus.IN_APPROVAL);
}
@Test
public void givenApprovalRequestDateIsSetAndValidationsDoneThenStatusIsInApproval() {
validations.add(new DecomListValidation(
"SOME_ID", TimeProvider.getLocalDate().minusDays(1)).setValidationDate(TimeProvider.getLocalDate()));
approvalRequestDate = TimeProvider.getLocalDate();
assertThat(calculatedValue()).isEqualTo(DecomListStatus.IN_APPROVAL);
}
@Test
public void givenValidationsAreDoneAndAllDatesAreNullThenStatusIsValidated() {
validations.add(new DecomListValidation(
"SOME_ID", TimeProvider.getLocalDate().minusDays(1)).setValidationDate(TimeProvider.getLocalDate()));
assertThat(calculatedValue()).isEqualTo(DecomListStatus.VALIDATED);
}
@Test
public void givenAllDatesAreNullAndValidationsEmptyThenStatusIsGenerated() {
assertThat(calculatedValue()).isEqualTo(DecomListStatus.GENERATED);
}
private DecomListStatus calculatedValue() {
when(parameters.get(calculator.processingDate)).thenReturn(processingDate);
when(parameters.get(calculator.approvalDate)).thenReturn(approvalDate);
when(parameters.get(calculator.approvalRequestDate)).thenReturn(approvalRequestDate);
when(parameters.get(calculator.validations)).thenReturn(validations);
return calculator.calculate(new CalculatorParametersValidatingDependencies(parameters, calculator));
}
}