1 package ejava.jpa.example.validation;
2
3 import static org.junit.Assert.*;
4
5 import java.text.SimpleDateFormat;
6 import java.util.Calendar;
7 import java.util.Date;
8 import java.util.GregorianCalendar;
9 import java.util.Set;
10
11 import javax.validation.ConstraintViolation;
12 import javax.validation.Validation;
13 import javax.validation.Validator;
14 import javax.validation.ValidatorFactory;
15 import javax.validation.groups.Default;
16
17 import org.apache.commons.logging.Log;
18 import org.apache.commons.logging.LogFactory;
19 import org.junit.Test;
20
21
22
23
24
25 public class PredefinedValidationTest {
26 private static Log log = LogFactory.getLog(PredefinedValidationTest.class);
27
28 private ValidatorFactory vf = Validation.buildDefaultValidatorFactory();
29 private Validator val = vf.getValidator();
30
31
32
33
34 @Test
35 public void testValid() {
36 log.info("*** testValid ***");
37
38 Person p = new Person()
39 .setFirstName("Billy Bob")
40 .setLastName("Smith-Jones")
41 .setBirthDate(new GregorianCalendar(1980, Calendar.JANUARY, 1).getTime())
42 .setEmail("bbob@hotmail.com");
43
44 Set<ConstraintViolation<Person>> violations = val.validate(p);
45
46 log.debug("valid person=" + p);
47 assertEquals("unexpected number of violations:" + violations, 0, violations.size());
48 }
49
50
51
52
53 @Test
54 public void testNotNull() {
55 log.info("*** testNotNull ***");
56
57 Person p = new Person();
58
59 Set<ConstraintViolation<Person>> violations = val.validate(p, POCs.class);
60 for (ConstraintViolation<Person> v : violations) {
61 log.info(v.getRootBeanClass() + ", " + v.getPropertyPath() + " " + v.getMessage());
62 }
63
64 log.debug("invalid null-named person=" + p);
65 assertEquals("unexpected number of violations", 4, violations.size());
66 }
67
68
69
70
71 @Test
72 public void testSize() {
73 log.info("*** testSize ***");
74
75 Person p = new Person()
76 .setFirstName("Bobbbbbbbbbbbbbbbbbbbbbbbbbbb")
77 .setLastName("Smithhhhhhhhhhhhhhhhhhhhhhhhhh");
78
79 Set<ConstraintViolation<Person>> violations = val.validate(p);
80 for (ConstraintViolation<Person> v : violations) {
81 log.info(v.getPropertyPath() + ":" + v.getInvalidValue() + " " + v.getMessage());
82 }
83
84 log.debug("invalid named-sized person=" + p);
85 assertEquals("unexpected number of violations", 2, violations.size());
86 }
87
88
89
90
91 @Test
92 public void testPattern() {
93 log.info("*** testPattern ***");
94
95 Person p = new Person()
96 .setFirstName("Bob2")
97 .setLastName("Smith")
98 .setEmail("bob2");
99
100 Set<ConstraintViolation<Person>> violations = val.validate(p);
101 for (ConstraintViolation<Person> v : violations) {
102 log.info(v.getPropertyPath() + ":" + v.getInvalidValue() + " " + v.getMessage());
103 }
104
105 log.debug("invalid named-sized person=" + p);
106 assertEquals("unexpected number of violations", 3, violations.size());
107 }
108
109
110
111
112 @Test
113 public void testPast() {
114 log.info("*** testPast ***");
115
116 Person p = new Person()
117 .setFirstName("Bob")
118 .setLastName("Smith")
119 .setBirthDate(new GregorianCalendar(2052, Calendar.JANUARY, 1).getTime());
120
121 Set<ConstraintViolation<Person>> violations = val.validate(p, Drivers.class);
122 for (ConstraintViolation<Person> v : violations) {
123 String value = (v.getInvalidValue() instanceof Date) ?
124 new SimpleDateFormat("YYYY").format((Date)v.getInvalidValue()) :
125 v.getInvalidValue().toString();
126 log.info(v.getPropertyPath() + ":" + value + " " + v.getMessage());
127 }
128
129 log.debug("invalid named-sized person=" + p);
130 assertEquals("unexpected number of violations", 3, violations.size());
131 }
132
133
134
135
136 @Test
137 public void testGroups() {
138 log.info("*** testGroups ***");
139
140 Calendar seventeen = new GregorianCalendar();
141 seventeen.add(Calendar.YEAR, -17);
142
143 Person p = new Person()
144 .setFirstName("Bob")
145 .setLastName("Smith")
146 .setEmail("bob.smith@gmail.com")
147 .setBirthDate(seventeen.getTime());
148
149 Set<ConstraintViolation<Person>> validPerson = val.validate(p, Default.class);
150 Set<ConstraintViolation<Person>> validDriver = val.validate(p, Drivers.class);
151 Set<ConstraintViolation<Person>> validPOC = val.validate(p, POCs.class);
152
153 log.debug(p.toString() + ", validPerson=" + validPerson.isEmpty() +
154 ", validDriver=" + validDriver.isEmpty() +
155 ", validPOC=" + validPOC.isEmpty());
156
157 log.debug("validPerson=" + validPerson);
158 log.debug("validDriver=" + validDriver);
159 log.debug("validPOC=" + validPOC);
160
161 assertTrue("not validPerson", validPerson.isEmpty());
162 assertTrue("validDriver", validDriver.isEmpty());
163 assertFalse("not validPOC", validPOC.isEmpty());
164 }
165
166 }