@Test
  public void formLoginSucceeds() throws Exception {

    ResponseEntity<Void> result;
    String location;
    String cookie;

    HttpHeaders uaaHeaders = new HttpHeaders();
    HttpHeaders appHeaders = new HttpHeaders();
    uaaHeaders.setAccept(Arrays.asList(MediaType.TEXT_HTML));
    appHeaders.setAccept(Arrays.asList(MediaType.TEXT_HTML));

    // *** GET /app/
    result = serverRunning.getForResponse("/", appHeaders);
    assertEquals(HttpStatus.FOUND, result.getStatusCode());
    location = result.getHeaders().getLocation().toString();

    cookie = result.getHeaders().getFirst("Set-Cookie");
    assertNotNull("Expected cookie in " + result.getHeaders(), cookie);
    appHeaders.set("Cookie", cookie);

    assertTrue("Wrong location: " + location, location.contains("/login"));
    // *** GET /app/login
    result = serverRunning.getForResponse(location, appHeaders);
    assertEquals(HttpStatus.FOUND, result.getStatusCode());
    location = result.getHeaders().getLocation().toString();

    assertTrue("Wrong location: " + location, location.contains("/oauth/authorize"));
    // *** GET /uaa/oauth/authorize
    result = serverRunning.getForResponse(location, uaaHeaders);
    assertEquals(HttpStatus.FOUND, result.getStatusCode());
    location = result.getHeaders().getLocation().toString();

    cookie = result.getHeaders().getFirst("Set-Cookie");
    assertNotNull("Expected cookie in " + result.getHeaders(), cookie);
    uaaHeaders.set("Cookie", cookie);

    assertTrue(
        "Wrong location: " + location, location.contains(serverRunning.getAuthServerUrl("/login")));
    location = serverRunning.getAuthServerUrl("/login.do");

    MultiValueMap<String, String> formData;
    formData = new LinkedMultiValueMap<String, String>();
    formData.add("username", testAccounts.getUserName());
    formData.add("password", testAccounts.getPassword());

    // *** POST /uaa/login.do
    result = serverRunning.postForResponse(location, uaaHeaders, formData);

    cookie = result.getHeaders().getFirst("Set-Cookie");
    assertNotNull("Expected cookie in " + result.getHeaders(), cookie);
    uaaHeaders.set("Cookie", cookie);

    assertEquals(HttpStatus.FOUND, result.getStatusCode());
    location = result.getHeaders().getLocation().toString();

    assertTrue("Wrong location: " + location, location.contains("/oauth/authorize"));
    // *** GET /uaa/oauth/authorize
    result = serverRunning.getForResponse(location, uaaHeaders);

    // If there is no token in place already for this client we get the approval page.
    // TODO: revoke the token so we always get the approval page
    if (result.getStatusCode() == HttpStatus.OK) {
      location = serverRunning.getAuthServerUrl("/oauth/authorize");

      formData = new LinkedMultiValueMap<String, String>();
      formData.add("user_oauth_approval", "true");

      // *** POST /uaa/oauth/authorize
      result = serverRunning.postForResponse(location, uaaHeaders, formData);
    }

    location = result.getHeaders().getLocation().toString();

    assertTrue("Wrong location: " + location, location.contains(serverRunning.getUrl("/login")));
    // *** GET /app/login
    result = serverRunning.getForResponse(location, appHeaders);

    assertEquals(HttpStatus.FOUND, result.getStatusCode());
    location = result.getHeaders().getLocation().toString();

    // SUCCESS
    assertTrue("Wrong location: " + location, location.endsWith("/"));

    // *** GET /app/
    result = serverRunning.getForResponse(location, appHeaders);
    // System.err.println(result.getHeaders());
    assertEquals(HttpStatus.OK, result.getStatusCode());
  }