PageRenderTime 59ms CodeModel.GetById 25ms app.highlight 26ms RepoModel.GetById 2ms app.codeStats 0ms

/projects/struts-2.2.1/src/xwork-core/src/test/java/com/opensymphony/xwork2/validator/DefaultActionValidatorManagerTest.java

https://gitlab.com/essere.lab.public/qualitas.class-corpus
Java | 349 lines | 115 code | 20 blank | 214 comment | 0 complexity | ad3a5f2e58dc3a3cd9a5d0e185d3c81d MD5 | raw file
  1/*
  2 * Copyright 2002-2003,2009 The Apache Software Foundation.
  3 * 
  4 * Licensed under the Apache License, Version 2.0 (the "License");
  5 * you may not use this file except in compliance with the License.
  6 * You may obtain a copy of the License at
  7 * 
  8 *      http://www.apache.org/licenses/LICENSE-2.0
  9 * 
 10 * Unless required by applicable law or agreed to in writing, software
 11 * distributed under the License is distributed on an "AS IS" BASIS,
 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 13 * See the License for the specific language governing permissions and
 14 * limitations under the License.
 15 */
 16package com.opensymphony.xwork2.validator;
 17
 18import com.mockobjects.dynamic.C;
 19import com.mockobjects.dynamic.Mock;
 20import com.opensymphony.xwork2.*;
 21import com.opensymphony.xwork2.config.ConfigurationException;
 22import com.opensymphony.xwork2.test.DataAware2;
 23import com.opensymphony.xwork2.test.SimpleAction2;
 24import com.opensymphony.xwork2.test.SimpleAction3;
 25import com.opensymphony.xwork2.util.ValueStack;
 26import junit.framework.TestCase;
 27
 28import java.util.ArrayList;
 29import java.util.HashMap;
 30import java.util.List;
 31
 32
 33/**
 34 * DefaultActionValidatorManagerTest
 35 *
 36 * @author Jason Carreira
 37 * @author tm_jee 
 38 * @version $Date: 2009-12-27 19:18:29 +0100 (Sun, 27 Dec 2009) $ $Id: DefaultActionValidatorManagerTest.java 894090 2009-12-27 18:18:29Z martinc $
 39 */
 40public class DefaultActionValidatorManagerTest extends TestCase {
 41
 42    protected final String alias = "validationAlias";
 43
 44    DefaultActionValidatorManager actionValidatorManager;
 45    Mock mockValidatorFileParser;
 46    Mock mockValidatorFactory;
 47    ValueStack stubValueStack;
 48
 49    @Override
 50    protected void setUp() throws Exception {
 51        actionValidatorManager = new DefaultActionValidatorManager();
 52        super.setUp();
 53        mockValidatorFileParser = new Mock(ValidatorFileParser.class);
 54        actionValidatorManager.setValidatorFileParser((ValidatorFileParser)mockValidatorFileParser.proxy());
 55
 56        mockValidatorFactory = new Mock(ValidatorFactory.class);
 57        actionValidatorManager.setValidatorFactory((ValidatorFactory)mockValidatorFactory.proxy());
 58
 59        stubValueStack = new StubValueStack();
 60        ActionContext.setContext(new ActionContext(new HashMap<String, Object>()));
 61        ActionContext.getContext().setValueStack(stubValueStack);
 62
 63    }
 64
 65    @Override
 66    protected void tearDown() throws Exception {
 67        actionValidatorManager = null;
 68        super.tearDown();
 69        mockValidatorFactory = null;
 70        mockValidatorFileParser = null;
 71    }
 72
 73
 74    public void testBuildValidatorKey() {
 75        String validatorKey = DefaultActionValidatorManager.buildValidatorKey(SimpleAction.class, alias);
 76        assertEquals(SimpleAction.class.getName() + "/" + alias, validatorKey);
 77    }
 78
 79    public void testBuildsValidatorsForAlias() {
 80        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
 81                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/SimpleAction-validation.xml")),
 82                new ArrayList());
 83        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
 84                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/SimpleAction-validationAlias-validation.xml")),
 85                new ArrayList());
 86         actionValidatorManager.getValidators(SimpleAction.class, alias);
 87        mockValidatorFileParser.verify();
 88    }
 89
 90    public void testBuildsValidatorsForAliasError() {
 91        boolean pass = false;
 92        try {
 93            mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
 94                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/TestBean-validation.xml")),
 95                new ArrayList());
 96            mockValidatorFileParser.expectAndThrow("parseActionValidatorConfigs",
 97                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/TestBean-badtest-validation.xml")),
 98                new ConfigurationException());
 99            List validatorList = actionValidatorManager.getValidators(TestBean.class, "badtest");
100        } catch (XWorkException ex) {
101            pass = true;
102        }
103        mockValidatorFileParser.verify();
104        assertTrue("Didn't throw exception on load failure", pass);
105    }
106
107
108    public void testGetValidatorsForInterface() {
109        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
110                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/test/DataAware-validation.xml")),
111                new ArrayList());
112        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
113                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/test/DataAware-validationAlias-validation.xml")),
114                new ArrayList());
115        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
116                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/test/DataAware2-validation.xml")),
117                new ArrayList());
118        actionValidatorManager.getValidators(DataAware2.class, alias);
119        mockValidatorFileParser.verify();
120    }
121
122    public void testGetValidatorsFromInterface() {
123        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
124                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/SimpleAction-validation.xml")),
125                new ArrayList());
126        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
127                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/SimpleAction-validationAlias-validation.xml")),
128                new ArrayList());
129        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
130                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/test/DataAware-validation.xml")),
131                new ArrayList());
132        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
133                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/test/DataAware-validationAlias-validation.xml")),
134                new ArrayList());
135        actionValidatorManager.getValidators(SimpleAction3.class, alias);
136        mockValidatorFileParser.verify();
137    }
138
139    public void testSameAliasWithDifferentClass() {
140        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
141                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/SimpleAction-validation.xml")),
142                new ArrayList());
143        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
144                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/SimpleAction-validationAlias-validation.xml")),
145                new ArrayList());
146        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
147                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/test/SimpleAction2-validation.xml")),
148                new ArrayList());
149        mockValidatorFileParser.expectAndReturn("parseActionValidatorConfigs",
150                C.args(C.IS_NOT_NULL, C.IS_NOT_NULL, C.eq("com/opensymphony/xwork2/test/SimpleAction2-validationAlias-validation.xml")),
151                new ArrayList());
152        actionValidatorManager.getValidators(SimpleAction.class, alias);
153        actionValidatorManager.getValidators(SimpleAction2.class, alias);
154        mockValidatorFileParser.verify();
155    }
156
157    /*
158    // TODO: this all need to be converted to real unit tests
159
160    public void testSkipUserMarkerActionLevelShortCircuit() {
161        // get validators
162        List validatorList = actionValidatorManager.getValidators(User.class, null);
163        assertEquals(10, validatorList.size());
164
165        try {
166            User user = new User();
167            user.setName("Mark");
168            user.setEmail("bad_email");
169            user.setEmail2("bad_email");
170
171            ValidatorContext context = new GenericValidatorContext(user);
172            actionValidatorManager.validate(user, null, context);
173            assertTrue(context.hasFieldErrors());
174
175            // check field errors
176            List l = (List) context.getFieldErrors().get("email");
177            assertNotNull(l);
178            assertEquals(1, l.size());
179            assertEquals("Not a valid e-mail.", l.get(0));
180            l = (List) context.getFieldErrors().get("email2");
181            assertNotNull(l);
182            assertEquals(2, l.size());
183            assertEquals("Not a valid e-mail2.", l.get(0));
184            assertEquals("Email2 not from the right company.", l.get(1));
185
186            // check action errors
187            assertTrue(context.hasActionErrors());
188            l = (List) context.getActionErrors();
189            assertNotNull(l);
190            assertEquals(2, l.size()); // both expression test failed see User-validation.xml
191            assertEquals("Email does not start with mark", l.get(0));
192        } catch (ValidationException ex) {
193            ex.printStackTrace();
194            fail("Validation error: " + ex.getMessage());
195        }
196    }
197
198    public void testSkipAllActionLevelShortCircuit2() {
199        // get validators
200        List validatorList = actionValidatorManager.getValidators(User.class, null);
201        assertEquals(10, validatorList.size());
202
203        try {
204            User user = new User();
205            user.setName("Mark");
206            // * mark both email to starts with mark to get pass the action-level validator,
207            // so we could concentrate on testing the field-level validators (User-validation.xml)
208            // * make both email the same to pass the action-level validator at 
209            // UserMarker-validation.xml
210            user.setEmail("mark_bad_email_for_field_val@foo.com");
211            user.setEmail2("mark_bad_email_for_field_val@foo.com");
212
213            ValidatorContext context = new GenericValidatorContext(user);
214            actionValidatorManager.validate(user, null, context);
215            assertTrue(context.hasFieldErrors());
216
217            // check field errors
218            // we have an error in this field level, email does not ends with mycompany.com
219            List l = (List) context.getFieldErrors().get("email");
220            assertNotNull(l);
221            assertEquals(1, l.size()); // because email-field-val is short-circuit
222            assertEquals("Email not from the right company.", l.get(0));
223
224            
225            // check action errors
226            l = (List) context.getActionErrors();
227            assertFalse(context.hasActionErrors());
228            assertEquals(0, l.size());
229            
230            
231        } catch (ValidationException ex) {
232            ex.printStackTrace();
233            fail("Validation error: " + ex.getMessage());
234        }
235    }
236
237    
238    public void testActionLevelShortCircuit() throws Exception {
239    	
240    	List validatorList = actionValidatorManager.getValidators(User.class, null);
241        assertEquals(10, validatorList.size());
242        
243        User user = new User();
244        // all fields will trigger error, but sc of action-level, cause it to not appear
245        user.setName(null);		
246        user.setEmail("tmjee(at)yahoo.co.uk");
247        user.setEmail("tm_jee(at)yahoo.co.uk");
248        
249        ValidatorContext context = new GenericValidatorContext(user);
250        actionValidatorManager.validate(user, null, context);
251    	
252    	// check field level errors
253        // shouldn't have any because action error prevents validation of anything else
254        List l = (List) context.getFieldErrors().get("email2");
255        assertNull(l);
256    	
257    	
258        // check action errors
259        assertTrue(context.hasActionErrors());
260        l = (List) context.getActionErrors();
261        assertNotNull(l);
262        // we only get one, because UserMarker-validation.xml action-level validator
263        // already sc it   :-)
264        assertEquals(1, l.size()); 
265        assertEquals("Email not the same as email2", l.get(0));
266    }
267    
268    
269    public void testShortCircuitNoErrors() {
270        // get validators
271        List validatorList = actionValidatorManager.getValidators(User.class, null);
272        assertEquals(10, validatorList.size());
273
274        try {
275            User user = new User();
276            user.setName("Mark");
277            user.setEmail("mark@mycompany.com");
278            user.setEmail2("mark@mycompany.com");
279
280            ValidatorContext context = new GenericValidatorContext(user);
281            actionValidatorManager.validate(user, null, context);
282            assertFalse(context.hasErrors());
283        } catch (ValidationException ex) {
284            ex.printStackTrace();
285            fail("Validation error: " + ex.getMessage());
286        }
287    }
288    
289    public void testFieldErrorsOrder() throws Exception {
290    	ValidationOrderAction action = new ValidationOrderAction();
291    	actionValidatorManager.validate(action, "actionContext");
292    	Map fieldErrors = action.getFieldErrors();
293    	Iterator i = fieldErrors.entrySet().iterator();
294    	
295    	assertNotNull(fieldErrors);
296    	assertEquals(fieldErrors.size(), 12);
297    	
298    	
299    	Map.Entry e = (Map.Entry) i.next();
300    	assertEquals(e.getKey(), "username");
301    	assertEquals(((List)e.getValue()).get(0), "username required");
302    	
303    	e = (Map.Entry) i.next();
304    	assertEquals(e.getKey(), "password");
305    	assertEquals(((List)e.getValue()).get(0), "password required");
306    	
307    	e = (Map.Entry) i.next();
308    	assertEquals(e.getKey(), "confirmPassword");
309    	assertEquals(((List)e.getValue()).get(0), "confirm password required");
310    	
311    	e = (Map.Entry) i.next();
312    	assertEquals(e.getKey(), "firstName");
313    	assertEquals(((List)e.getValue()).get(0), "first name required");
314    	
315    	e = (Map.Entry) i.next();
316    	assertEquals(e.getKey(), "lastName");
317    	assertEquals(((List)e.getValue()).get(0), "last name required");
318    	
319    	e = (Map.Entry) i.next();
320    	assertEquals(e.getKey(), "city");
321    	assertEquals(((List)e.getValue()).get(0), "city is required");
322    	
323    	e = (Map.Entry) i.next();
324    	assertEquals(e.getKey(), "province");
325    	assertEquals(((List)e.getValue()).get(0), "province is required");
326    	
327    	e = (Map.Entry) i.next();
328    	assertEquals(e.getKey(), "country");
329    	assertEquals(((List)e.getValue()).get(0), "country is required");
330    	
331    	e = (Map.Entry) i.next();
332    	assertEquals(e.getKey(), "postalCode");
333    	assertEquals(((List)e.getValue()).get(0), "postal code is required");
334    	
335    	e = (Map.Entry) i.next();
336    	assertEquals(e.getKey(), "email");
337    	assertEquals(((List)e.getValue()).get(0), "email is required");
338    	
339    	e = (Map.Entry) i.next();
340    	assertEquals(e.getKey(), "website");
341    	assertEquals(((List)e.getValue()).get(0), "website is required");
342    	
343    	e = (Map.Entry) i.next();
344    	assertEquals(e.getKey(), "passwordHint");
345    	assertEquals(((List)e.getValue()).get(0), "password hint is required");
346    	
347    }
348    */
349}