From 660963345a1c4c82bb1ba41f266b729b88716109 Mon Sep 17 00:00:00 2001 From: Anatoly Date: Wed, 7 Oct 2020 17:57:29 +0200 Subject: [PATCH] Cover AxesMiddleware with more tests --- axes/tests/test_middleware.py | 79 +++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) diff --git a/axes/tests/test_middleware.py b/axes/tests/test_middleware.py index fe13e5a..4c66200 100644 --- a/axes/tests/test_middleware.py +++ b/axes/tests/test_middleware.py @@ -1,4 +1,8 @@ +from unittest import mock + from django.http import HttpResponse, HttpRequest +from django.conf import settings +from django.test import override_settings from axes.middleware import AxesMiddleware from axes.tests.base import AxesTestCase @@ -26,3 +30,78 @@ class MiddlewareTestCase(AxesTestCase): response = AxesMiddleware(get_response)(self.request) self.assertEqual(response.status_code, self.STATUS_LOCKOUT) + + @mock.patch("django.conf.settings.INSTALLED_APPS", ["rest_framework"]) + def test_response_contains_required_attrs_with_drf_integration(self): + def get_response(request): + return HttpResponse() + + self.assertFalse(hasattr(self.request, "axes_locked_out")) + self.assertFalse(hasattr(self.request, "axes_attempt_time")) + self.assertFalse(hasattr(self.request, "axes_ip_address")) + self.assertFalse(hasattr(self.request, "axes_user_agent")) + self.assertFalse(hasattr(self.request, "axes_path_info")) + self.assertFalse(hasattr(self.request, "axes_http_accept")) + self.assertFalse(hasattr(self.request, "axes_updated")) + + AxesMiddleware(get_response)(self.request) + + self.assertTrue(hasattr(self.request, "axes_locked_out")) + self.assertTrue(hasattr(self.request, "axes_attempt_time")) + self.assertTrue(hasattr(self.request, "axes_ip_address")) + self.assertTrue(hasattr(self.request, "axes_user_agent")) + self.assertTrue(hasattr(self.request, "axes_path_info")) + self.assertTrue(hasattr(self.request, "axes_http_accept")) + self.assertTrue(hasattr(self.request, "axes_updated")) + + def test_response_does_not_contain_extra_attrs_without_drf_integration( + self, + ): + def get_response(request): + return HttpResponse() + + self.assertNotIn("rest_framework", settings.INSTALLED_APPS) + + AxesMiddleware(get_response)(self.request) + + self.assertFalse(hasattr(self.request, "axes_locked_out")) + self.assertFalse(hasattr(self.request, "axes_attempt_time")) + self.assertFalse(hasattr(self.request, "axes_ip_address")) + self.assertFalse(hasattr(self.request, "axes_user_agent")) + self.assertFalse(hasattr(self.request, "axes_path_info")) + self.assertFalse(hasattr(self.request, "axes_http_accept")) + self.assertFalse(hasattr(self.request, "axes_updated")) + + @mock.patch("axes.middleware.get_failure_limit", return_value=5) + @mock.patch( + "axes.middleware.AxesProxyHandler.get_failures", return_value=5 + ) + @mock.patch("django.conf.settings.INSTALLED_APPS", ["rest_framework"]) + @override_settings(AXES_LOCK_OUT_AT_FAILURE=True) + def test_lockout_response_with_drf_integration( + self, mock_get_failure_limit, mock_get_failures + ): + def get_response(request): + return HttpResponse() + + response = AxesMiddleware(get_response)(self.request) + self.assertTrue(hasattr(self.request, "axes_locked_out")) + self.assertTrue(self.request.axes_locked_out) + self.assertEqual(response.status_code, self.STATUS_LOCKOUT) + + @mock.patch("axes.middleware.get_failure_limit", return_value=5) + @mock.patch( + "axes.middleware.AxesProxyHandler.get_failures", return_value=3 + ) + @mock.patch("django.conf.settings.INSTALLED_APPS", ["rest_framework"]) + @override_settings(AXES_LOCK_OUT_AT_FAILURE=True) + def test_success_response_with_drf_integration( + self, mock_get_failure_limit, mock_get_failures + ): + def get_response(request): + return HttpResponse() + + response = AxesMiddleware(get_response)(self.request) + self.assertTrue(hasattr(self.request, "axes_locked_out")) + self.assertFalse(self.request.axes_locked_out) + self.assertEqual(response.status_code, self.STATUS_SUCCESS)