test_models.py 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. from django.contrib.auth import get_user_model
  2. from django.contrib.auth.models import AbstractUser, Group, User, UserManager
  3. from django.contrib.auth.tests.utils import skipIfCustomUser
  4. from django.core import mail
  5. from django.db.models.signals import post_save
  6. from django.test import TestCase, override_settings
  7. @skipIfCustomUser
  8. @override_settings(USE_TZ=False)
  9. class NaturalKeysTestCase(TestCase):
  10. fixtures = ['authtestdata.json']
  11. def test_user_natural_key(self):
  12. staff_user = User.objects.get(username='staff')
  13. self.assertEqual(User.objects.get_by_natural_key('staff'), staff_user)
  14. self.assertEqual(staff_user.natural_key(), ('staff',))
  15. def test_group_natural_key(self):
  16. users_group = Group.objects.create(name='users')
  17. self.assertEqual(Group.objects.get_by_natural_key('users'), users_group)
  18. @skipIfCustomUser
  19. @override_settings(USE_TZ=False)
  20. class LoadDataWithoutNaturalKeysTestCase(TestCase):
  21. fixtures = ['regular.json']
  22. def test_user_is_created_and_added_to_group(self):
  23. user = User.objects.get(username='my_username')
  24. group = Group.objects.get(name='my_group')
  25. self.assertEqual(group, user.groups.get())
  26. @skipIfCustomUser
  27. @override_settings(USE_TZ=False)
  28. class LoadDataWithNaturalKeysTestCase(TestCase):
  29. fixtures = ['natural.json']
  30. def test_user_is_created_and_added_to_group(self):
  31. user = User.objects.get(username='my_username')
  32. group = Group.objects.get(name='my_group')
  33. self.assertEqual(group, user.groups.get())
  34. @skipIfCustomUser
  35. class UserManagerTestCase(TestCase):
  36. def test_create_user(self):
  37. email_lowercase = 'normal@normal.com'
  38. user = User.objects.create_user('user', email_lowercase)
  39. self.assertEqual(user.email, email_lowercase)
  40. self.assertEqual(user.username, 'user')
  41. self.assertFalse(user.has_usable_password())
  42. def test_create_user_email_domain_normalize_rfc3696(self):
  43. # According to http://tools.ietf.org/html/rfc3696#section-3
  44. # the "@" symbol can be part of the local part of an email address
  45. returned = UserManager.normalize_email(r'Abc\@DEF@EXAMPLE.com')
  46. self.assertEqual(returned, r'Abc\@DEF@example.com')
  47. def test_create_user_email_domain_normalize(self):
  48. returned = UserManager.normalize_email('normal@DOMAIN.COM')
  49. self.assertEqual(returned, 'normal@domain.com')
  50. def test_create_user_email_domain_normalize_with_whitespace(self):
  51. returned = UserManager.normalize_email('email\ with_whitespace@D.COM')
  52. self.assertEqual(returned, 'email\ with_whitespace@d.com')
  53. def test_empty_username(self):
  54. self.assertRaisesMessage(
  55. ValueError,
  56. 'The given username must be set',
  57. User.objects.create_user, username=''
  58. )
  59. class AbstractUserTestCase(TestCase):
  60. def test_email_user(self):
  61. # valid send_mail parameters
  62. kwargs = {
  63. "fail_silently": False,
  64. "auth_user": None,
  65. "auth_password": None,
  66. "connection": None,
  67. "html_message": None,
  68. }
  69. abstract_user = AbstractUser(email='foo@bar.com')
  70. abstract_user.email_user(subject="Subject here",
  71. message="This is a message", from_email="from@domain.com", **kwargs)
  72. # Test that one message has been sent.
  73. self.assertEqual(len(mail.outbox), 1)
  74. # Verify that test email contains the correct attributes:
  75. message = mail.outbox[0]
  76. self.assertEqual(message.subject, "Subject here")
  77. self.assertEqual(message.body, "This is a message")
  78. self.assertEqual(message.from_email, "from@domain.com")
  79. self.assertEqual(message.to, [abstract_user.email])
  80. class IsActiveTestCase(TestCase):
  81. """
  82. Tests the behavior of the guaranteed is_active attribute
  83. """
  84. @skipIfCustomUser
  85. def test_builtin_user_isactive(self):
  86. user = User.objects.create(username='foo', email='foo@bar.com')
  87. # is_active is true by default
  88. self.assertEqual(user.is_active, True)
  89. user.is_active = False
  90. user.save()
  91. user_fetched = User.objects.get(pk=user.pk)
  92. # the is_active flag is saved
  93. self.assertFalse(user_fetched.is_active)
  94. @override_settings(AUTH_USER_MODEL='auth.IsActiveTestUser1')
  95. def test_is_active_field_default(self):
  96. """
  97. tests that the default value for is_active is provided
  98. """
  99. UserModel = get_user_model()
  100. user = UserModel(username='foo')
  101. self.assertEqual(user.is_active, True)
  102. # you can set the attribute - but it will not save
  103. user.is_active = False
  104. # there should be no problem saving - but the attribute is not saved
  105. user.save()
  106. user_fetched = UserModel._default_manager.get(pk=user.pk)
  107. # the attribute is always true for newly retrieved instance
  108. self.assertEqual(user_fetched.is_active, True)
  109. @skipIfCustomUser
  110. class TestCreateSuperUserSignals(TestCase):
  111. """
  112. Simple test case for ticket #20541
  113. """
  114. def post_save_listener(self, *args, **kwargs):
  115. self.signals_count += 1
  116. def setUp(self):
  117. self.signals_count = 0
  118. post_save.connect(self.post_save_listener, sender=User)
  119. def tearDown(self):
  120. post_save.disconnect(self.post_save_listener, sender=User)
  121. def test_create_user(self):
  122. User.objects.create_user("JohnDoe")
  123. self.assertEqual(self.signals_count, 1)
  124. def test_create_superuser(self):
  125. User.objects.create_superuser("JohnDoe", "mail@example.com", "1")
  126. self.assertEqual(self.signals_count, 1)