Skip to content

Instantly share code, notes, and snippets.

@nullpointer0x00
Last active November 26, 2016 03:24
Show Gist options
  • Save nullpointer0x00/d23cb7b77fb66417324414c65e105f5b to your computer and use it in GitHub Desktop.
Save nullpointer0x00/d23cb7b77fb66417324414c65e105f5b to your computer and use it in GitHub Desktop.
JSF Creating a Custom Validator with Test Using Mockito and PowerMock

###TODO

###Java

import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.validator.FacesValidator;
import javax.faces.validator.Validator;
import javax.faces.validator.ValidatorException;

@FacesValidator("GreaterThanZeroValidator")
public class GreaterThanZeroValidator implements Validator {

    @Override
    public void validate(FacesContext facesContext, UIComponent uicComponent, Object value) throws ValidatorException {
        try{
            if(Integer.parseInt(value.toString()) < 1){
                FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Validation Error.", "Number must be a number greater than 0.");
                throw new ValidatorException(message);
            }
        } catch(NumberFormatException e){
            FacesMessage message = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Validation Error.", "Not a number. Must be a number greater than 0.");
                throw new ValidatorException(message);
        }
    }

}

###Primefaces - JSF

<p:inputText id="someId" value="#{someBean.foo}" required="true" maxlength="6">
    <f:validator validatorId="GreaterThanZeroValidator" />
</p:inputText>

###Tests

import javax.faces.application.FacesMessage;
import org.powermock.core.classloader.annotations.PrepareForTest;
import javax.faces.context.FacesContext;
import javax.faces.validator.ValidatorException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.junit.Assert.*;

@RunWith(PowerMockRunner.class)
@PrepareForTest({FacesContext.class})
public class GreaterThanZeroValidatorTest {

    
    @Test
    public void testValidateNonNumber(){ 
        PowerMockito.mockStatic(FacesContext.class);
        FacesContext facesContext = PowerMockito.mock(FacesContext.class);
        GreaterThanZeroValidator validator = new GreaterThanZeroValidator();
        ValidatorException expectedException = null;
        try{
            validator.validate(facesContext, null, "");
        } catch(ValidatorException exp){
            expectedException = exp;
        }
        assertNotNull(expectedException);
        assertEquals(FacesMessage.SEVERITY_ERROR, expectedException.getFacesMessage().getSeverity());
        assertEquals("Not a number. Must be a number greater than 0.", expectedException.getFacesMessage().getDetail());
        assertEquals("Validation Error.", expectedException.getFacesMessage().getSummary());
    }
    
    @Test
    public void testValidateDecimal(){ 
        PowerMockito.mockStatic(FacesContext.class);
        FacesContext facesContext = PowerMockito.mock(FacesContext.class);
        GreaterThanZeroValidator validator = new GreaterThanZeroValidator();
        ValidatorException expectedException = null;
        try{
            validator.validate(facesContext, null, "1.0");
        } catch(ValidatorException exp){
            expectedException = exp;
        }
        assertNotNull(expectedException);
        assertEquals(FacesMessage.SEVERITY_ERROR, expectedException.getFacesMessage().getSeverity());
        assertEquals("Not a number. Must be a number greater than 0.", expectedException.getFacesMessage().getDetail());
        assertEquals("Validation Error.", expectedException.getFacesMessage().getSummary());
    }
    
    @Test
    public void testValidateLessThanOne(){ 
        PowerMockito.mockStatic(FacesContext.class);
        FacesContext facesContext = PowerMockito.mock(FacesContext.class);
        GreaterThanZeroValidator validator = new GreaterThanZeroValidator();
        ValidatorException expectedException = null;
        try{
            validator.validate(facesContext, null, "0");
        } catch(ValidatorException exp){
            expectedException = exp;
        }
        assertNotNull(expectedException);
        assertEquals(FacesMessage.SEVERITY_ERROR, expectedException.getFacesMessage().getSeverity());
        assertEquals("Number must be a number greater than 0.", expectedException.getFacesMessage().getDetail());
        assertEquals("Validation Error.", expectedException.getFacesMessage().getSummary());
    }
    
    @Test
    public void testValidateNoValidationError(){ 
        PowerMockito.mockStatic(FacesContext.class);
        FacesContext facesContext = PowerMockito.mock(FacesContext.class);
        GreaterThanZeroValidator validator = new GreaterThanZeroValidator();
        validator.validate(facesContext, null, "1");
        validator.validate(facesContext, null, "3");
        validator.validate(facesContext, null, "5");
        
    }
    
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment