diff options
| author | Ben Lomax <lomax.on.the.run@gmail.com> | 2023-09-13 10:00:01 +0200 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2023-09-13 10:16:01 +0200 |
| commit | 059cb0dbc9adc9c330f5fa36ba61acf00a6f259b (patch) | |
| tree | 4ace7c1361dea66dd80ac44e8e77b3982ac37bab /tests/decorators/test_csrf.py | |
| parent | fe19b33e2f76045617067dd5123041ae4d3a91ee (diff) | |
Added more tests for decorators.
Diffstat (limited to 'tests/decorators/test_csrf.py')
| -rw-r--r-- | tests/decorators/test_csrf.py | 71 |
1 files changed, 70 insertions, 1 deletions
diff --git a/tests/decorators/test_csrf.py b/tests/decorators/test_csrf.py index 275b12ee9d..213ee7fdd8 100644 --- a/tests/decorators/test_csrf.py +++ b/tests/decorators/test_csrf.py @@ -1,8 +1,77 @@ from asgiref.sync import iscoroutinefunction +from django.conf import settings from django.http import HttpRequest, HttpResponse from django.test import SimpleTestCase -from django.views.decorators.csrf import csrf_exempt +from django.views.decorators.csrf import ( + csrf_exempt, + csrf_protect, + ensure_csrf_cookie, + requires_csrf_token, +) + +CSRF_TOKEN = "1bcdefghij2bcdefghij3bcdefghij4bcdefghij5bcdefghij6bcdefghijABCD" + + +class CsrfTestMixin: + def get_request(self, token=CSRF_TOKEN): + request = HttpRequest() + request.method = "POST" + if token: + request.POST["csrfmiddlewaretoken"] = token + request.COOKIES[settings.CSRF_COOKIE_NAME] = token + return request + + +class CsrfProtectTests(CsrfTestMixin, SimpleTestCase): + def test_csrf_protect_decorator(self): + @csrf_protect + def sync_view(request): + return HttpResponse() + + request = self.get_request() + response = sync_view(request) + self.assertEqual(response.status_code, 200) + self.assertIs(request.csrf_processing_done, True) + + with self.assertLogs("django.security.csrf", "WARNING"): + request = self.get_request(token=None) + response = sync_view(request) + self.assertEqual(response.status_code, 403) + + +class RequiresCsrfTokenTests(CsrfTestMixin, SimpleTestCase): + def test_requires_csrf_token_decorator(self): + @requires_csrf_token + def sync_view(request): + return HttpResponse() + + request = self.get_request() + response = sync_view(request) + self.assertEqual(response.status_code, 200) + self.assertIs(request.csrf_processing_done, True) + + with self.assertNoLogs("django.security.csrf", "WARNING"): + request = self.get_request(token=None) + response = sync_view(request) + self.assertEqual(response.status_code, 200) + + +class EnsureCsrfCookieTests(CsrfTestMixin, SimpleTestCase): + def test_ensure_csrf_cookie_decorator(self): + @ensure_csrf_cookie + def sync_view(request): + return HttpResponse() + + request = self.get_request() + response = sync_view(request) + self.assertEqual(response.status_code, 200) + self.assertIs(request.csrf_processing_done, True) + + with self.assertNoLogs("django.security.csrf", "WARNING"): + request = self.get_request(token=None) + response = sync_view(request) + self.assertEqual(response.status_code, 200) class CsrfExemptTests(SimpleTestCase): |
