summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorLinus Lewandowski <linus@lew21.net>2017-05-27 14:35:02 +0200
committerTim Graham <timograham@gmail.com>2017-05-29 17:31:18 -0400
commiteedc88bd4a8468c2a0daa8346c9b57183dd77782 (patch)
tree6f6532ce30fcd862759e6e1cd8557270f387568d /tests
parente84034b37a690889a2f77d85f85beebbd165598b (diff)
Fixed #26823 -- Prevented update_last_login signal receiver from crashing if User model doesn't have last_login field.
Diffstat (limited to 'tests')
-rw-r--r--tests/auth_tests/models/__init__.py4
-rw-r--r--tests/auth_tests/models/minimal.py6
-rw-r--r--tests/auth_tests/test_signals.py24
3 files changed, 33 insertions, 1 deletions
diff --git a/tests/auth_tests/models/__init__.py b/tests/auth_tests/models/__init__.py
index 8b8cb69ef3..af58cb7118 100644
--- a/tests/auth_tests/models/__init__.py
+++ b/tests/auth_tests/models/__init__.py
@@ -4,6 +4,7 @@ from .custom_user import (
)
from .invalid_models import CustomUserNonUniqueUsername
from .is_active import IsActiveTestUser1
+from .minimal import MinimalUser
from .uuid_pk import UUIDUser
from .with_foreign_key import CustomUserWithFK, Email
from .with_integer_username import IntegerUsernameUser
@@ -11,5 +12,6 @@ from .with_integer_username import IntegerUsernameUser
__all__ = (
'CustomUser', 'CustomUserWithoutIsActiveField', 'CustomPermissionsUser',
'CustomUserWithFK', 'Email', 'ExtensionUser', 'IsActiveTestUser1',
- 'UUIDUser', 'CustomUserNonUniqueUsername', 'IntegerUsernameUser'
+ 'MinimalUser', 'UUIDUser', 'CustomUserNonUniqueUsername',
+ 'IntegerUsernameUser',
)
diff --git a/tests/auth_tests/models/minimal.py b/tests/auth_tests/models/minimal.py
new file mode 100644
index 0000000000..7b8931b231
--- /dev/null
+++ b/tests/auth_tests/models/minimal.py
@@ -0,0 +1,6 @@
+from django.db import models
+
+
+class MinimalUser(models.Model):
+ REQUIRED_FIELDS = ()
+ USERNAME_FIELD = 'id'
diff --git a/tests/auth_tests/test_signals.py b/tests/auth_tests/test_signals.py
index 8fb2046e1c..93a8689463 100644
--- a/tests/auth_tests/test_signals.py
+++ b/tests/auth_tests/test_signals.py
@@ -1,8 +1,12 @@
+from django.apps import apps
from django.contrib.auth import authenticate, signals
from django.contrib.auth.models import User
+from django.core.exceptions import FieldDoesNotExist
from django.test import TestCase, override_settings
from django.test.client import RequestFactory
+from .models import MinimalUser
+
@override_settings(ROOT_URLCONF='auth_tests.urls')
class SignalTestCase(TestCase):
@@ -82,3 +86,23 @@ class SignalTestCase(TestCase):
def test_failed_login_without_request(self):
authenticate(username='testclient', password='bad')
self.assertIsNone(self.login_failed[0]['request'])
+
+ def test_login_with_custom_user_without_last_login_field(self):
+ """
+ The user_logged_in signal is only registered if the user model has a
+ last_login field.
+ """
+ last_login_receivers = signals.user_logged_in.receivers
+ try:
+ signals.user_logged_in.receivers = []
+ with self.assertRaises(FieldDoesNotExist):
+ MinimalUser._meta.get_field('last_login')
+ with self.settings(AUTH_USER_MODEL='auth_tests.MinimalUser'):
+ apps.get_app_config('auth').ready()
+ self.assertEqual(signals.user_logged_in.receivers, [])
+
+ with self.settings(AUTH_USER_MODEL='auth.User'):
+ apps.get_app_config('auth').ready()
+ self.assertEqual(len(signals.user_logged_in.receivers), 1)
+ finally:
+ signals.user_logged_in.receivers = last_login_receivers