from django.contrib.auth import authenticate from django.contrib.auth.models import User from django.contrib.auth.tokens import PasswordResetTokenGenerator from django.contrib.auth.views import ( PasswordChangeDoneView, PasswordChangeView, PasswordResetCompleteView, PasswordResetDoneView, PasswordResetView, ) from django.test import RequestFactory, TestCase, override_settings from django.urls import reverse from django.utils.http import urlsafe_base64_encode from .client import PasswordResetConfirmClient @override_settings(ROOT_URLCONF='auth_tests.urls') class AuthTemplateTests(TestCase): request_factory = RequestFactory() @classmethod def setUpTestData(cls): user = User.objects.create_user('jsmith', 'jsmith@example.com', 'pass') user = authenticate(username=user.username, password='pass') request = cls.request_factory.get('/somepath/') request.user = user cls.user, cls.request = user, request def test_PasswordResetView(self): response = PasswordResetView.as_view(success_url='dummy/')(self.request) self.assertContains(response, 'Password reset | Django site admin') self.assertContains(response, '

Password reset

') def test_PasswordResetDoneView(self): response = PasswordResetDoneView.as_view()(self.request) self.assertContains(response, 'Password reset sent | Django site admin') self.assertContains(response, '

Password reset sent

') def test_PasswordResetConfirmView_invalid_token(self): # PasswordResetConfirmView invalid token client = PasswordResetConfirmClient() url = reverse('password_reset_confirm', kwargs={'uidb64': 'Bad', 'token': 'Bad-Token'}) response = client.get(url) self.assertContains(response, 'Password reset unsuccessful | Django site admin') self.assertContains(response, '

Password reset unsuccessful

') def test_PasswordResetConfirmView_valid_token(self): # PasswordResetConfirmView valid token client = PasswordResetConfirmClient() default_token_generator = PasswordResetTokenGenerator() token = default_token_generator.make_token(self.user) uidb64 = urlsafe_base64_encode(str(self.user.pk).encode()) url = reverse('password_reset_confirm', kwargs={'uidb64': uidb64, 'token': token}) response = client.get(url) self.assertContains(response, 'Enter new password | Django site admin') self.assertContains(response, '

Enter new password

') # The username is added to the password reset confirmation form to help # browser's password managers. self.assertContains( response, '', ) def test_PasswordResetCompleteView(self): response = PasswordResetCompleteView.as_view()(self.request) self.assertContains(response, 'Password reset complete | Django site admin') self.assertContains(response, '

Password reset complete

') def test_PasswordResetChangeView(self): response = PasswordChangeView.as_view(success_url='dummy/')(self.request) self.assertContains(response, 'Password change | Django site admin') self.assertContains(response, '

Password change

') def test_PasswordChangeDoneView(self): response = PasswordChangeDoneView.as_view()(self.request) self.assertContains(response, 'Password change successful | Django site admin') self.assertContains(response, '

Password change successful

')