package br.com.caelum.stella.validation.ie;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import org.junit.Test;
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 IESaoPauloComercioIndustriaValidatorTest extends IEValidatorTest {
public IESaoPauloComercioIndustriaValidatorTest() {
super(wrongCheckDigitString, validUnformattedString, validString, validValues);
}
private static final String wrongCheckDigitString = "110042490104";
private static final String wrongSecondCheckDigitString = "110042490115";
private static final String validUnformattedString = "110042490114";
private static final String validString = "110.042.490.114";
// TODO adicionar mais IE validos para São Paulo
private static final String[] validValues = { validString };
@Override
protected Validator<String> getValidator(MessageProducer messageProducer, boolean isFormatted) {
return new IESaoPauloComercioIndustriaValidator(messageProducer, isFormatted);
}
@Test
public void shouldNotValidateIEsWithSecondCheckDigitWrong() {
Validator<String> validator = getValidator(messageProducer, false);
try {
validator.assertValid(wrongSecondCheckDigitString);
fail();
} catch (InvalidStateException e) {
assertEquals(1, e.getInvalidMessages().size());
}
verify(messageProducer, times(1)).getMessage(IEError.INVALID_CHECK_DIGITS);
}
}