0

私はプレイを使用しています!v1.2.6、およびセキュア モジュール。

コントローラーのいくつかをテストしたいので、FunctionalTest. 私の懸念は、アプリケーション内のすべてのページが保護されているため、ユーザー (またはテスト クラス) が最初にログインする必要があることです。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.

私が間違っていることは何ですか?問題を解決するにはどうすればよいですか?

ありがとう。

4

1 に答える 1

0

私はついに答えを見つけました。もちろん、それは私のコードのばかげたエラーでした。実際、リクエストを/loginに投稿するのではなく、 URL に投稿し/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;
}
于 2013-09-04T07:29:15.787 に答える