test_templates.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126
  1. from datetime import date
  2. from django.contrib.auth import authenticate
  3. from django.contrib.auth.models import User
  4. from django.contrib.auth.tokens import PasswordResetTokenGenerator
  5. from django.contrib.auth.views import (
  6. PasswordChangeDoneView,
  7. PasswordChangeView,
  8. PasswordResetCompleteView,
  9. PasswordResetDoneView,
  10. PasswordResetView,
  11. )
  12. from django.test import RequestFactory, TestCase, override_settings
  13. from django.urls import reverse
  14. from django.utils.http import urlsafe_base64_encode
  15. from .client import PasswordResetConfirmClient
  16. from .models import CustomUser
  17. @override_settings(ROOT_URLCONF="auth_tests.urls")
  18. class AuthTemplateTests(TestCase):
  19. request_factory = RequestFactory()
  20. @classmethod
  21. def setUpTestData(cls):
  22. user = User.objects.create_user("jsmith", "jsmith@example.com", "pass")
  23. user = authenticate(username=user.username, password="pass")
  24. request = cls.request_factory.get("/somepath/")
  25. request.user = user
  26. cls.user, cls.request = user, request
  27. def test_password_reset_view(self):
  28. response = PasswordResetView.as_view(success_url="dummy/")(self.request)
  29. self.assertContains(
  30. response, "<title>Password reset | Django site admin</title>"
  31. )
  32. self.assertContains(response, "<h1>Password reset</h1>")
  33. def test_password_reset_done_view(self):
  34. response = PasswordResetDoneView.as_view()(self.request)
  35. self.assertContains(
  36. response, "<title>Password reset sent | Django site admin</title>"
  37. )
  38. self.assertContains(response, "<h1>Password reset sent</h1>")
  39. def test_password_reset_confirm_view_invalid_token(self):
  40. # PasswordResetConfirmView invalid token
  41. client = PasswordResetConfirmClient()
  42. url = reverse(
  43. "password_reset_confirm", kwargs={"uidb64": "Bad", "token": "Bad-Token"}
  44. )
  45. response = client.get(url)
  46. self.assertContains(
  47. response, "<title>Password reset unsuccessful | Django site admin</title>"
  48. )
  49. self.assertContains(response, "<h1>Password reset unsuccessful</h1>")
  50. def test_password_reset_confirm_view_valid_token(self):
  51. # PasswordResetConfirmView valid token
  52. client = PasswordResetConfirmClient()
  53. default_token_generator = PasswordResetTokenGenerator()
  54. token = default_token_generator.make_token(self.user)
  55. uidb64 = urlsafe_base64_encode(str(self.user.pk).encode())
  56. url = reverse(
  57. "password_reset_confirm", kwargs={"uidb64": uidb64, "token": token}
  58. )
  59. response = client.get(url)
  60. self.assertContains(
  61. response, "<title>Enter new password | Django site admin</title>"
  62. )
  63. self.assertContains(response, "<h1>Enter new password</h1>")
  64. # The username is added to the password reset confirmation form to help
  65. # browser's password managers.
  66. self.assertContains(
  67. response,
  68. '<input class="hidden" autocomplete="username" value="jsmith">',
  69. )
  70. @override_settings(AUTH_USER_MODEL="auth_tests.CustomUser")
  71. def test_password_reset_confirm_view_custom_username_hint(self):
  72. custom_user = CustomUser.custom_objects.create_user(
  73. email="joe@example.com",
  74. date_of_birth=date(1986, 11, 11),
  75. first_name="Joe",
  76. )
  77. client = PasswordResetConfirmClient()
  78. default_token_generator = PasswordResetTokenGenerator()
  79. token = default_token_generator.make_token(custom_user)
  80. uidb64 = urlsafe_base64_encode(str(custom_user.pk).encode())
  81. url = reverse(
  82. "password_reset_confirm", kwargs={"uidb64": uidb64, "token": token}
  83. )
  84. response = client.get(url)
  85. self.assertContains(
  86. response,
  87. "<title>Enter new password | Django site admin</title>",
  88. )
  89. self.assertContains(response, "<h1>Enter new password</h1>")
  90. # The username field is added to the password reset confirmation form
  91. # to help browser's password managers.
  92. self.assertContains(
  93. response,
  94. '<input class="hidden" autocomplete="username" value="joe@example.com">',
  95. )
  96. def test_password_reset_complete_view(self):
  97. response = PasswordResetCompleteView.as_view()(self.request)
  98. self.assertContains(
  99. response, "<title>Password reset complete | Django site admin</title>"
  100. )
  101. self.assertContains(response, "<h1>Password reset complete</h1>")
  102. def test_password_reset_change_view(self):
  103. response = PasswordChangeView.as_view(success_url="dummy/")(self.request)
  104. self.assertContains(
  105. response, "<title>Password change | Django site admin</title>"
  106. )
  107. self.assertContains(response, "<h1>Password change</h1>")
  108. def test_password_change_done_view(self):
  109. response = PasswordChangeDoneView.as_view()(self.request)
  110. self.assertContains(
  111. response, "<title>Password change successful | Django site admin</title>"
  112. )
  113. self.assertContains(response, "<h1>Password change successful</h1>")