From 7fe4fefe484733c1cf4916d23dd6dd117178b12e Mon Sep 17 00:00:00 2001 From: Pablo Moreno Date: Fri, 17 Jan 2025 00:36:41 +0100 Subject: [PATCH] chore: improve coverage --- users/forms/reset_password.py | 10 ++---- web/tests/test_reset_password.py | 59 +++++++++++++++++++++++++++----- 2 files changed, 53 insertions(+), 16 deletions(-) diff --git a/users/forms/reset_password.py b/users/forms/reset_password.py index daf19e6..9508b55 100644 --- a/users/forms/reset_password.py +++ b/users/forms/reset_password.py @@ -3,19 +3,13 @@ from django.contrib.auth.forms import PasswordResetForm as BasePasswordResetForm from django.contrib.auth.forms import SetPasswordForm as BaseSetPasswordForm from django.contrib.auth.tokens import default_token_generator from django.core.exceptions import ValidationError +from django.utils.text import gettext_lazy as _ class PasswordResetForm(BasePasswordResetForm): pass -def validate_token(token): - is_valid = default_token_generator.check_token(token) - - if not is_valid: - raise ValidationError(_("El token no es vĂ¡lido o ha expirado")) - - class SetPasswordForm(BaseSetPasswordForm): token = forms.CharField( required=True, @@ -35,6 +29,6 @@ class SetPasswordForm(BaseSetPasswordForm): try: self.validate_token() except ValidationError as e: - self.add_error(self.token, str(e)) + self.add_error('token', str(e)) return False return super().is_valid() diff --git a/web/tests/test_reset_password.py b/web/tests/test_reset_password.py index c43440d..5a47705 100644 --- a/web/tests/test_reset_password.py +++ b/web/tests/test_reset_password.py @@ -1,9 +1,9 @@ from django.contrib.auth import get_user_model +from django.contrib.auth.tokens import default_token_generator from django.shortcuts import reverse from django.test import TransactionTestCase -from django.contrib.auth.tokens import default_token_generator -from django.utils.http import urlsafe_base64_encode from django.utils.encoding import force_bytes +from django.utils.http import urlsafe_base64_encode User = get_user_model() @@ -41,7 +41,7 @@ class TestResetPassword(TransactionTestCase): response = self.client.post( reverse("web:reset_password"), { - "email": 'vanpiro@noesiten.com', + "email": "vanpiro@noesiten.com", }, ) @@ -53,7 +53,9 @@ class TestResetPassword(TransactionTestCase): uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)) response = self.client.get( - reverse("web:reset_password_confirm", kwargs={"uidb64": uidb64, "token": token}), + reverse( + "web:reset_password_confirm", kwargs={"uidb64": uidb64, "token": token} + ), ) assert response.status_code == 200 @@ -63,17 +65,58 @@ class TestResetPassword(TransactionTestCase): form_token = default_token_generator.make_token(self.user) uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)) - new_password = '89733wy29' + new_password = "89733wy29" response = self.client.post( - reverse("web:reset_password_confirm", kwargs={"uidb64": uidb64, "token": token}), { + reverse( + "web:reset_password_confirm", kwargs={"uidb64": uidb64, "token": token} + ), + { "token": form_token, "new_password1": new_password, "new_password2": new_password, - } + }, ) assert response.status_code == 302 - assert response.url == reverse('web:login') + assert response.url == reverse("web:login") self.user.refresh_from_db() assert self.user.check_password(new_password) + + def test_reset_password_confirm_distinct_password(self): + token = default_token_generator.make_token(self.user) + form_token = default_token_generator.make_token(self.user) + uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)) + + new_password = "89733wy29" + + response = self.client.post( + reverse( + "web:reset_password_confirm", kwargs={"uidb64": uidb64, "token": token} + ), + { + "token": form_token, + "new_password1": new_password, + "new_password2": "otherpassw13", + }, + ) + assert response.status_code == 200 + + def test_reset_password_confirm_invalid_token(self): + token = default_token_generator.make_token(self.user) + form_token = "invalid token" + uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk)) + + new_password = "89733wy29" + + response = self.client.post( + reverse( + "web:reset_password_confirm", kwargs={"uidb64": uidb64, "token": token} + ), + { + "token": form_token, + "new_password1": new_password, + "new_password2": new_password, + }, + ) + assert response.status_code == 200