EDIT : Я использую Play! Версия 1.2 (производственный выпуск)
Я хочу протестировать действия контроллера, которые защищены модулем Secure m с помощью Play! версия 1.2 (производственный выпуск) Я хочу протестировать действия контроллера, которые защищены классом модуля Secure, поэтому мне нужно войти в систему до тестирования моего контроллера (в противном случае я ...
EDIT : Я использую Play! Версия 1.2 (производственный выпуск)
Я хочу протестировать действия контроллера, которые защищены модулем Secure m с помощью Play! версия 1.2 (производственный выпуск) Я хочу протестировать действия контроллера, которые защищены классом модуля Secure, поэтому мне нужно войти в систему перед тестированием моего контроллера (в противном случае я ...
EDIT : Я использую Play! Версия 1.2 (производственный выпуск)
Я хочу протестировать действия контроллера, которые защищены модулем Secure class, поэтому мне нужно войти в систему перед тестированием моего контроллера (в противном случае я буду перенаправлен на страницу входа).
Я пытался войти в систему перед вызовом защищенного действия. Вот как выглядит мой FunctionalTest:
@Test
public void someTestOfASecuredAction() {
Map<String, String> loginUserParams = new HashMap<String, String>();
loginUserParams.put("username", "admin");
loginUserParams.put("password", "admin");
// Login here so the following request will be authenticated:
Response response = POST("/login", loginUserParams);
// The following is an action that requires an authenticated user:
Map<String, String> params;
params.put("someparam", "somevalue");
response = POST("/some/secured/action", params);
assertIsOk(response); // this always fails because it is a 302 redirecting to /login
}
Пройдя по коду, я убедился, что сообщение о входе работает - оно вызывает ответ перенаправления с указанием местоположения на домашней странице (что указывает на успешный вход).
Но затем при последующем вызове защищенного действия я всегда перенаправляюсь на Страница "/ login" - указывает на то, что мой предыдущий логин не использовался для второго запроса POST.
Заглянув в исходный код FunctionalTest, я обнаружил, что существует перехватчик @Before, который очищает все файлы cookie. Я попытался переопределить этот перехватчик в моем собственном промежуточном суперклассе (чтобы сохранить файлы cookie), но это тоже не сработало.
РЕДАКТИРОВАТЬ : Я перепутал перехватчик play.mvc.Before с org.junit.Before - первый для использования с Play! контроллеры, последний для тестов JUnit. @Before в FuncitonTest - это перехватчик JUnit, поэтому он должен иметь какое-либо влияние на файлы cookie (поскольку он запускается один раз перед запуском теста).
Я не хочу писать тест Selenium для каждого защищенного действие - поскольку почти все будет обеспечено. Есть ли способ «обмануть» модуль Secure, чтобы он поверил вам? повторно аутентифицирован? Или, может быть, какой-нибудь другой очень очевидный способ обработки этого (на первый взгляд распространенного) сценария в FunctionalTest?
Заранее спасибо,
Марк
ИЗМЕНИТЬ : Рабочий код, ответ Codemwnci отмечен как правильный
Codemwnci's ответ правильный. Вот мой обходной путь для сохранения файлов cookie от одного запроса к другому:
@Test
public void someTestOfASecuredAction() {
Map<String, String> loginUserParams = new HashMap<String, String>();
loginUserParams.put("username", "admin");
loginUserParams.put("password", "admin");
Response loginResponse = POST("/login", loginUserParams);
Request request = newRequest();
request.cookies = loginResponse.cookies; // this makes the request authenticated
request.url = "/some/secured/action";
request.method = "POST";
request.params.put("someparam", "somevalue");
Response response = makeRequest(request);
assertIsOk(response); // Passes!
}