package org.springframework.webflow.mvc.servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import junit.framework.TestCase;
import org.springframework.context.ApplicationContext;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockServletContext;
import org.springframework.web.context.support.StaticWebApplicationContext;
import org.springframework.web.servlet.HandlerExecutionChain;
import org.springframework.webflow.core.FlowException;
import org.springframework.webflow.core.collection.MutableAttributeMap;
import org.springframework.webflow.definition.FlowDefinition;
import org.springframework.webflow.definition.StateDefinition;
import org.springframework.webflow.definition.registry.FlowDefinitionRegistryImpl;
import org.springframework.webflow.execution.FlowExecutionOutcome;
public class FlowHandlerMappingTests extends TestCase {
private FlowHandlerMapping mapping = new FlowHandlerMapping();
public void setUp() {
FlowDefinitionRegistryImpl registry = new FlowDefinitionRegistryImpl();
registry.registerFlowDefinition(new FlowDefinitionImpl());
registry.registerFlowDefinition(new FlowDefinitionImpl("foo/flow2"));
StaticWebApplicationContext context = new StaticWebApplicationContext();
context.getBeanFactory().registerSingleton("foo/flow2", new CustomFlowHandler());
mapping.setFlowRegistry(registry);
mapping.setServletContext(new MockServletContext());
mapping.setApplicationContext(context);
}
public void testGetHandler() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setContextPath("/springtravel");
request.setServletPath("/app");
request.setPathInfo("/flow");
request.setRequestURI("/springtravel/app/flow");
request.setMethod("GET");
HandlerExecutionChain chain = mapping.getHandler(request);
FlowHandler handler = (FlowHandler) chain.getHandler();
assertEquals("flow", handler.getFlowId());
}
public void testGetHandlerCustomFlowHandler() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setContextPath("/springtravel");
request.setServletPath("/app");
request.setPathInfo("/foo/flow2");
request.setRequestURI("/springtravel/app/foo/flow2");
request.setMethod("GET");
HandlerExecutionChain chain = mapping.getHandler(request);
assertNotNull(chain);
FlowHandler handler = (FlowHandler) chain.getHandler();
assertEquals("foo/flow2", handler.getFlowId());
assertTrue(handler instanceof CustomFlowHandler);
}
public void testGetHandlerNoHandler() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
request.setContextPath("/springtravel");
request.setServletPath("/app");
request.setPathInfo("/bogus");
request.setRequestURI("/springtravel/app/bogus");
request.setMethod("GET");
HandlerExecutionChain chain = mapping.getHandler(request);
assertNull(chain);
}
public void testGetHandlerNullFlowId() throws Exception {
MockHttpServletRequest request = new MockHttpServletRequest();
HandlerExecutionChain chain = mapping.getHandler(request);
assertNull(chain);
}
private static class FlowDefinitionImpl implements FlowDefinition {
private String flowId = "flow";
public FlowDefinitionImpl() {
}
public FlowDefinitionImpl(String flowId) {
super();
this.flowId = flowId;
}
public ApplicationContext getApplicationContext() {
throw new UnsupportedOperationException("Auto-generated method stub");
}
public ClassLoader getClassLoader() {
throw new UnsupportedOperationException("Auto-generated method stub");
}
public String getId() {
return flowId;
}
public String[] getPossibleOutcomes() {
throw new UnsupportedOperationException("Auto-generated method stub");
}
public StateDefinition getStartState() {
throw new UnsupportedOperationException("Auto-generated method stub");
}
public StateDefinition getState(String id) throws IllegalArgumentException {
throw new UnsupportedOperationException("Auto-generated method stub");
}
public boolean inDevelopment() {
throw new UnsupportedOperationException("Auto-generated method stub");
}
public MutableAttributeMap<Object> getAttributes() {
throw new UnsupportedOperationException("Auto-generated method stub");
}
public String getCaption() {
throw new UnsupportedOperationException("Auto-generated method stub");
}
public String getDescription() {
throw new UnsupportedOperationException("Auto-generated method stub");
}
public void destroy() {
}
}
public static class CustomFlowHandler implements FlowHandler {
public MutableAttributeMap<Object> createExecutionInputMap(HttpServletRequest request) {
throw new UnsupportedOperationException("Auto-generated method stub");
}
public String getFlowId() {
return "foo/flow2";
}
public String handleException(FlowException e, HttpServletRequest request, HttpServletResponse response) {
throw new UnsupportedOperationException("Auto-generated method stub");
}
public String handleExecutionOutcome(FlowExecutionOutcome outcome, HttpServletRequest request,
HttpServletResponse response) {
throw new UnsupportedOperationException("Auto-generated method stub");
}
}
}