View Javadoc

1   /*
2    * $Id: OValValidationInterceptorTest.java 779761 2009-05-28 20:34:27Z hermanns $
3    *
4    * Licensed to the Apache Software Foundation (ASF) under one
5    * or more contributor license agreements.  See the NOTICE file
6    * distributed with this work for additional information
7    * regarding copyright ownership.  The ASF licenses this file
8    * to you under the Apache License, Version 2.0 (the
9    * "License"); you may not use this file except in compliance
10   * with the License.  You may obtain a copy of the License at
11   *
12   *  http://www.apache.org/licenses/LICENSE-2.0
13   *
14   * Unless required by applicable law or agreed to in writing,
15   * software distributed under the License is distributed on an
16   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17   * KIND, either express or implied.  See the License for the
18   * specific language governing permissions and limitations
19   * under the License.
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         //load again and check it is the same instance
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()); // 5: as there will be field errors for 'model' and 'address' themselves
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()); // 5: as there will be field errors for 'person' and 'person.address' themselves
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 }