public void testMessageInterpolation() { // get validators List validatorList = annotationActionValidatorManager.getValidators( AnnotatedTestBean.class, "beanMessageBundle"); assertEquals(3, validatorList.size()); try { AnnotatedTestBean bean = new AnnotatedTestBean(); bean.setName("foo"); bean.setCount(150); ValidatorContext context = new GenericValidatorContext(bean); annotationActionValidatorManager.validate(bean, "beanMessageBundle", context); assertTrue(context.hasErrors()); assertTrue(context.hasFieldErrors()); List<String> l = context.getFieldErrors().get("count"); assertNotNull(l); assertEquals(1, l.size()); assertEquals("Count must be between 1 and 100, current value is 150.", l.get(0)); } catch (ValidationException ex) { ex.printStackTrace(); fail("Validation error: " + ex.getMessage()); } }
public void testActionLevelShortCircuit() throws Exception { List validatorList = annotationActionValidatorManager.getValidators(AnnotationUser.class, null); assertEquals(10, validatorList.size()); AnnotationUser user = new AnnotationUser(); // all fields will trigger error, but sc of action-level, cause it to not appear user.setName(null); user.setEmail("rainerh(at)example.com"); user.setEmail("rainer_h(at)example.com"); ValidatorContext context = new GenericValidatorContext(user); annotationActionValidatorManager.validate(user, null, context); // check field level errors // shouldn't have any because action error prevents validation of anything else List l = (List) context.getFieldErrors().get("email2"); assertNull(l); // check action errors assertTrue(context.hasActionErrors()); l = (List) context.getActionErrors(); assertNotNull(l); // we only get one, because AnnotationUserMarker-validation.xml action-level validator // already sc it :-) assertEquals(1, l.size()); assertEquals("Email not the same as email2", l.get(0)); }
public void execute(ValidatorContext ctx) { logValidatorNames(); for (Validator validator : validators) { logger.debug("starting {}", validator.getClass().getSimpleName()); try { validator.validate(ctx); } catch (RuntimeException e) { logger.error( "validator " + validator.getClass().getSimpleName() + " ended with unexpected exception!", e); ctx.addError(null, ctx.getValidatedRepository(), e); } } }
@Override public void validate(ValidatorContext context) { DataElement element = context.dataElement(); DataSchema schema = element.getSchema(); if (schema != null) { validateSchema(context, schema); } DataElement parentElement = element.getParent(); if (parentElement != null) { DataSchema parentSchema = parentElement.getSchema(); // check if the value belongs to a field in a record // if it belongs to a field, check if the field has // validators. if (parentSchema != null && parentSchema.getType() == DataSchema.Type.RECORD) { Object name = element.getName(); if (name.getClass() == String.class) { RecordDataSchema recordDataSchema = (RecordDataSchema) parentSchema; RecordDataSchema.Field field = recordDataSchema.getField((String) name); if (field != null) { getAndInvokeValidatorList(context, field); } } } } }
public void testShortCircuitNoErrors() { // get validators List validatorList = annotationActionValidatorManager.getValidators(AnnotationUser.class, null); assertEquals(10, validatorList.size()); try { AnnotationUser user = new AnnotationUser(); user.setName("Mark"); user.setEmail("*****@*****.**"); user.setEmail2("*****@*****.**"); ValidatorContext context = new GenericValidatorContext(user); annotationActionValidatorManager.validate(user, null, context); assertFalse(context.hasErrors()); } catch (ValidationException ex) { ex.printStackTrace(); fail("Validation error: " + ex.getMessage()); } }
private void getAndInvokeValidatorList(ValidatorContext ctx, Object key) { List<Validator> validatorList = _cache.get(key); if (validatorList == null) { // this means schema or field to be validated has not been cached. ctx.addResult( new Message( ctx.dataElement().path(), "validation skipped, %1$s have not been initialized for use by %2$s", key, getClass().getSimpleName())); } else if (validatorList != NO_VALIDATORS) { for (Validator validator : validatorList) { if (_debugMode) { ctx.addResult( new Message(ctx.dataElement().path(), false, "validating with %1$s", validator)); } validator.validate(ctx); } } }
public void testSkipAllActionLevelShortCircuit2() { // get validators List validatorList = annotationActionValidatorManager.getValidators(AnnotationUser.class, null); assertEquals(10, validatorList.size()); try { AnnotationUser user = new AnnotationUser(); user.setName("Mark"); // * mark both email to starts with mark to get pass the action-level validator, // so we could concentrate on testing the field-level validators // (AnnotationUser-validation.xml) // * make both email the same to pass the action-level validator at // AnnotationUserMarker-validation.xml user.setEmail("*****@*****.**"); user.setEmail2("*****@*****.**"); ValidatorContext context = new GenericValidatorContext(user); annotationActionValidatorManager.validate(user, null, context); assertTrue(context.hasFieldErrors()); // check field errors // we have an error in this field level, email does not ends with mycompany.com List l = (List) context.getFieldErrors().get("email"); assertNotNull(l); assertEquals(1, l.size()); // because email-field-val is short-circuit assertEquals("Email not from the right company.", l.get(0)); // check action errors l = (List) context.getActionErrors(); assertFalse(context.hasActionErrors()); assertEquals(0, l.size()); } catch (ValidationException ex) { ex.printStackTrace(); fail("Validation error: " + ex.getMessage()); } }
public void testSkipUserMarkerActionLevelShortCircuit() { // get validators List validatorList = annotationActionValidatorManager.getValidators(AnnotationUser.class, null); assertEquals(10, validatorList.size()); try { AnnotationUser user = new AnnotationUser(); user.setName("Mark"); user.setEmail("bad_email"); user.setEmail2("bad_email"); ValidatorContext context = new GenericValidatorContext(user); annotationActionValidatorManager.validate(user, null, context); assertTrue(context.hasFieldErrors()); // check field errors List<String> l = context.getFieldErrors().get("email"); assertNotNull(l); assertEquals(1, l.size()); assertEquals("Not a valid e-mail.", l.get(0)); l = context.getFieldErrors().get("email2"); assertNotNull(l); assertEquals(2, l.size()); assertEquals("Not a valid e-mail2.", l.get(0)); assertEquals("Email2 not from the right company.", l.get(1)); // check action errors assertTrue(context.hasActionErrors()); l = (List<String>) context.getActionErrors(); assertNotNull(l); assertEquals(2, l.size()); // both expression test failed see AnnotationUser-validation.xml assertEquals("Email does not start with mark", l.get(0)); } catch (ValidationException ex) { ex.printStackTrace(); fail("Validation error: " + ex.getMessage()); } }