package org.appfuse.webapp.action; import com.opensymphony.xwork2.ActionContext; import com.opensymphony.xwork2.config.Configuration; import com.opensymphony.xwork2.config.ConfigurationManager; import com.opensymphony.xwork2.config.providers.XWorkConfigurationProvider; import com.opensymphony.xwork2.inject.Container; import com.opensymphony.xwork2.util.LocalizedTextUtil; import com.opensymphony.xwork2.util.ValueStack; import com.opensymphony.xwork2.util.ValueStackFactory; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.struts2.ServletActionContext; import org.junit.After; import org.junit.Before; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.ApplicationContext; import org.springframework.mock.web.MockHttpServletRequest; import org.springframework.mock.web.MockHttpSession; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import javax.transaction.Transactional; import java.util.HashMap; /** * Base class for running Struts 2 Action tests. * * @author <a href="mailto:matt@raibledesigns.com">Matt Raible</a> */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration( locations = {"classpath:/applicationContext-resources.xml", "classpath:/applicationContext-dao.xml", "classpath:/applicationContext-service.xml", "classpath*:/applicationContext.xml", "classpath:**/applicationContext*.xml"}) @Transactional public abstract class BaseActionTestCase { /** * Transient log to prevent session synchronization issues - children can use instance for logging. */ protected transient final Log log = LogFactory.getLog(getClass()); @Autowired protected ApplicationContext applicationContext; @Before public void onSetUp() { log.debug("setting default resource bundle"); LocalizedTextUtil.addDefaultResourceBundle("messages"); // Initialize ActionContext ConfigurationManager configurationManager = new ConfigurationManager(); configurationManager.addContainerProvider(new XWorkConfigurationProvider()); Configuration config = configurationManager.getConfiguration(); Container container = config.getContainer(); ValueStack stack = container.getInstance(ValueStackFactory.class).createValueStack(); stack.getContext().put(ActionContext.CONTAINER, container); ActionContext.setContext(new ActionContext(stack.getContext())); MockHttpServletRequest request = new MockHttpServletRequest(); // populate the request so getRequest().getSession() doesn't fail in BaseAction.java ServletActionContext.setRequest(request); } }