1

Google App Engineアプリケーションがあり、リクエストハドラーには認証を行うデコレータがあります。昨日、 WebTestを使用して、ログインしているユーザーと管理者を設定する方法を見つけました。

今日、私の認証デコレータはもう少し複雑になりました。また、ユーザーがデータベースにプロファイルを持っているかどうかをチェックし、持っていない場合は「新しいユーザー」ページにリダイレクトされます。

def authenticated(method):
    @functools.wraps(method)
    def wrapper(self, *args, **kwargs):
        user = users.get_current_user()
        if not user:
            self.redirect(users.create_login_url(self.request.uri))
            return

        profile = Profile.get_by_key_name(str(user.user_id))
        if not profile:
            self.redirect( '/newuser' )

        return method(self, *args, **kwargs)

    return wrapper

ここで、プロファイルパーツを追加すると、ユーザーがログインしてステータスコード200(assertOK)を取得するかどうかを確認する単体テストが中断されます。

def user_ok(self):
    os.environ['USER_EMAIL'] = 'info@example.com'
    os.environ['USER_IS_ADMIN'] = ''
    response = self.get( '/appindex' )
    self.assertOK(response)

したがって、テストで設定できるように、プロファイル機能をデコレータに何らかの方法で挿入できるようにする必要があります。誰かがこれを行う方法を知っていますか?私は方法を考えようとしていましたが、私は立ち往生し続けています。

4

1 に答える 1

2

デコレータが使用するプロファイルをテスト中に作成する必要があります。

def user_ok(self):
    key_name = 'info@example.com'
    new_user = Profile(key_name=key_name)
    new_user.put()

    os.environ['USER_EMAIL'] = key_name
    os.environ['USER_ID'] = key_name
    os.environ['USER_IS_ADMIN'] = ''
    response = self.get( '/appindex' )
    self.assertOK(response)

    # Now let's reset it to check that the user will be redirected.
    new_user.delete()
    response = self.get( '/appindex' )
    self.assertEqual(response.headers['Location'], 'http://localhost/newuser')
于 2010-08-30T00:24:10.313 に答える