Chcę napisać test dla mojego kontrolera:kontroler Testowanie z fałszywymi sesji
Result changeAction = callAction(controllers.routes.ref.Users.changePassword());
assertThat(status(changeAction)).isEqualTo(OK);
Mam kod stanu HTTP - 300.
Zgadza się to przekierowanie bo mam klasy o nazwie zabezpieczone
package controllers;
import play.mvc.*;
import play.mvc.Http.*;
public class Secured extends Security.Authenticator {
@Override
public String getUsername(Context ctx) {
return ctx.session().get("userId");
}
@Override
public Result onUnauthorized(Context ctx) {
return redirect(routes.Users.login(ctx.request().uri()));
}
}
A kiedy używam @Security.Authenticated(Secured.class)
adnotacji do metody kontrolera przekierowuje jeśli sesja z „userid” nie istnieje.
Pytanie brzmi: jak mogę sfałszować sesję?
Próbowałem oczywiście zadzwonić Controller.session("usderId", "2");
I got wyjątek:
java.lang.RuntimeException: There is no HTTP Context available from here.
at play.mvc.Http$Context.current(Http.java:30)
at play.mvc.Controller.session(Controller.java:54)
at play.mvc.Controller.session(Controller.java:61)
at controllers.UsersTest.testUnloginedChangePassword(UsersTest.java:35)
Moje pytanie brzmi: w jaki sposób fałszywy sesji dla kontrolera?
I jedno dodatkowe pytanie: jak testować trasy bez używania przestarzałego API, np. Result result = routeAndCall(fakeRequest(GET, "/change_password"));
?
Znajduję rozwiązanie 3 minuty temu, zanim przejrzę na twoją odpowiedź. W każdym razie dziękuję, znowu! :RE –