package br.com.caelum.stella.validation.ie;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import org.junit.Test;
import org.mockito.Mockito;
import br.com.caelum.stella.MessageProducer;
import br.com.caelum.stella.validation.InvalidStateException;
import br.com.caelum.stella.validation.Validator;
import br.com.caelum.stella.validation.error.IEError;
public class IEParanaValidatorTest extends IEValidatorTest {
public IEParanaValidatorTest() {
super(wrongFirstCheckDigitUnformattedString, validUnformattedString, validFormattedString, validValues);
}
private static final String wrongFirstCheckDigitUnformattedString = "1234567860";
private static final String wrongSecondCheckDigitUnformattedString = "1234567859";
private static final String validUnformattedString = "1234567850";
private static final String validFormattedString = "099.00004-09";
private static final String[] validValues = { "099.00004-09", "123.45678-50", "826.01749-09", "902.33203-01",
"738.00291-16", "738.00294-69", "738.00302-03", "738.00313-66", "738.00338-14", "738.00348-96", "90258216-93"};
@Override
protected Validator<String> getValidator(MessageProducer messageProducer, boolean isFormatted) {
return new IEParanaValidator(messageProducer, isFormatted);
}
@Test
public void shouldNotValidateIEWithSecondCheckDigitWrong() {
Validator<String> validator = getValidator(messageProducer, false);
try {
validator.assertValid(wrongSecondCheckDigitUnformattedString);
fail();
} catch (InvalidStateException e) {
assertTrue(e.getInvalidMessages().size() == 1);
}
Mockito.verify(messageProducer, Mockito.times(1)).getMessage(IEError.INVALID_CHECK_DIGITS);
}
}