1   /*
2    * The Spring Framework is published under the terms of the Apache Software
3    * License.
4    */
5   package org.springframework.rules;
6   
7   import java.util.Locale;
8   
9   import org.springframework.context.ConfigurableApplicationContext;
10  import org.springframework.context.support.ClassPathXmlApplicationContext;
11  import org.springframework.rules.constraint.Constraint;
12  import org.springframework.richclient.application.support.DefaultApplicationServices;
13  import org.springframework.richclient.test.SpringRichTestCase;
14  import org.springframework.rules.constraint.CompoundConstraint;
15  import org.springframework.rules.constraint.property.CompoundPropertyConstraint;
16  import org.springframework.rules.factory.Constraints;
17  import org.springframework.rules.reporting.BeanValidationResults;
18  import org.springframework.rules.reporting.BeanValidationResultsCollector;
19  
20  /**
21   * 
22   * @author Keith Donald
23   */
24  public class ValidationResultsTests extends SpringRichTestCase {
25  
26  	static RulesSource rulesSource;
27  	static Rules rules;
28  
29  	private static final Constraints constraints = Constraints.instance();
30  	
31  	protected void registerAdditionalServices(DefaultApplicationServices applicationServices) {
32  		applicationServices.setRulesSourceId("rulesSource");
33  	}
34  	
35  	protected void doSetUp() throws Exception {
36  		rulesSource = (RulesSource) applicationServices.getService(RulesSource.class);
37  		rules = rulesSource.getRules(Person.class);
38  	}
39  
40  	protected ConfigurableApplicationContext createApplicationContext() {
41  		return new ClassPathXmlApplicationContext("org/springframework/rules/rules-context.xml");
42  	}
43  
44  	public void testValidationResultsCollector() {
45  		Person p = new Person();
46  		BeanValidationResultsCollector c = new BeanValidationResultsCollector(p);
47  		BeanValidationResults r =
48  				c.collectResults(rulesSource.getRules(Person.class));
49  		assertEquals(2, r.getViolatedCount());
50  	}
51  
52  	public void testValidationResultsCollectorCollectAllErrors() {
53  		Person p = new Person();
54  		BeanValidationResultsCollector c = new BeanValidationResultsCollector(p);
55  		c.setCollectAllErrors(true);
56  		BeanValidationResults r =
57  				c.collectResults(rulesSource.getRules(Person.class));
58  		assertEquals(2, r.getViolatedCount());
59  	}
60  
61  	public void testNestedValidationResultsPropertyConstraint() {
62  		Person p = new Person();
63  
64  		Rules rules = new Rules(Person.class);
65  		CompoundConstraint constraint =
66  				constraints.or(
67  						constraints.all(
68  								"firstName",
69  								new Constraint[]{
70  									constraints.required(),
71  									constraints.minLength(2)}),
72  						constraints.not(
73  								constraints.eqProperty("firstName", "lastName")));
74  		rules.add(new CompoundPropertyConstraint(constraint));
75  		BeanValidationResultsCollector c = new BeanValidationResultsCollector(p);
76  		c.setCollectAllErrors(true);
77  		BeanValidationResults r = c.collectResults(rules);
78  		assertEquals(3, r.getViolatedCount());
79  		String message =
80  				r.getResults("firstName").buildMessage(Locale.getDefault());
81  		System.out.println(message);
82  		assertEquals(
83  				"First Name must have text and must be at least 2 characters or must *not* equal Last Name.",
84  				message);
85  	}
86  	
87  }