test_async_auth.py 3.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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_alogin_without_user(self):
  32. request = HttpRequest()
  33. request.user = self.test_user
  34. request.session = await self.client.asession()
  35. await alogin(request, None)
  36. user = await aget_user(request)
  37. self.assertIsInstance(user, User)
  38. self.assertEqual(user.username, self.test_user.username)
  39. async def test_alogout(self):
  40. await self.client.alogin(username="testuser", password="testpw")
  41. request = HttpRequest()
  42. request.session = await self.client.asession()
  43. await alogout(request)
  44. user = await aget_user(request)
  45. self.assertIsInstance(user, AnonymousUser)
  46. async def test_client_alogout(self):
  47. await self.client.alogin(username="testuser", password="testpw")
  48. request = HttpRequest()
  49. request.session = await self.client.asession()
  50. await self.client.alogout()
  51. user = await aget_user(request)
  52. self.assertIsInstance(user, AnonymousUser)
  53. async def test_change_password(self):
  54. await self.client.alogin(username="testuser", password="testpw")
  55. request = HttpRequest()
  56. request.session = await self.client.asession()
  57. request.user = self.test_user
  58. await aupdate_session_auth_hash(request, self.test_user)
  59. user = await aget_user(request)
  60. self.assertIsInstance(user, User)
  61. async def test_invalid_login(self):
  62. self.assertEqual(
  63. await self.client.alogin(username="testuser", password=""), False
  64. )
  65. async def test_client_aforce_login(self):
  66. await self.client.aforce_login(self.test_user)
  67. request = HttpRequest()
  68. request.session = await self.client.asession()
  69. user = await aget_user(request)
  70. self.assertEqual(user.username, self.test_user.username)
  71. @override_settings(
  72. AUTHENTICATION_BACKENDS=[
  73. "django.contrib.auth.backends.ModelBackend",
  74. "django.contrib.auth.backends.AllowAllUsersModelBackend",
  75. ]
  76. )
  77. async def test_client_aforce_login_backend(self):
  78. self.test_user.is_active = False
  79. await self.test_user.asave()
  80. await self.client.aforce_login(
  81. self.test_user,
  82. backend="django.contrib.auth.backends.AllowAllUsersModelBackend",
  83. )
  84. request = HttpRequest()
  85. request.session = await self.client.asession()
  86. user = await aget_user(request)
  87. self.assertEqual(user.username, self.test_user.username)