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    }