package org.springframework.webflow.mvc.servlet;
import java.security.Principal;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import junit.framework.TestCase;
import org.springframework.mock.web.MockHttpServletRequest;
import org.springframework.mock.web.MockHttpServletResponse;
import org.springframework.mock.web.MockServletContext;
import org.springframework.validation.BindingResult;
import org.springframework.web.servlet.View;
import org.springframework.webflow.mvc.view.AbstractMvcView;
import org.springframework.webflow.test.MockFlowExecutionKey;
import org.springframework.webflow.test.MockRequestContext;
public class ServletMvcViewTests extends TestCase {
private boolean renderCalled;
private Map<String, ?> model;
public void testRender() throws Exception {
MockRequestContext context = new MockRequestContext();
context.getRequestScope().put("foo", "bar");
context.getFlowScope().put("bar", "baz");
context.getFlowScope().put("bindBean", new BindBean());
context.getConversationScope().put("baz", "boop");
context.getFlashScope().put("boop", "bing");
context.getMockExternalContext().setCurrentUser("Keith");
context.getMockExternalContext().setNativeContext(new MockServletContext());
context.getMockExternalContext().setNativeRequest(new MockHttpServletRequest());
context.getMockExternalContext().setNativeResponse(new MockHttpServletResponse());
context.getMockFlowExecutionContext().setKey(new MockFlowExecutionKey("c1v1"));
org.springframework.web.servlet.View mvcView = new MockView();
AbstractMvcView view = new ServletMvcView(mvcView, context);
view.render();
assertTrue(renderCalled);
assertEquals("bar", model.get("foo"));
assertEquals("baz", model.get("bar"));
assertEquals("boop", model.get("baz"));
assertEquals("bing", model.get("boop"));
assertEquals("c1v1", model.get("flowExecutionKey"));
assertEquals("Keith", ((Principal) model.get("currentUser")).getName());
assertEquals(context, model.get("flowRequestContext"));
assertEquals("/mockFlow?execution=c1v1", model.get("flowExecutionUrl"));
assertNull(model.get(BindingResult.MODEL_KEY_PREFIX + "bindBean"));
}
private class MockView implements View {
public String getContentType() {
return "text/html";
}
public void render(Map<String, ?> model, HttpServletRequest request, HttpServletResponse response)
throws Exception {
renderCalled = true;
ServletMvcViewTests.this.model = model;
}
}
public static class BindBean {
private String stringProperty;
private Integer integerProperty = 3;
private Date dateProperty;
public BindBean() {
Calendar cal = Calendar.getInstance();
cal.clear();
cal.set(Calendar.YEAR, 2008);
dateProperty = cal.getTime();
}
public String getStringProperty() {
return stringProperty;
}
public void setStringProperty(String stringProperty) {
this.stringProperty = stringProperty;
}
public Integer getIntegerProperty() {
return integerProperty;
}
public void setIntegerProperty(Integer integerProperty) {
this.integerProperty = integerProperty;
}
public Date getDateProperty() {
return dateProperty;
}
public void setDateProperty(Date dateProperty) {
this.dateProperty = dateProperty;
}
}
}