package br.com.caelum.stella.faces.validation;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.fail;
import java.util.Locale;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import org.jmock.Mockery;
import org.junit.Before;
import org.junit.Test;
/**
* StellaCPFValidator integration tests
*
* @author Fabio Kung
*/
public class StellaCPFValidatorTest {
private Mockery mockery;
private StellaCPFValidator validator;
private FacesContextMocker facesContextMocker;
@Before
public void init() {
mockery = new Mockery();
facesContextMocker = new FacesContextMocker(mockery);
this.validator = new StellaCPFValidator();
}
@Test
public void shouldNotThrowValidatorExceptionForValidCPF() throws Exception {
final FacesContext context = mockery.mock(FacesContext.class);
final UIComponent component = mockery.mock(UIComponent.class);
facesContextMocker.mockMessageBundle(context, "messages", Locale.getDefault());
validator.validate(context, component, "75885366160");
mockery.assertIsSatisfied();
}
@Test
public void shouldGiveMessagesFromBrazilianResourceBundleForInvalidCpfAndPtBRLocale() throws Exception {
final FacesContext context = mockery.mock(FacesContext.class);
final UIComponent component = mockery.mock(UIComponent.class);
facesContextMocker.mockMessageBundle(context, "messages", new Locale("pt", "BR"));
try {
validator.validate(context, component, "1234567765");
fail();
} catch (ValidatorException e) {
// it should throw exception for invalid cpf
FacesMessage message = e.getFacesMessage();
assertEquals("CPF Invalido", message.getSummary());
mockery.assertIsSatisfied();
}
}
@Test
public void shouldGiveMessagesFromDefaultResourceBundleForInvalidCpfAndEnUSLocale() throws Exception {
final FacesContext context = mockery.mock(FacesContext.class);
final UIComponent component = mockery.mock(UIComponent.class);
facesContextMocker.mockMessageBundle(context, "messages", new Locale("en"));
try {
validator.validate(context, component, "1234567765");
fail();
} catch (ValidatorException e) {
// it should throw exception for invalid cpf
FacesMessage message = e.getFacesMessage();
assertEquals("Invalid CPF", message.getSummary());
mockery.assertIsSatisfied();
}
}
@Test
public void shouldAcceptCPFWithLeadingZeros() {
final FacesContext context = mockery.mock(FacesContext.class);
final UIComponent component = mockery.mock(UIComponent.class);
facesContextMocker.mockMessageBundle(context, "messages", Locale.getDefault());
try {
validator.validate(context, component, "01169538452");
mockery.assertIsSatisfied();
} catch (ValidatorException e) {
fail("shouldn't throw exception for valid cpf with leading zeros");
}
}
@Test
public void shouldNotThrowNullPointerExceptionWhenCPFIsNull() {
final FacesContext context = mockery.mock(FacesContext.class);
final UIComponent component = mockery.mock(UIComponent.class);
facesContextMocker.mockMessageBundle(context, "messages", Locale.getDefault());
try {
validator.validate(context, component, null);
mockery.assertIsSatisfied();
} catch (ValidatorException e) {
fail("shouldn't throw exception for null cpf");
} catch (NullPointerException e) {
fail("shouldn't throw exception for null cpf");
}
}
@Test
public void shouldNotThrowValidatorExceptionWhenCPFIsEmpty() {
final FacesContext context = mockery.mock(FacesContext.class);
final UIComponent component = mockery.mock(UIComponent.class);
facesContextMocker.mockMessageBundle(context, "messages", Locale.getDefault());
try {
validator.validate(context, component, "");
mockery.assertIsSatisfied();
} catch (ValidatorException e) {
fail("shouldn't throw exception for empty cpf");
}
}
}