django-webtest (v1.5.6) を使用して、デコレータがビューへのアクセスを認証済みユーザーに制限していることをテストしています。
私の見解は単純です:
@active_account_required
def homepage(request):
return render(request, 'accounts/account_homepage.html', {
'user': request.user,
})
active_account_required
デコレータは次のとおりです。
def active_account_required(function = None):
"""
Check the user is both logged in and has a valid, activated user account.
If a user tries to access a view protected by this decorator, they will be
redirected accordingly.
See http://passingcuriosity.com/2009/writing-view-decorators-for-django/
"""
def _dec(view_func):
def _view(request, *args, **kwargs):
if request.user.is_anonymous():
return HttpResponseRedirect(reverse_lazy('auth_login'))
if not request.user.get_profile().is_activated():
return HttpResponseRedirect(reverse_lazy('registration_activation_incomplete'))
return view_func(request, *args, **kwargs)
_view.__name__ = view_func.__name__
_view.__dict__ = view_func.__dict__
_view.__doc__ = view_func.__doc__
return _view
if function is None:
return _dec
else:
return _dec(function)
私のテスト方法は
class AccountViewsTests(WebTest):
def test_activated_user_can_access_account_homepage(self):
"""
Test an activated user can access the account homepage
"""
user = G(User)
user.get_profile().datetime_activated = timezone.now()
res = self.app.get(reverse('account_homepage'), user = user)
pdb.set_trace()
self.assertTemplateUsed(res, 'accounts/account_homepage.html',
'Activated account did not access account homepage correctly')
(ユーザー オブジェクトはdjango-dynamic-fixtureG
の関数を使用して作成されます)
テストを実行すると、デコレーターがhomepage
ビューへのアクセスを妨げています。
pdb
オブジェクトの検査に使用していることがわかります。active_account_required
User は、デコレータのすべてのテストに合格する有効なユーザー オブジェクトです。
(Pdb) user
<User: 2>
(Pdb) user.is_anonymous()
False
(Pdb) user.get_profile().is_activated()
True
ユーザーが正しいにもかかわらず、からの応答は、デコレータ コードに従って URLself.app.get(reverse('account_homepage'), user = user)
への 302 リダイレクトです。registration_activation_incomplete
(Pdb) res
<302 FOUND text/html location: http://localhost:80/accounts/registration/activate/incomplete/ no body>
WebTest リクエストでユーザー オブジェクトが正しく送信されていないようですが、これはdjango-webtest のドキュメントと一致します。また、ユーザー名でユーザーを渡そうとしましuser='2'
たが、同じ結果が得られました。
何か案は?