Val*_*lva 5 playframework playframework-2.0
我是新手,所以我在这里PlayFramework阅读相关内容。但是,该链接适用于旧版本:2.1.1
@Test
public void authenticateSuccess() {
Result result = callAction(
controllers.routes.ref.Application.authenticate(),
fakeRequest().withFormUrlEncodedBody(ImmutableMap.of(
"email", "bob@example.com",
"password", "secret"))
);
assertEquals(302, status(result));
assertEquals("bob@example.com", session(result).get("email"));
}
Run Code Online (Sandbox Code Playgroud)
上面的代码在当前版本中会是什么样子2.5?
对于那些可能处于相同情况的人,以下是我解决问题的方法:
@Test
public void authenticateAndRedirect() {
Result result = route(new Http.RequestBuilder()
.method(POST)
.bodyForm(ImmutableMap.of("email", "valter@example.com", "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\": \"valter@example.com\", \"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());
}
Run Code Online (Sandbox Code Playgroud)
请记住,一旦用户通过身份验证,我就会将其重定向到另一个页面,这就是为什么我需要代码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));
}
Run Code Online (Sandbox Code Playgroud)