2016-11-02 5 views
2

Я новичок в PlayFramework, поэтому я читаю об этом here. Тем не менее, ссылка на старую версию, 2.1.1:Как проверить форму на Play Framework 2.5?

@Test 
public void authenticateSuccess() { 
    Result result = callAction(
     controllers.routes.ref.Application.authenticate(), 
     fakeRequest().withFormUrlEncodedBody(ImmutableMap.of(
      "email", "[email protected]", 
      "password", "secret")) 
    ); 
    assertEquals(302, status(result)); 
    assertEquals("[email protected]", session(result).get("email")); 
} 

Как выше код будет выглядеть в текущей версии 2.5?

ответ

2

Для тех, кто может быть в той же ситуации, вот как я решил мою проблему:

@Test 
public void authenticateAndRedirect() { 
    Result result = route(new Http.RequestBuilder() 
      .method(POST) 
      .bodyForm(ImmutableMap.of("email", "[email protected]", "password", "secret")) 
      .uri(controllers.routes.ApplicationController.authenticate().url())); 
    assertEquals(SEE_OTHER, result.status()); 
} 

@Test 
public void authenticateAndRedirectJson() throws Exception { 

    JsonNode jsonNode = (new ObjectMapper()).readTree("{ \"email\": \"[email protected]\", \"password\": \"secret\" }"); 
    Http.RequestBuilder request = new Http.RequestBuilder() 
      .method("POST") 
      .bodyJson(jsonNode) 
      .uri(controllers.routes.ApplicationController.authenticate().url()); 
    Result result = route(request); 

    assertEquals(SEE_OTHER, result.status()); 
} 

Имейте в виду, что я «м перенаправлять пользователя на другую страницу, как только он» S с проверкой подлинности, что»s почему я ожидаю код SEE_OTHER=303

public Result authenticate() { 
    Form<Login> form = formFactory.form(Login.class).bindFromRequest(); 

    if (form.hasErrors()) { 
     return badRequest(login.render(form)); 
    } 

    Optional<User> maybeUser = User.findByEmail(form.get().email); 

    if (maybeUser.isPresent()) { 
     session("email", maybeUser.get().email); 
     return redirect(routes.ApplicationController.index()); 
    } 

    return badRequest(login.render(form)); 
}