summaryrefslogtreecommitdiff
path: root/tests/test_client_regress
diff options
context:
space:
mode:
authorTim Graham <timograham@gmail.com>2013-06-04 12:37:44 -0400
committerTim Graham <timograham@gmail.com>2013-06-04 12:39:09 -0400
commita35ed202419a054a9125ee6205a1a7b4eb3cb46d (patch)
treedffaadc39b64408f0e3f173fe52e186d87ea2a56 /tests/test_client_regress
parente71b63e280559122371d125d75a593dc2435c394 (diff)
downloaddjango-a35ed202419a054a9125ee6205a1a7b4eb3cb46d.tar.gz
Fixed #18924 -- Made test.Client.logout send user_logged_out signal.
Thanks awsum for the suggestion and Pavel Ponomarev and Florian Hahn for the patch.
Diffstat (limited to 'tests/test_client_regress')
-rw-r--r--tests/test_client_regress/models.py12
-rw-r--r--tests/test_client_regress/tests.py73
2 files changed, 85 insertions, 0 deletions
diff --git a/tests/test_client_regress/models.py b/tests/test_client_regress/models.py
index e69de29bb2..b72d4480bf 100644
--- a/tests/test_client_regress/models.py
+++ b/tests/test_client_regress/models.py
@@ -0,0 +1,12 @@
+from django.db import models
+from django.contrib.auth.models import AbstractBaseUser, BaseUserManager
+
+
+class CustomUser(AbstractBaseUser):
+ email = models.EmailField(verbose_name='email address', max_length=255, unique=True)
+ custom_objects = BaseUserManager()
+
+ USERNAME_FIELD = 'email'
+
+ class Meta:
+ app_label = 'test_client_regress'
diff --git a/tests/test_client_regress/tests.py b/tests/test_client_regress/tests.py
index dc656c127d..67e66fa52d 100644
--- a/tests/test_client_regress/tests.py
+++ b/tests/test_client_regress/tests.py
@@ -17,7 +17,10 @@ from django.template.response import SimpleTemplateResponse
from django.utils._os import upath
from django.utils.translation import ugettext_lazy
from django.http import HttpResponse
+from django.contrib.auth.signals import user_logged_out, user_logged_in
+from django.contrib.auth.models import User
+from .models import CustomUser
from .views import CustomTestException
@override_settings(
@@ -961,6 +964,76 @@ class SessionTests(TestCase):
self.client.logout()
self.client.logout()
+ def test_logout_with_user(self):
+ """Logout should send user_logged_out signal if user was logged in."""
+ def listener(*args, **kwargs):
+ listener.executed = True
+ self.assertEqual(kwargs['sender'], User)
+ listener.executed = False
+
+ user_logged_out.connect(listener)
+ self.client.login(username='testclient', password='password')
+ self.client.logout()
+ user_logged_out.disconnect(listener)
+ self.assertTrue(listener.executed)
+
+ @override_settings(AUTH_USER_MODEL='test_client_regress.CustomUser')
+ def test_logout_with_custom_user(self):
+ """Logout should send user_logged_out signal if custom user was logged in."""
+ def listener(*args, **kwargs):
+ self.assertEqual(kwargs['sender'], CustomUser)
+ listener.executed = True
+ listener.executed = False
+ u = CustomUser.custom_objects.create(email='test@test.com')
+ u.set_password('password')
+ u.save()
+
+ user_logged_out.connect(listener)
+ self.client.login(username='test@test.com', password='password')
+ self.client.logout()
+ user_logged_out.disconnect(listener)
+ self.assertTrue(listener.executed)
+
+ def test_logout_without_user(self):
+ """Logout should send signal even if user not authenticated."""
+ def listener(user, *args, **kwargs):
+ listener.user = user
+ listener.executed = True
+ listener.executed = False
+
+ user_logged_out.connect(listener)
+ self.client.login(username='incorrect', password='password')
+ self.client.logout()
+ user_logged_out.disconnect(listener)
+
+ self.assertTrue(listener.executed)
+ self.assertIsNone(listener.user)
+
+ def test_login_with_user(self):
+ """Login should send user_logged_in signal on successful login."""
+ def listener(*args, **kwargs):
+ listener.executed = True
+ listener.executed = False
+
+ user_logged_in.connect(listener)
+ self.client.login(username='testclient', password='password')
+ user_logged_out.disconnect(listener)
+
+ self.assertTrue(listener.executed)
+
+ def test_login_without_signal(self):
+ """Login shouldn't send signal if user wasn't logged in"""
+ def listener(*args, **kwargs):
+ listener.executed = True
+ listener.executed = False
+
+ user_logged_in.connect(listener)
+ self.client.login(username='incorrect', password='password')
+ user_logged_in.disconnect(listener)
+
+ self.assertFalse(listener.executed)
+
+
class RequestMethodTests(TestCase):
def test_get(self):
"Request a view via request method GET"