/* * $Id$ * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ package org.apache.struts2.oval.interceptor; import com.opensymphony.xwork2.ActionProxy; import com.opensymphony.xwork2.ValidationAware; import com.opensymphony.xwork2.XWorkTestCase; import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider; import net.sf.oval.configuration.Configurer; import java.util.Arrays; import java.util.List; import java.util.Locale; import java.util.Map; public class OValValidationInterceptorTest extends XWorkTestCase { public void testSimpleFieldsXML() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldsXML", null, null); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors(); assertNotNull(fieldErrors); assertEquals(2, fieldErrors.size()); assertValue(fieldErrors, "firstName", Arrays.asList("firstName cannot be null")); assertValue(fieldErrors, "lastName", Arrays.asList("lastName cannot be null")); } public void testSimpleFieldsJPAAnnotations() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldsJPA", null, null); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors(); assertNotNull(fieldErrors); assertEquals(1, fieldErrors.size()); assertValue(fieldErrors, "firstName", Arrays.asList("firstName cannot be null")); } public void testValidationInMethods() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "validationInMethods", null, null); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors(); assertNotNull(fieldErrors); assertEquals(4, fieldErrors.size()); assertValue(fieldErrors, "name", Arrays.asList("name cannot be null")); assertValue(fieldErrors, "SisyphusHasTheAnswer", Arrays.asList("SisyphusHasTheAnswer() cannot be null")); assertValue(fieldErrors, "thereAnyMeaningInLife", Arrays.asList("thereAnyMeaningInLife cannot be null")); assertValue(fieldErrors, "theManingOfLife", Arrays.asList("theManingOfLife cannot be null")); } public void testSimpleFieldsInheritedXML() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldsXMLChild", null, null); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors(); assertNotNull(fieldErrors); assertEquals(3, fieldErrors.size()); assertValue(fieldErrors, "firstName", Arrays.asList("firstName cannot be null")); assertValue(fieldErrors, "lastName", Arrays.asList("lastName cannot be null")); assertValue(fieldErrors, "middleName", Arrays.asList("middleName cannot be null")); } public void testSlashesInNameWithWildcardsHitsCache() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldsXML/test", null, null); baseActionProxy.execute(); ActionProxy baseActionProxy2 = actionProxyFactory.createActionProxy("oval", "simpleFieldsXML/test2", null, null); baseActionProxy2.execute(); DummyDefaultOValValidationManager manager = (DummyDefaultOValValidationManager) container.getInstance(OValValidationManager.class); assertEquals(1, manager.getCache().size()); } public void testXMLLoadCaching() { OValValidationManager manager = container.getInstance(OValValidationManager.class); List<Configurer> configurers = manager.getConfigurers(SimpleFieldsXML.class, "simpleFieldsXMLCaching", false); assertNotNull(configurers); assertEquals(2, configurers.size()); //load again and check it is the same instance List<Configurer> configurers2 = manager.getConfigurers(SimpleFieldsXML.class, "simpleFieldsXMLCaching", false); assertNotNull(configurers2); assertEquals(2, configurers2.size()); assertSame(configurers.get(0), configurers2.get(0)); } public void testSimpleField() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleField", null, null); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors(); assertNotNull(fieldErrors); assertEquals(1, fieldErrors.size()); assertValue(fieldErrors, "name", Arrays.asList("name cannot be null")); } public void testSimpleFieldNegative() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleField", null, null); SimpleField action = (SimpleField) baseActionProxy.getAction(); action.setName("123"); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = action.getFieldErrors(); assertNotNull(fieldErrors); assertEquals(0, fieldErrors.size()); } public void testSimpleFieldTooLong() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldTooLong", null, null); SimpleField action = (SimpleField) baseActionProxy.getAction(); action.setName("12367"); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = action.getFieldErrors(); assertNotNull(fieldErrors); assertEquals(1, fieldErrors.size()); assertValue(fieldErrors, "name", Arrays.asList("name is not between 0 and 3 characters long")); assertValue(fieldErrors, "name", Arrays.asList("name is not between 0 and 3 characters long")); } public void testSimpleFieldMultipleValidators() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleField", null, null); SimpleField action = (SimpleField) baseActionProxy.getAction(); action.setName("12345"); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = action.getFieldErrors(); assertNotNull(fieldErrors); assertEquals(1, fieldErrors.size()); assertNotNull(fieldErrors.get("name")); } public void testSimpleMethod() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleMethod", null, null); SimpleMethod action = (SimpleMethod) baseActionProxy.getAction(); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = action.getFieldErrors(); assertNotNull(fieldErrors); assertEquals(1, fieldErrors.size()); assertNotNull(fieldErrors.get("someName")); } public void testSimpleFieldOGNLExpression() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldOGNL", null, null); SimpleFieldOGNLExpression action = (SimpleFieldOGNLExpression) baseActionProxy.getAction(); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = action.getFieldErrors(); assertNotNull(fieldErrors); assertEquals(1, fieldErrors.size()); assertNotNull(fieldErrors.get("name")); } public void testFieldsWithMultipleProfiles() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "fieldsWidthProfiles13", null, null); FieldsWithProfiles action = (FieldsWithProfiles) baseActionProxy.getAction(); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = action.getFieldErrors(); assertNotNull(fieldErrors); assertEquals(2, fieldErrors.size()); assertNotNull(fieldErrors.get("firstName")); assertNotNull(fieldErrors.get("lastName")); } public void testSimpleFieldOGNLExpressionNegative() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldOGNL", null, null); SimpleFieldOGNLExpression action = (SimpleFieldOGNLExpression) baseActionProxy.getAction(); action.setName("Meursault"); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = action.getFieldErrors(); assertNotNull(fieldErrors); assertEquals(0, fieldErrors.size()); } public void testSimpleFieldI18n() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldI18n", null, null); SimpleFieldI18n action = (SimpleFieldI18n) baseActionProxy.getAction(); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = action.getFieldErrors(); assertNotNull(fieldErrors); assertEquals(1, fieldErrors.size()); assertValue(fieldErrors, "name", Arrays.asList("name cannot be null")); } public void testSimpleFieldI18n2() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldI18n", null, null); SimpleFieldI18n action = (SimpleFieldI18n) baseActionProxy.getAction(); action.setName("123123"); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = action.getFieldErrors(); assertNotNull(fieldErrors); assertEquals(1, fieldErrors.size()); assertValue(fieldErrors, "name", Arrays.asList("name value is too long, allowed length is 3")); } public void testSimpleFieldI18nDefaultKey() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldI18nDefaultKey", null, null); SimpleFieldI18nDefaultKey action = (SimpleFieldI18nDefaultKey) baseActionProxy.getAction(); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = action.getFieldErrors(); assertNotNull(fieldErrors); assertEquals(1, fieldErrors.size()); assertValue(fieldErrors, "name", Arrays.asList("notnull.field")); } public void testProgrammaticValidation() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleField", null, null); SimpleField action = (SimpleField) baseActionProxy.getAction(); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors(); assertNotNull(fieldErrors); assertEquals(1, fieldErrors.size()); assertValue(fieldErrors, "name", Arrays.asList("name cannot be null")); assertTrue(action.isValidateCalled()); assertTrue(action.isValidateExecuteCalled()); } public void testProgrammaticValidationDontInvokeValidate() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldNoValidate", null, null); SimpleField action = (SimpleField) baseActionProxy.getAction(); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors(); assertNotNull(fieldErrors); assertEquals(1, fieldErrors.size()); assertValue(fieldErrors, "name", Arrays.asList("name cannot be null")); assertFalse(action.isValidateCalled()); assertTrue(action.isValidateExecuteCalled()); } public void testProgrammaticValidationDontInvokeProgrammatic() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldNoProgrammatic", null, null); SimpleField action = (SimpleField) baseActionProxy.getAction(); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors(); assertNotNull(fieldErrors); assertEquals(1, fieldErrors.size()); assertValue(fieldErrors, "name", Arrays.asList("name cannot be null")); assertFalse(action.isValidateCalled()); assertFalse(action.isValidateExecuteCalled()); } public void testModelDrivenAction() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "modelDrivenAction", null, null); ModelDrivenAction action = (ModelDrivenAction) baseActionProxy.getAction(); action.getModel().setName(null); action.getModel().setEmail(null); action.getModel().getAddress().setStreet("short"); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors(); assertNotNull(fieldErrors); assertEquals(5, fieldErrors.size()); // 5: as there will be field errors for 'model' and 'address' themselves assertValue(fieldErrors, "name", Arrays.asList("name cannot be null")); assertValue(fieldErrors, "email", Arrays.asList("email cannot be null")); assertValue(fieldErrors, "address.street", Arrays.asList("street cannot be smaller than 7 characters")); } public void testMemberObject() throws Exception { ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "memberObject", null, null); MemberObject action = (MemberObject) baseActionProxy.getAction(); action.getPerson().setName(null); action.getPerson().setEmail(null); action.getPerson().getAddress().setStreet("short"); baseActionProxy.execute(); Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors(); assertNotNull(fieldErrors); assertEquals(5, fieldErrors.size()); // 5: as there will be field errors for 'person' and 'person.address' themselves assertValue(fieldErrors, "person.name", Arrays.asList("name cannot be null")); assertValue(fieldErrors, "person.email", Arrays.asList("email cannot be null")); assertValue(fieldErrors, "person.address.street", Arrays.asList("street cannot be smaller than 7 characters")); } private void assertValue(Map<String, List<String>> map, String key, List<String> expectedValues) { assertNotNull(map); assertNotNull(key); assertNotNull(expectedValues); List<String> values = map.get(key); assertNotNull(values); assertEquals(expectedValues, values); } @Override protected void setUp() throws Exception { Locale.setDefault(Locale.US); super.setUp(); loadConfigurationProviders(new XmlConfigurationProvider("oval-test.xml")); } }