package com.softwaremill.common.cdi.validator;
import org.mockito.Mockito;
import org.testng.Assert;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.Test;
import com.softwaremill.common.cdi.validation.Length;
import com.softwaremill.common.cdi.validation.LengthValidator;
import javax.validation.ConstraintValidatorContext;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
/**
* Created by amorfis on Dec 3, 2010 1:40:58 PM
*/
public class LengthValidatorTest {
private ConstraintValidatorContext context = mock(ConstraintValidatorContext.class);
private ConstraintValidatorContext.ConstraintViolationBuilder constraintViolationBuilder
= mock(ConstraintValidatorContext.ConstraintViolationBuilder.class);
@BeforeClass
private void prepareMocks() {
constraintViolationBuilder = mock(ConstraintValidatorContext.ConstraintViolationBuilder.class);
when(context.buildConstraintViolationWithTemplate(Mockito.anyString()))
.thenReturn(constraintViolationBuilder);
}
@Test
public void shouldAllowRegularChars() throws NoSuchFieldException {
//given
class AnnotationWrapper {
@Length(min = 10, max = 15)
public String field;
}
LengthValidator validator = initializeValidator(AnnotationWrapper.class);
//when
boolean valid = validator.isValid("PawelStawicki", context);
boolean tooShort = validator.isValid("Pawel", context);
boolean tooLong = validator.isValid("Pawellllllllllllllllllllllllllllllll", context);
//then
Assert.assertTrue(valid);
Assert.assertFalse(tooShort);
verify(context).buildConstraintViolationWithTemplate("Value is too short");
Assert.assertFalse(tooLong);
verify(context).buildConstraintViolationWithTemplate("Value is too long");
}
private LengthValidator initializeValidator(Class<?> classWithAnnotation) throws NoSuchFieldException {
Length constraint = classWithAnnotation.getField("field").getAnnotation(Length.class);
LengthValidator validator = new LengthValidator();
validator.initialize(constraint);
return validator;
}
}