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 IEDistritoFederalValidatorTest extends IEValidatorTest {
/*
* Formato: 07.408.738/002-50
*/
private static final String wrongFirstCheckDigitUnformattedString = "0740873800240";
private static final String wrongSecondCheckDigitUnformattedString = "0740873800240";
private static final String validUnformattedString = "0740873800250";
private static final String validFormattedString = "07.408.738/002-50";
private static final String[] validValues = { validFormattedString, "07.343.623/001-77", "07.451.530/001-68",
"07.389.634/001-01", "07.336.802/001-60", "07.346.779/001-46", "07.548.137/001-52", "07.300.001/001-09" };
public IEDistritoFederalValidatorTest() {
super(wrongFirstCheckDigitUnformattedString, validUnformattedString, validFormattedString, validValues);
}
@Override
protected Validator<String> getValidator(MessageProducer messageProducer, boolean isFormatted) {
return new IEDistritoFederalValidator(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);
}
}