test_async_auth.py 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. from django.contrib.auth import (
  2. aauthenticate,
  3. aget_user,
  4. alogin,
  5. alogout,
  6. aupdate_session_auth_hash,
  7. )
  8. from django.contrib.auth.models import AnonymousUser, User
  9. from django.http import HttpRequest
  10. from django.test import TestCase, override_settings
  11. class AsyncAuthTest(TestCase):
  12. @classmethod
  13. def setUpTestData(cls):
  14. cls.test_user = User.objects.create_user(
  15. "testuser", "test@example.com", "testpw"
  16. )
  17. async def test_aauthenticate(self):
  18. user = await aauthenticate(username="testuser", password="testpw")
  19. self.assertIsInstance(user, User)
  20. self.assertEqual(user.username, self.test_user.username)
  21. user.is_active = False
  22. await user.asave()
  23. self.assertIsNone(await aauthenticate(username="testuser", password="testpw"))
  24. async def test_alogin(self):
  25. request = HttpRequest()
  26. request.session = await self.client.asession()
  27. await alogin(request, self.test_user)
  28. user = await aget_user(request)
  29. self.assertIsInstance(user, User)
  30. self.assertEqual(user.username, self.test_user.username)
  31. async def test_changed_password_invalidates_aget_user(self):
  32. request = HttpRequest()
  33. request.session = await self.client.asession()
  34. await alogin(request, self.test_user)
  35. self.test_user.set_password("new_password")
  36. await self.test_user.asave()
  37. user = await aget_user(request)
  38. self.assertIsNotNone(user)
  39. self.assertTrue(user.is_anonymous)
  40. # Session should be flushed.
  41. self.assertIsNone(request.session.session_key)
  42. async def test_alogin_new_user(self):
  43. request = HttpRequest()
  44. request.session = await self.client.asession()
  45. await alogin(request, self.test_user)
  46. second_user = await User.objects.acreate_user(
  47. "testuser2", "test2@example.com", "testpw2"
  48. )
  49. await alogin(request, second_user)
  50. user = await aget_user(request)
  51. self.assertIsInstance(user, User)
  52. self.assertEqual(user.username, second_user.username)
  53. async def test_alogin_without_user(self):
  54. async def auser():
  55. return self.test_user
  56. request = HttpRequest()
  57. request.user = self.test_user
  58. request.auser = auser
  59. request.session = await self.client.asession()
  60. await alogin(request, None)
  61. user = await aget_user(request)
  62. self.assertIsInstance(user, User)
  63. self.assertEqual(user.username, self.test_user.username)
  64. async def test_alogout(self):
  65. await self.client.alogin(username="testuser", password="testpw")
  66. request = HttpRequest()
  67. request.session = await self.client.asession()
  68. await alogout(request)
  69. user = await aget_user(request)
  70. self.assertIsInstance(user, AnonymousUser)
  71. async def test_client_alogout(self):
  72. await self.client.alogin(username="testuser", password="testpw")
  73. request = HttpRequest()
  74. request.session = await self.client.asession()
  75. await self.client.alogout()
  76. user = await aget_user(request)
  77. self.assertIsInstance(user, AnonymousUser)
  78. async def test_change_password(self):
  79. await self.client.alogin(username="testuser", password="testpw")
  80. request = HttpRequest()
  81. request.session = await self.client.asession()
  82. request.user = self.test_user
  83. await aupdate_session_auth_hash(request, self.test_user)
  84. user = await aget_user(request)
  85. self.assertIsInstance(user, User)
  86. async def test_invalid_login(self):
  87. self.assertEqual(
  88. await self.client.alogin(username="testuser", password=""), False
  89. )
  90. async def test_client_aforce_login(self):
  91. await self.client.aforce_login(self.test_user)
  92. request = HttpRequest()
  93. request.session = await self.client.asession()
  94. user = await aget_user(request)
  95. self.assertEqual(user.username, self.test_user.username)
  96. @override_settings(
  97. AUTHENTICATION_BACKENDS=[
  98. "django.contrib.auth.backends.ModelBackend",
  99. "django.contrib.auth.backends.AllowAllUsersModelBackend",
  100. ]
  101. )
  102. async def test_client_aforce_login_backend(self):
  103. self.test_user.is_active = False
  104. await self.test_user.asave()
  105. await self.client.aforce_login(
  106. self.test_user,
  107. backend="django.contrib.auth.backends.AllowAllUsersModelBackend",
  108. )
  109. request = HttpRequest()
  110. request.session = await self.client.asession()
  111. user = await aget_user(request)
  112. self.assertEqual(user.username, self.test_user.username)