@Test
  public void updateTargetUrlWithContextLoader() throws Exception {
    StaticWebApplicationContext wac = new StaticWebApplicationContext();
    wac.registerSingleton("requestDataValueProcessor", RequestDataValueProcessorWrapper.class);

    MockServletContext servletContext = new MockServletContext();
    ContextLoader contextLoader = new ContextLoader(wac);
    contextLoader.initWebApplicationContext(servletContext);

    try {
      RequestDataValueProcessor mockProcessor = mock(RequestDataValueProcessor.class);
      wac.getBean(RequestDataValueProcessorWrapper.class)
          .setRequestDataValueProcessor(mockProcessor);

      RedirectView rv = new RedirectView();
      rv.setUrl("/path");

      MockHttpServletRequest request = createRequest();
      HttpServletResponse response = new MockHttpServletResponse();

      given(mockProcessor.processUrl(request, "/path")).willReturn("/path?key=123");

      rv.render(new ModelMap(), request, response);

      verify(mockProcessor).processUrl(request, "/path");
    } finally {
      contextLoader.closeWebApplicationContext(servletContext);
    }
  }
 @Test
 public void explicitStatusCodeHttp10() throws Exception {
   RedirectView rv = new RedirectView();
   rv.setUrl("http://url.somewhere.com");
   rv.setStatusCode(HttpStatus.MOVED_PERMANENTLY);
   MockHttpServletRequest request = createRequest();
   MockHttpServletResponse response = new MockHttpServletResponse();
   rv.render(new HashMap<String, Object>(), request, response);
   assertEquals(301, response.getStatus());
   assertEquals("http://url.somewhere.com", response.getHeader("Location"));
 }
 @Test
 public void attributeStatusCodeHttp11() throws Exception {
   RedirectView rv = new RedirectView();
   rv.setUrl("http://url.somewhere.com");
   rv.setHttp10Compatible(false);
   MockHttpServletRequest request = createRequest();
   request.setAttribute(View.RESPONSE_STATUS_ATTRIBUTE, HttpStatus.CREATED);
   MockHttpServletResponse response = new MockHttpServletResponse();
   rv.render(new HashMap<String, Object>(), request, response);
   assertEquals(201, response.getStatus());
   assertEquals("http://url.somewhere.com", response.getHeader("Location"));
 }
 @Test
 public void http11() throws Exception {
   RedirectView rv = new RedirectView();
   rv.setUrl("http://url.somewhere.com");
   rv.setHttp10Compatible(false);
   MockHttpServletRequest request = createRequest();
   MockHttpServletResponse response = new MockHttpServletResponse();
   request.setAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE, new FlashMap());
   request.setAttribute(
       DispatcherServlet.FLASH_MAP_MANAGER_ATTRIBUTE, new SessionFlashMapManager());
   rv.render(new HashMap<String, Object>(), request, response);
   assertEquals(303, response.getStatus());
   assertEquals("http://url.somewhere.com", response.getHeader("Location"));
 }
  @Test
  public void flashMap() throws Exception {
    RedirectView rv = new RedirectView();
    rv.setUrl("http://url.somewhere.com/path");
    rv.setHttp10Compatible(false);
    MockHttpServletRequest request = createRequest();
    HttpServletResponse response = new MockHttpServletResponse();
    FlashMap flashMap = new FlashMap();
    flashMap.put("successMessage", "yay!");
    request.setAttribute(DispatcherServlet.OUTPUT_FLASH_MAP_ATTRIBUTE, flashMap);
    ModelMap model = new ModelMap("id", "1");
    rv.render(model, request, response);
    assertEquals(303, response.getStatus());
    assertEquals("http://url.somewhere.com/path?id=1", response.getHeader("Location"));

    assertEquals("/path", flashMap.getTargetRequestPath());
    assertEquals(model, flashMap.getTargetRequestParams().toSingleValueMap());
  }
  @Test
  public void updateTargetUrl() throws Exception {
    StaticWebApplicationContext wac = new StaticWebApplicationContext();
    wac.registerSingleton("requestDataValueProcessor", RequestDataValueProcessorWrapper.class);
    wac.setServletContext(new MockServletContext());
    wac.refresh();

    RequestDataValueProcessor mockProcessor = mock(RequestDataValueProcessor.class);
    wac.getBean(RequestDataValueProcessorWrapper.class).setRequestDataValueProcessor(mockProcessor);

    RedirectView rv = new RedirectView();
    rv.setApplicationContext(wac); // Init RedirectView with WebAppCxt
    rv.setUrl("/path");

    MockHttpServletRequest request = createRequest();
    request.setAttribute(DispatcherServlet.WEB_APPLICATION_CONTEXT_ATTRIBUTE, wac);
    HttpServletResponse response = new MockHttpServletResponse();

    given(mockProcessor.processUrl(request, "/path")).willReturn("/path?key=123");

    rv.render(new ModelMap(), request, response);

    verify(mockProcessor).processUrl(request, "/path");
  }
 @Test(expected = IllegalArgumentException.class)
 public void noUrlSet() throws Exception {
   RedirectView rv = new RedirectView();
   rv.afterPropertiesSet();
 }