|
1 | 1 | import json |
2 | 2 | from importlib import import_module |
3 | 3 | from time import sleep |
4 | | -from unittest import mock |
| 4 | +from unittest import mock, skipUnless |
5 | 5 |
|
6 | 6 | from django.conf import settings |
7 | 7 | from django.core.signing import BadSignature |
8 | 8 | from django.shortcuts import resolve_url |
9 | 9 | from django.test import RequestFactory, TestCase |
10 | | -from django.test.utils import override_settings |
| 10 | +from django.test.utils import modify_settings, override_settings |
11 | 11 | from django.urls import reverse |
12 | 12 | from django_otp import DEVICE_ID_SESSION_KEY |
13 | 13 | from django_otp.oath import totp |
|
18 | 18 |
|
19 | 19 | from .utils import UserMixin, totp_str |
20 | 20 |
|
| 21 | +try: |
| 22 | + from django.contrib.auth.middleware import LoginRequiredMiddleware # NOQA |
| 23 | + has_login_required_middleware = True |
| 24 | +except ImportError: |
| 25 | + # Django < 5.1 |
| 26 | + has_login_required_middleware = False |
| 27 | + |
21 | 28 |
|
22 | 29 | class LoginTest(UserMixin, TestCase): |
23 | 30 | def _post(self, data=None): |
24 | 31 | return self.client.post(reverse('two_factor:login'), data=data) |
25 | 32 |
|
26 | | - def test_form(self): |
| 33 | + def test_get_to_login(self): |
| 34 | + response = self.client.get(reverse('two_factor:login')) |
| 35 | + self.assertContains(response, 'Password:') |
| 36 | + |
| 37 | + @skipUnless(has_login_required_middleware, 'LoginRequiredMiddleware needs Django 5.1+') |
| 38 | + @modify_settings( |
| 39 | + MIDDLEWARE={'append': 'django.contrib.auth.middleware.LoginRequiredMiddleware'} |
| 40 | + ) |
| 41 | + def test_get_to_login_with_loginrequiredmiddleware(self): |
27 | 42 | response = self.client.get(reverse('two_factor:login')) |
28 | 43 | self.assertContains(response, 'Password:') |
29 | 44 |
|
|
0 commit comments