2013-09-03 2 views
0

Я использую Играть! v1.2.6 и защищенный модуль.Играйте! framework FunctionalTest игнорирует операцию входа в защищенное приложение

Я хочу проверить некоторые из моих контроллеров, поэтому я написал FunctionalTest. Меня беспокоит, что любая страница в моем приложении защищена, поэтому сначала пользователь (или тестовый класс) должен войти в систему. Я видел a similar question на SO, поэтому я написал следующий код:

public class ApplicationTest extends FunctionalTest { 

    // Simulate a login and create a new request... 
    public Request createAuthenticatedRequest(String url) { 
     Map<String, String> loginInfo = new HashMap<String, String>(); 
     loginInfo.put("username", "test-user"); 
     loginInfo.put("password", "test-password"); 
     Response loginResponse = POST("/login", loginInfo); 

     Request request = newRequest(); 
     request.cookies = loginResponse.cookies; 
     request.url = url; 
     return request; 
    } 

    @Test 
    public void test_summary_page() { 
     Request request = createAuthenticatedRequest("/summary"); 
     Response response = makeRequest(request); 

     System.out.println("=================="); 
     System.out.println("Content: '" + getContent(response) + "'"); 
     System.out.println("------------------"); 
     System.out.println(" > " + response.headers.get("Location") + " ; " + response.status); 
     System.out.println("=================="); 

     assertIsOk(response); 
     assertContentMatch("Summary page", response); 
     assertContentType("text/html", response); 
     assertCharset(play.Play.defaultWebEncoding, response); 
    } 

Однако, это не работает. Выход метода испытаний заключается в следующем:

================== 
Content: '' 
------------------ 
> [/login] ; 302 
================== 

, что означает, что запрос был перенаправлен (HTTP код 302) на страницу входа в систему, например, если пользователь не зарегистрирован.

Кроме того, в моем классе Secure, я добавил сообщение войти методом boolean authenticate(String username, String password), чтобы узнать, есть ли на самом деле попытка аутентификации, но журнал не отображается при запуске FunctionalTest.

Что я делаю неправильно? Как я могу исправить свою проблему?

Спасибо.

ответ

0

Наконец-то я нашел ответ, и, конечно, это была глупая ошибка в моем коде. Действительно, я отправляю запрос на URL-адрес /login, а не размещаю его до /secure/authenticate.

Правильный код таким образом:

public Request createAuthenticatedRequest(String url) { 
    Map<String, String> loginInfo = new HashMap<String, String>(); 
    loginInfo.put("username", "test-user"); 
    loginInfo.put("password", "test-password"); 
    Response loginResponse = POST("/secure/authenticate", loginInfo); 
    Request request = newRequest(); 
    request.cookies = loginResponse.cookies; 
    request.url = url; 
    return request; 
} 
Смежные вопросы