test_basic.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. from django.contrib.auth import get_user, get_user_model
  2. from django.contrib.auth.models import AnonymousUser, User
  3. from django.core.exceptions import ImproperlyConfigured
  4. from django.db import IntegrityError
  5. from django.http import HttpRequest
  6. from django.test import TestCase, override_settings
  7. from django.utils import translation
  8. from .models import CustomUser
  9. class BasicTestCase(TestCase):
  10. def test_user(self):
  11. "Users can be created and can set their password"
  12. u = User.objects.create_user('testuser', 'test@example.com', 'testpw')
  13. self.assertTrue(u.has_usable_password())
  14. self.assertFalse(u.check_password('bad'))
  15. self.assertTrue(u.check_password('testpw'))
  16. # Check we can manually set an unusable password
  17. u.set_unusable_password()
  18. u.save()
  19. self.assertFalse(u.check_password('testpw'))
  20. self.assertFalse(u.has_usable_password())
  21. u.set_password('testpw')
  22. self.assertTrue(u.check_password('testpw'))
  23. u.set_password(None)
  24. self.assertFalse(u.has_usable_password())
  25. # Check username getter
  26. self.assertEqual(u.get_username(), 'testuser')
  27. # Check authentication/permissions
  28. self.assertFalse(u.is_anonymous)
  29. self.assertTrue(u.is_authenticated)
  30. self.assertFalse(u.is_staff)
  31. self.assertTrue(u.is_active)
  32. self.assertFalse(u.is_superuser)
  33. # Check API-based user creation with no password
  34. u2 = User.objects.create_user('testuser2', 'test2@example.com')
  35. self.assertFalse(u2.has_usable_password())
  36. def test_unicode_username(self):
  37. User.objects.create_user('jörg')
  38. User.objects.create_user('Григорий')
  39. # Two equivalent Unicode normalized usernames are duplicates.
  40. omega_username = 'iamtheΩ' # U+03A9 GREEK CAPITAL LETTER OMEGA
  41. ohm_username = 'iamtheΩ' # U+2126 OHM SIGN
  42. User.objects.create_user(ohm_username)
  43. with self.assertRaises(IntegrityError):
  44. User.objects.create_user(omega_username)
  45. def test_user_no_email(self):
  46. "Users can be created without an email"
  47. cases = [
  48. {},
  49. {'email': ''},
  50. {'email': None},
  51. ]
  52. for i, kwargs in enumerate(cases):
  53. with self.subTest(**kwargs):
  54. u = User.objects.create_user(
  55. 'testuser{}'.format(i),
  56. **kwargs
  57. )
  58. self.assertEqual(u.email, '')
  59. def test_superuser(self):
  60. "Check the creation and properties of a superuser"
  61. super = User.objects.create_superuser('super', 'super@example.com', 'super')
  62. self.assertTrue(super.is_superuser)
  63. self.assertTrue(super.is_active)
  64. self.assertTrue(super.is_staff)
  65. def test_superuser_no_email_or_password(self):
  66. cases = [
  67. {},
  68. {'email': ''},
  69. {'email': None},
  70. {'password': None},
  71. ]
  72. for i, kwargs in enumerate(cases):
  73. with self.subTest(**kwargs):
  74. superuser = User.objects.create_superuser(
  75. 'super{}'.format(i),
  76. **kwargs
  77. )
  78. self.assertEqual(superuser.email, '')
  79. self.assertFalse(superuser.has_usable_password())
  80. def test_get_user_model(self):
  81. "The current user model can be retrieved"
  82. self.assertEqual(get_user_model(), User)
  83. @override_settings(AUTH_USER_MODEL='auth_tests.CustomUser')
  84. def test_swappable_user(self):
  85. "The current user model can be swapped out for another"
  86. self.assertEqual(get_user_model(), CustomUser)
  87. with self.assertRaises(AttributeError):
  88. User.objects.all()
  89. @override_settings(AUTH_USER_MODEL='badsetting')
  90. def test_swappable_user_bad_setting(self):
  91. "The alternate user setting must point to something in the format app.model"
  92. msg = "AUTH_USER_MODEL must be of the form 'app_label.model_name'"
  93. with self.assertRaisesMessage(ImproperlyConfigured, msg):
  94. get_user_model()
  95. @override_settings(AUTH_USER_MODEL='thismodel.doesntexist')
  96. def test_swappable_user_nonexistent_model(self):
  97. "The current user model must point to an installed model"
  98. msg = (
  99. "AUTH_USER_MODEL refers to model 'thismodel.doesntexist' "
  100. "that has not been installed"
  101. )
  102. with self.assertRaisesMessage(ImproperlyConfigured, msg):
  103. get_user_model()
  104. def test_user_verbose_names_translatable(self):
  105. "Default User model verbose names are translatable (#19945)"
  106. with translation.override('en'):
  107. self.assertEqual(User._meta.verbose_name, 'user')
  108. self.assertEqual(User._meta.verbose_name_plural, 'users')
  109. with translation.override('es'):
  110. self.assertEqual(User._meta.verbose_name, 'usuario')
  111. self.assertEqual(User._meta.verbose_name_plural, 'usuarios')
  112. class TestGetUser(TestCase):
  113. def test_get_user_anonymous(self):
  114. request = HttpRequest()
  115. request.session = self.client.session
  116. user = get_user(request)
  117. self.assertIsInstance(user, AnonymousUser)
  118. def test_get_user(self):
  119. created_user = User.objects.create_user('testuser', 'test@example.com', 'testpw')
  120. self.client.login(username='testuser', password='testpw')
  121. request = HttpRequest()
  122. request.session = self.client.session
  123. user = get_user(request)
  124. self.assertIsInstance(user, User)
  125. self.assertEqual(user.username, created_user.username)