Сохранить сеанс при последующих вызовах Java для fakeRequest из Play 2.0

Я ищу способ сохранить сеанс при использовании fakeRequest Play 2.0 в моих тестах Java, но мои попытки терпят неудачу при вызове методов в JAR-файлах на основе Scala.

Основываясь на запросе на вытягивание, упомянутом в вопросе Scala Добавление значений в сеанс во время тестирования (FakeRequest, FakeApplication), я решил, что в Java может работать следующее:

public Session getSession(Result result) {
  play.api.mvc.Cookies scalaCookies =
      play.api.test.Helpers.cookies(result.getWrappedResult());
  play.api.mvc.Cookie scalaSessionCookie =
      scalaCookies.get(play.api.mvc.Session.COOKIE_NAME()).get();
  scala.Option optionalCookie =
      scala.Option.apply(scalaSessionCookie);

  // Compiles fine, but fails with NoSuchMethodError:
  play.api.mvc.Session scalaSession =
      play.api.mvc.Session.decodeFromCookie(optionalCookie);

  return new play.mvc.Http.Session(Scala.asJava(scalaSession.data()));
}

Это компилируется просто отлично, но пока запустив тесты, я понял:

java.lang.NoSuchMethodError: 
  play.api.mvc.Session.decodeFromCookie(Lscala/Option;)Lplay/api/mvc/Session;

Будучи абсолютным новичком в Scala, я действительно понятия не имею, насколько я близок к этому. Сессия Scala раскрывает (чертит) этот метод через CookieBaker, я думаю.

Обратите внимание, что я не обязательно ищу способ запустить приведенный выше код; вышеизложенное — это всего лишь первый (возможный) шаг для получения сеанса. Затем я, вероятно, попытаюсь использовать что-то вроде play.api.mvc.Session.encodeAsCookie(session), чтобы передать его последующим запросам. Как и для демо ZenTasks:

@Test
public void testLoginAndMore() {
  Helpers.running(Helpers.fakeApplication(Helpers.inMemoryDatabase()), 
  new Runnable() {
    public void run() {
      Map data = new HashMap();
      data.put("email", "guillaume@sample.com");
      data.put("password", "secret");

      Result result = 
        callAction(controllers.routes.ref.Application.authenticate(),
          fakeRequest().withFormUrlEncodedBody(data));
      assertThat(status(result)).isEqualTo(Status.SEE_OTHER);
      assertThat(redirectLocation(result)).isEqualTo("/");

      // All fine; we're logged in. Now somehow preserve the cookie. This
      // does NOT do the trick:
      Session session = getSession(result);
      // ...subsequent callAction(..)s, somehow passing the session cookie 
    }
  });
}

Для 1.x, Безопасный модуль Playframework: как «войти в систему» ​​для тестирования защищенного контроллера в FunctionalTest?помогает, но есть вещи кажется, изменились в 2.0, и я никогда не использовал 1.x.

5
задан Community 23 May 2017 в 10:24
поделиться