mirror of
https://github.com/jazzband/django-axes.git
synced 2026-05-17 03:51:08 +00:00
- Define a base handler API with method signatures - Move proxy handler to a separate path for importability - Implement a database handler with clean external dependencies - Change the authentication backend and decorators to use the authentication backend This enables clean pluggable authentication backend definitions that users can override and specialize with e.g. cached handlers in their own packages. Signed-off-by: Aleksi Häkli <aleksi.hakli@iki.fi>
40 lines
1.9 KiB
Python
40 lines
1.9 KiB
Python
from unittest.mock import MagicMock, patch
|
|
|
|
from django.http import HttpResponse
|
|
from django.test import TestCase
|
|
|
|
from axes.decorators import axes_dispatch, axes_form_invalid
|
|
|
|
|
|
class DecoratorTestCase(TestCase):
|
|
SUCCESS_RESPONSE = HttpResponse(status=200, content='Dispatched')
|
|
LOCKOUT_RESPONSE = HttpResponse(status=403, content='Locked out')
|
|
|
|
def setUp(self):
|
|
self.request = MagicMock()
|
|
self.cls = MagicMock(return_value=self.request)
|
|
self.func = MagicMock(return_value=self.SUCCESS_RESPONSE)
|
|
|
|
@patch('axes.handlers.proxy.AxesProxyHandler.is_allowed_to_authenticate', return_value=False)
|
|
@patch('axes.decorators.get_lockout_response', return_value=LOCKOUT_RESPONSE)
|
|
def test_axes_dispatch_locks_out(self, _, __):
|
|
response = axes_dispatch(self.func)(self.request)
|
|
self.assertEqual(response.content, self.LOCKOUT_RESPONSE.content)
|
|
|
|
@patch('axes.handlers.proxy.AxesProxyHandler.is_allowed_to_authenticate', return_value=True)
|
|
@patch('axes.decorators.get_lockout_response', return_value=LOCKOUT_RESPONSE)
|
|
def test_axes_dispatch_dispatches(self, _, __):
|
|
response = axes_dispatch(self.func)(self.request)
|
|
self.assertEqual(response.content, self.SUCCESS_RESPONSE.content)
|
|
|
|
@patch('axes.handlers.proxy.AxesProxyHandler.is_allowed_to_authenticate', return_value=False)
|
|
@patch('axes.decorators.get_lockout_response', return_value=LOCKOUT_RESPONSE)
|
|
def test_axes_form_invalid_locks_out(self, _, __):
|
|
response = axes_form_invalid(self.func)(self.cls)
|
|
self.assertEqual(response.content, self.LOCKOUT_RESPONSE.content)
|
|
|
|
@patch('axes.handlers.proxy.AxesProxyHandler.is_allowed_to_authenticate', return_value=True)
|
|
@patch('axes.decorators.get_lockout_response', return_value=LOCKOUT_RESPONSE)
|
|
def test_axes_form_invalid_dispatches(self, _, __):
|
|
response = axes_form_invalid(self.func)(self.cls)
|
|
self.assertEqual(response.content, self.SUCCESS_RESPONSE.content)
|