blob: cf0c6ee8a3be2d7ff435e61c07e5659fa995049e [file] [log] [blame]
/*
* 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 com.opensymphony.xwork2.interceptor;
import com.opensymphony.xwork2.*;
import com.opensymphony.xwork2.config.Configuration;
import com.opensymphony.xwork2.config.ConfigurationException;
import com.opensymphony.xwork2.config.ConfigurationProvider;
import com.opensymphony.xwork2.config.entities.ActionConfig;
import com.opensymphony.xwork2.config.entities.InterceptorConfig;
import com.opensymphony.xwork2.config.entities.InterceptorMapping;
import com.opensymphony.xwork2.config.entities.PackageConfig;
import com.opensymphony.xwork2.config.entities.ResultConfig;
import com.opensymphony.xwork2.config.providers.XmlConfigurationProvider;
import com.opensymphony.xwork2.inject.ContainerBuilder;
import com.opensymphony.xwork2.util.location.LocatableProperties;
import java.util.*;
import org.apache.struts2.TestResult;
/**
* Unit test for {@link ChainingInterceptor} with a configuration provider.
*
*/
public class ChainingInterceptorWithConfigTest extends XWorkTestCase {
static String CHAINED_ACTION = "chainedAction";
static String CHAINTO_ACTION = "chaintoAction";
ObjectFactory objectFactory;
public void testTwoExcludesPropertiesChained() throws Exception {
assertNotNull(objectFactory);
ActionProxy proxy = actionProxyFactory.createActionProxy("", CHAINED_ACTION, null, null);
SimpleAction chainedAction = (SimpleAction) proxy.getAction();
chainedAction.setBar(1);
chainedAction.setFoo(1);
chainedAction.setBlah("WW-4528");
proxy.execute();
}
@Override
protected void setUp() throws Exception {
super.setUp();
XmlConfigurationProvider provider = new XmlConfigurationProvider("xwork-default.xml");
container.inject(provider);
this.objectFactory = container.getInstance(ObjectFactory.class);
loadConfigurationProviders(provider, new MockConfigurationProvider());
}
private class MockConfigurationProvider implements ConfigurationProvider {
private Configuration config;
public void init(Configuration configuration) throws ConfigurationException {
this.config = configuration;
}
public boolean needsReload() {
return false;
}
public void destroy() { }
public void register(ContainerBuilder builder, LocatableProperties props) throws ConfigurationException {
if (!builder.contains(ObjectFactory.class)) {
builder.factory(ObjectFactory.class);
}
if (!builder.contains(ActionProxyFactory.class)) {
builder.factory(ActionProxyFactory.class, DefaultActionProxyFactory.class);
}
}
public void loadPackages() throws ConfigurationException {
HashMap<String, String> interceptorParams = new HashMap<>();
interceptorParams.put("excludes", "blah,bar");
HashMap successParams1 = new HashMap();
successParams1.put("propertyName", "baz");
successParams1.put("expectedValue", 1);
HashMap successParams2 = new HashMap();
successParams2.put("propertyName", "blah");
successParams2.put("expectedValue", null);
InterceptorConfig chainingInterceptorConfig = new InterceptorConfig.Builder("chainStack", ChainingInterceptor.class.getName()).build();
PackageConfig packageConfig = new PackageConfig.Builder("default")
.addActionConfig(CHAINED_ACTION, new ActionConfig.Builder("defaultPackage", CHAINED_ACTION, SimpleAction.class.getName())
.addResultConfig(new ResultConfig.Builder(Action.ERROR, ActionChainResult.class.getName()).addParam("actionName", CHAINTO_ACTION).build())
.build())
.addActionConfig(CHAINTO_ACTION, new ActionConfig.Builder("defaultPackage", CHAINTO_ACTION, SimpleAction.class.getName())
.addInterceptors(Collections.singletonList(new InterceptorMapping("chainStack", objectFactory.buildInterceptor(chainingInterceptorConfig, interceptorParams))))
.addResultConfig(new ResultConfig.Builder(Action.SUCCESS, TestResult.class.getName()).addParams(successParams1).build())
.addResultConfig(new ResultConfig.Builder(Action.ERROR, TestResult.class.getName()).addParams(successParams2).build())
.build())
.build();
config.addPackageConfig("defaultPackage", packageConfig);
config.addPackageConfig("default", new PackageConfig.Builder(packageConfig).name("default").build());
}
}
}