package de.asideas.crowdsource.util.validation.financinground;
import de.asideas.crowdsource.domain.model.FinancingRoundEntity;
import de.asideas.crowdsource.presentation.FinancingRound;
import de.asideas.crowdsource.repository.FinancingRoundRepository;
import de.asideas.crowdsource.testutil.ValidatorTestUtil;
import org.joda.time.DateTime;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.runners.MockitoJUnitRunner;
import java.util.Collections;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;
@RunWith(MockitoJUnitRunner.class)
public class FinancingRoundNotCollidingValidatorTest {
@Mock
private FinancingRoundRepository financingRoundRepository;
@InjectMocks
private FinancingRoundNotCollidingValidator financingRoundNotCollidingValidator;
@Before
public void init() {
FinancingRoundEntity reference = new FinancingRoundEntity();
reference.setStartDate(new DateTime(2015, 1, 10, 0, 0, 0, 0));
reference.setEndDate(new DateTime(2015, 1, 20, 0, 0, 0, 0));
when(financingRoundRepository.findAll()).thenReturn(Collections.singletonList(reference));
}
@Test
public void testIsValidBefore() throws Exception {
assertTrue(financingRoundNotCollidingValidator.isValid(financingRound(1, 9), ValidatorTestUtil.constraintValidatorContext()));
}
@Test
public void testIsValidAfter() throws Exception {
assertTrue(financingRoundNotCollidingValidator.isValid(financingRound(21, 25), ValidatorTestUtil.constraintValidatorContext()));
}
@Test
public void testIsInValidWhenTouchingAtStart() throws Exception {
assertFalse(financingRoundNotCollidingValidator.isValid(financingRound(1, 10), ValidatorTestUtil.constraintValidatorContext()));
}
@Test
public void testIsInValidWhenTouchingAtEnd() throws Exception {
assertFalse(financingRoundNotCollidingValidator.isValid(financingRound(20, 25), ValidatorTestUtil.constraintValidatorContext()));
}
@Test
public void testIsInValidWhenOverlappingStart() throws Exception {
assertFalse(financingRoundNotCollidingValidator.isValid(financingRound(1, 11), ValidatorTestUtil.constraintValidatorContext()));
}
@Test
public void testIsInValidWhenOverlappingEnd() throws Exception {
assertFalse(financingRoundNotCollidingValidator.isValid(financingRound(19, 25), ValidatorTestUtil.constraintValidatorContext()));
}
@Test
public void testIsInValidWhenInBetween() throws Exception {
assertFalse(financingRoundNotCollidingValidator.isValid(financingRound(11, 19), ValidatorTestUtil.constraintValidatorContext()));
}
FinancingRound financingRound(int startDay, int endDay) {
FinancingRound financingRound = new FinancingRound();
financingRound.setStartDate(new DateTime(2015, 1, startDay, 0, 0, 0, 0));
financingRound.setEndDate(new DateTime(2015, 1, endDay, 0, 0, 0, 0));
return financingRound;
}
}