package br.com.caelum.stella.validation;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
/**
* @author Leonardo Bessa
*/
public class TituloEleitoralValidatorTest {
private final String[] validStrings = { "543275360116","142501480248", "557833330370", "013785610434",
"253346440540", "033734180663", "585353130710", "884328631058", "553505611201", "028565701333",
"245770031481", "713782341503", "403374181694", "452083221724" };
private final String[] validStringsFormatted = { "5432753601/16","1425014802/48", "5578333303/70", "0137856104/34",
"2533464405/40", "0337341806/63", "5853531307/10", "8843286310/58", "5535056112/01", "0285657013/33",
"2457700314/81", "7137823415/03", "4033741816/94", "4520832217/24"};
private final String[] invalidFirstDigitStrings = { "543275360106", "452083221714", "253346440520", "553505611231",
"884328631048" };
private final String[] invalidSecondDigitStrings = { "543275360119", "452083221728", "253346440547",
"553505611206", "884328631055" };
private Validator<String> validator;
private Validator<String> validatorFormatted;
@Before
public void setup() {
validator = new TituloEleitoralValidator(false);
validatorFormatted = new TituloEleitoralValidator(true);
}
@Test
public void shouldValidateCorrectString() {
for (String validString : validStrings) {
validator.assertValid(validString);
}
}
@Test
public void shouldValidateCorrectFormattedString() {
for (String validString : validStringsFormatted) {
validatorFormatted.assertValid(validString);
}
}
@Test
public void shouldNotValidateStringWithFirstCheckDigitWrong() {
for (String invalidString : invalidFirstDigitStrings) {
try {
validator.assertValid(invalidString);
Assert.fail("O titulo eleitoral " + invalidString + " deve ser considerado inválido!");
} catch (InvalidStateException e) {
}
}
}
@Test
public void shouldNotValidateStringWithSecondCheckDigitWrong() {
for (String invalidString : invalidSecondDigitStrings) {
try {
validator.assertValid(invalidString);
Assert.fail("O titulo eleitoral " + invalidString + " deve ser considerado inválido!");
} catch (InvalidStateException e) {
}
}
}
@Test(expected = InvalidStateException.class)
public void shouldNotValidateStringMoreDigits() {
validator.assertValid(validStrings[0] + "0");
}
@Test(expected = InvalidStateException.class)
public void shouldNotValidateStringWithCodigoDeEstadoInvalidoMenorDoQueUm() {
validator.assertValid("471235380051");
}
@Test(expected = InvalidStateException.class)
public void shouldNotValidateStringWithCodigoDeEstadoInvalidoMaiorDoQue28() {
validator.assertValid("815155812960");
}
@Test
public void shouldGenerateRandomValidUnformatted() {
final String value = validator.generateRandomValid();
validator.assertValid(value);
}
@Test
public void shouldGenerateRandomValidFormatted() {
final String value = validatorFormatted.generateRandomValid();
validatorFormatted.assertValid(value);
}
}