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 IEMinasGeraisValidatorTest extends IEValidatorTest {
public IEMinasGeraisValidatorTest() {
super(wrongFirstCheckDigitUnformattedString, validUnformattedString, validFormattedString, validValues);
}
private static final String wrongFirstCheckDigitUnformattedString = "0623079040045";
private static final String wrongSecondCheckDigitUnformattedString = "0623079040085";
private static final String validUnformattedString = "0623079040081";
private static final String validFormattedString = "062.307.904/0081";
private static final String[] validValues = { "062.307.904/0081", "702.985.547/0002", "702985547.00-02", "063543834.68-78"};
@Override
protected Validator<String> getValidator(MessageProducer messageProducer, boolean isFormatted) {
return new IEMinasGeraisValidator(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);
}
}