1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.struts2.oval.interceptor;
22
23 import com.opensymphony.xwork2.ActionProxy;
24 import com.opensymphony.xwork2.ValidationAware;
25 import com.opensymphony.xwork2.XWorkTestCase;
26 import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
27
28 import java.util.Arrays;
29 import java.util.List;
30 import java.util.Map;
31 import java.util.Locale;
32
33 import net.sf.oval.configuration.Configurer;
34 import org.apache.struts2.oval.interceptor.OValValidationManager;
35
36 public class OValValidationInterceptorTest extends XWorkTestCase {
37 public void testSimpleFieldsXML() throws Exception {
38 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldsXML", null, null);
39 baseActionProxy.execute();
40
41 Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors();
42 assertNotNull(fieldErrors);
43 assertEquals(2, fieldErrors.size());
44 assertValue(fieldErrors, "firstName", Arrays.asList("firstName cannot be null"));
45 assertValue(fieldErrors, "lastName", Arrays.asList("lastName cannot be null"));
46 }
47
48 public void testSimpleFieldsJPAAnnotations() throws Exception {
49 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldsJPA", null, null);
50 baseActionProxy.execute();
51
52 Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors();
53 assertNotNull(fieldErrors);
54 assertEquals(1, fieldErrors.size());
55 assertValue(fieldErrors, "firstName", Arrays.asList("firstName cannot be null"));
56 }
57
58 public void testValidationInMethods() throws Exception {
59 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "validationInMethods", null, null);
60 baseActionProxy.execute();
61
62 Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors();
63 assertNotNull(fieldErrors);
64 assertEquals(4, fieldErrors.size());
65 assertValue(fieldErrors, "name", Arrays.asList("name cannot be null"));
66 assertValue(fieldErrors, "SisyphusHasTheAnswer", Arrays.asList("SisyphusHasTheAnswer() cannot be null"));
67 assertValue(fieldErrors, "thereAnyMeaningInLife", Arrays.asList("thereAnyMeaningInLife cannot be null"));
68 assertValue(fieldErrors, "theManingOfLife", Arrays.asList("theManingOfLife cannot be null"));
69 }
70
71 public void testSimpleFieldsInheritedXML() throws Exception {
72 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldsXMLChild", null, null);
73 baseActionProxy.execute();
74
75 Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors();
76 assertNotNull(fieldErrors);
77 assertEquals(3, fieldErrors.size());
78 assertValue(fieldErrors, "firstName", Arrays.asList("firstName cannot be null"));
79 assertValue(fieldErrors, "lastName", Arrays.asList("lastName cannot be null"));
80 assertValue(fieldErrors, "middleName", Arrays.asList("middleName cannot be null"));
81 }
82
83 public void testSlashesInNameWithWildcardsHitsCache() throws Exception {
84 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldsXML/test", null, null);
85 baseActionProxy.execute();
86
87 ActionProxy baseActionProxy2 = actionProxyFactory.createActionProxy("oval", "simpleFieldsXML/test2", null, null);
88 baseActionProxy2.execute();
89
90 DummyDefaultOValValidationManager manager = (DummyDefaultOValValidationManager) container.getInstance(OValValidationManager.class);
91 assertEquals(1, manager.getCache().size());
92 }
93
94 public void testXMLLoadCaching() {
95 OValValidationManager manager = container.getInstance(OValValidationManager.class);
96 List<Configurer> configurers = manager.getConfigurers(SimpleFieldsXML.class, "simpleFieldsXMLCaching", false);
97 assertNotNull(configurers);
98 assertEquals(2, configurers.size());
99
100
101 List<Configurer> configurers2 = manager.getConfigurers(SimpleFieldsXML.class, "simpleFieldsXMLCaching", false);
102 assertNotNull(configurers2);
103 assertEquals(2, configurers2.size());
104 assertSame(configurers.get(0), configurers2.get(0));
105 }
106
107 public void testSimpleField() throws Exception {
108 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleField", null, null);
109 baseActionProxy.execute();
110
111 Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors();
112 assertNotNull(fieldErrors);
113 assertEquals(1, fieldErrors.size());
114 assertValue(fieldErrors, "name", Arrays.asList("name cannot be null"));
115 }
116
117 public void testSimpleFieldNegative() throws Exception {
118 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleField", null, null);
119 SimpleField action = (SimpleField) baseActionProxy.getAction();
120 action.setName("123");
121 baseActionProxy.execute();
122
123 Map<String, List<String>> fieldErrors = action.getFieldErrors();
124
125 assertNotNull(fieldErrors);
126 assertEquals(0, fieldErrors.size());
127 }
128
129 public void testSimpleFieldMultipleValidators() throws Exception {
130 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleField", null, null);
131 SimpleField action = (SimpleField) baseActionProxy.getAction();
132 action.setName("12345");
133 baseActionProxy.execute();
134
135 Map<String, List<String>> fieldErrors = action.getFieldErrors();
136 assertNotNull(fieldErrors);
137 assertEquals(1, fieldErrors.size());
138 assertNotNull(fieldErrors.get("name"));
139 }
140
141 public void testSimpleMethod() throws Exception {
142 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleMethod", null, null);
143 SimpleMethod action = (SimpleMethod) baseActionProxy.getAction();
144 baseActionProxy.execute();
145
146 Map<String, List<String>> fieldErrors = action.getFieldErrors();
147 assertNotNull(fieldErrors);
148 assertEquals(1, fieldErrors.size());
149 assertNotNull(fieldErrors.get("someName"));
150 }
151
152 public void testSimpleFieldOGNLExpression() throws Exception {
153 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldOGNL", null, null);
154 SimpleFieldOGNLExpression action = (SimpleFieldOGNLExpression) baseActionProxy.getAction();
155 baseActionProxy.execute();
156
157 Map<String, List<String>> fieldErrors = action.getFieldErrors();
158 assertNotNull(fieldErrors);
159 assertEquals(1, fieldErrors.size());
160 assertNotNull(fieldErrors.get("name"));
161 }
162
163 public void testFieldsWithMultipleProfiles() throws Exception {
164 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "fieldsWidthProfiles13", null, null);
165 FieldsWithProfiles action = (FieldsWithProfiles) baseActionProxy.getAction();
166 baseActionProxy.execute();
167
168 Map<String, List<String>> fieldErrors = action.getFieldErrors();
169 assertNotNull(fieldErrors);
170 assertEquals(2, fieldErrors.size());
171 assertNotNull(fieldErrors.get("firstName"));
172 assertNotNull(fieldErrors.get("lastName"));
173 }
174
175 public void testSimpleFieldOGNLExpressionNegative() throws Exception {
176 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldOGNL", null, null);
177 SimpleFieldOGNLExpression action = (SimpleFieldOGNLExpression) baseActionProxy.getAction();
178 action.setName("Meursault");
179 baseActionProxy.execute();
180
181 Map<String, List<String>> fieldErrors = action.getFieldErrors();
182 assertNotNull(fieldErrors);
183 assertEquals(0, fieldErrors.size());
184 }
185
186 public void testSimpleFieldI18n() throws Exception {
187 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldI18n", null, null);
188 SimpleFieldI18n action = (SimpleFieldI18n) baseActionProxy.getAction();
189 baseActionProxy.execute();
190
191 Map<String, List<String>> fieldErrors = action.getFieldErrors();
192
193 assertNotNull(fieldErrors);
194 assertEquals(1, fieldErrors.size());
195 assertValue(fieldErrors, "name", Arrays.asList("name cannot be null"));
196 }
197
198 public void testSimpleFieldI18nDefaultKey() throws Exception {
199 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldI18nDefaultKey", null, null);
200 SimpleFieldI18nDefaultKey action = (SimpleFieldI18nDefaultKey) baseActionProxy.getAction();
201 baseActionProxy.execute();
202
203 Map<String, List<String>> fieldErrors = action.getFieldErrors();
204
205 assertNotNull(fieldErrors);
206 assertEquals(1, fieldErrors.size());
207 assertValue(fieldErrors, "name", Arrays.asList("notnull.field"));
208 }
209
210
211 public void testProgrammaticValidation() throws Exception {
212 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleField", null, null);
213 SimpleField action = (SimpleField) baseActionProxy.getAction();
214 baseActionProxy.execute();
215
216 Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors();
217 assertNotNull(fieldErrors);
218 assertEquals(1, fieldErrors.size());
219 assertValue(fieldErrors, "name", Arrays.asList("name cannot be null"));
220 assertTrue(action.isValidateCalled());
221 assertTrue(action.isValidateExecuteCalled());
222 }
223
224 public void testProgrammaticValidationDontInvokeValidate() throws Exception {
225 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldNoValidate", null, null);
226 SimpleField action = (SimpleField) baseActionProxy.getAction();
227 baseActionProxy.execute();
228
229 Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors();
230 assertNotNull(fieldErrors);
231 assertEquals(1, fieldErrors.size());
232 assertValue(fieldErrors, "name", Arrays.asList("name cannot be null"));
233 assertFalse(action.isValidateCalled());
234 assertTrue(action.isValidateExecuteCalled());
235 }
236
237 public void testProgrammaticValidationDontInvokeProgrammatic() throws Exception {
238 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldNoProgrammatic", null, null);
239 SimpleField action = (SimpleField) baseActionProxy.getAction();
240 baseActionProxy.execute();
241
242 Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors();
243 assertNotNull(fieldErrors);
244 assertEquals(1, fieldErrors.size());
245 assertValue(fieldErrors, "name", Arrays.asList("name cannot be null"));
246 assertFalse(action.isValidateCalled());
247 assertFalse(action.isValidateExecuteCalled());
248 }
249
250
251 public void testModelDrivenAction() throws Exception {
252 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "modelDrivenAction", null, null);
253 ModelDrivenAction action = (ModelDrivenAction) baseActionProxy.getAction();
254 action.getModel().setName(null);
255 action.getModel().setEmail(null);
256 action.getModel().getAddress().setStreet("short");
257 baseActionProxy.execute();
258
259 Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors();
260 assertNotNull(fieldErrors);
261 assertEquals(5, fieldErrors.size());
262 assertValue(fieldErrors, "name", Arrays.asList("name cannot be null"));
263 assertValue(fieldErrors, "email", Arrays.asList("email cannot be null"));
264 assertValue(fieldErrors, "address.street", Arrays.asList("street cannot be smaller than 7 characters"));
265
266 }
267
268 public void testMemberObject() throws Exception {
269 ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "memberObject", null, null);
270 MemberObject action = (MemberObject) baseActionProxy.getAction();
271 action.getPerson().setName(null);
272 action.getPerson().setEmail(null);
273 action.getPerson().getAddress().setStreet("short");
274 baseActionProxy.execute();
275
276 Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors();
277 assertNotNull(fieldErrors);
278 assertEquals(5, fieldErrors.size());
279 assertValue(fieldErrors, "person.name", Arrays.asList("name cannot be null"));
280 assertValue(fieldErrors, "person.email", Arrays.asList("email cannot be null"));
281 assertValue(fieldErrors, "person.address.street", Arrays.asList("street cannot be smaller than 7 characters"));
282 }
283
284
285 private void assertValue(Map<String, List<String>> map, String key, List<String> expectedValues) {
286 assertNotNull(map);
287 assertNotNull(key);
288 assertNotNull(expectedValues);
289
290 List<String> values = map.get(key);
291 assertNotNull(values);
292 assertEquals(expectedValues, values);
293 }
294
295 @Override
296 protected void setUp() throws Exception {
297 Locale.setDefault(Locale.US);
298 super.setUp();
299 loadConfigurationProviders(new XmlConfigurationProvider("oval-test.xml"));
300 }
301 }