001 /*
002 * The Spring Framework is published under the terms of the Apache Software
003 * License.
004 */
005 package org.springframework.rules;
006
007 import java.util.Locale;
008
009 import org.springframework.context.ConfigurableApplicationContext;
010 import org.springframework.context.support.ClassPathXmlApplicationContext;
011 import org.springframework.rules.constraint.Constraint;
012 import org.springframework.richclient.application.support.DefaultApplicationServices;
013 import org.springframework.richclient.test.SpringRichTestCase;
014 import org.springframework.rules.constraint.CompoundConstraint;
015 import org.springframework.rules.constraint.property.CompoundPropertyConstraint;
016 import org.springframework.rules.factory.Constraints;
017 import org.springframework.rules.reporting.BeanValidationResults;
018 import org.springframework.rules.reporting.BeanValidationResultsCollector;
019
020 /**
021 *
022 * @author Keith Donald
023 */
024 public class ValidationResultsTests extends SpringRichTestCase {
025
026 static RulesSource rulesSource;
027 static Rules rules;
028
029 private static final Constraints constraints = Constraints.instance();
030
031 protected void registerAdditionalServices(DefaultApplicationServices applicationServices) {
032 applicationServices.setRulesSourceId("rulesSource");
033 }
034
035 protected void doSetUp() throws Exception {
036 rulesSource = (RulesSource) applicationServices.getService(RulesSource.class);
037 rules = rulesSource.getRules(Person.class);
038 }
039
040 protected ConfigurableApplicationContext createApplicationContext() {
041 return new ClassPathXmlApplicationContext("org/springframework/rules/rules-context.xml");
042 }
043
044 public void testValidationResultsCollector() {
045 Person p = new Person();
046 BeanValidationResultsCollector c = new BeanValidationResultsCollector(p);
047 BeanValidationResults r =
048 c.collectResults(rulesSource.getRules(Person.class));
049 assertEquals(2, r.getViolatedCount());
050 }
051
052 public void testValidationResultsCollectorCollectAllErrors() {
053 Person p = new Person();
054 BeanValidationResultsCollector c = new BeanValidationResultsCollector(p);
055 c.setCollectAllErrors(true);
056 BeanValidationResults r =
057 c.collectResults(rulesSource.getRules(Person.class));
058 assertEquals(2, r.getViolatedCount());
059 }
060
061 public void testNestedValidationResultsPropertyConstraint() {
062 Person p = new Person();
063
064 Rules rules = new Rules(Person.class);
065 CompoundConstraint constraint =
066 constraints.or(
067 constraints.all(
068 "firstName",
069 new Constraint[]{
070 constraints.required(),
071 constraints.minLength(2)}),
072 constraints.not(
073 constraints.eqProperty("firstName", "lastName")));
074 rules.add(new CompoundPropertyConstraint(constraint));
075 BeanValidationResultsCollector c = new BeanValidationResultsCollector(p);
076 c.setCollectAllErrors(true);
077 BeanValidationResults r = c.collectResults(rules);
078 assertEquals(3, r.getViolatedCount());
079 String message =
080 r.getResults("firstName").buildMessage(Locale.getDefault());
081 System.out.println(message);
082 assertEquals(
083 "First Name must have text and must be at least 2 characters or must *not* equal Last Name.",
084 message);
085 }
086
087 }