feat: added tests for reset password
This commit is contained in:
@@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PACKAGE VERSION\n"
|
"Project-Id-Version: PACKAGE VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: \n"
|
"Report-Msgid-Bugs-To: \n"
|
||||||
"POT-Creation-Date: 2025-01-16 23:18+0100\n"
|
"POT-Creation-Date: 2025-01-16 23:42+0100\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@@ -738,7 +738,7 @@ msgstr "Contraseña"
|
|||||||
msgid "Mantener sesión iniciada"
|
msgid "Mantener sesión iniciada"
|
||||||
msgstr "Mantener sesión iniciada"
|
msgstr "Mantener sesión iniciada"
|
||||||
|
|
||||||
#: users/forms/reset_password.py:16 users/forms/reset_password.py:30
|
#: users/forms/reset_password.py:16 users/forms/reset_password.py:32
|
||||||
msgid "El token no es válido o ha expirado"
|
msgid "El token no es válido o ha expirado"
|
||||||
msgstr "El token no es válido o ha expirado"
|
msgstr "El token no es válido o ha expirado"
|
||||||
|
|
||||||
@@ -1041,8 +1041,8 @@ msgid ""
|
|||||||
"You're receiving this email because you requested a password reset for your "
|
"You're receiving this email because you requested a password reset for your "
|
||||||
"user account at %(site_name)s."
|
"user account at %(site_name)s."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Ha recibido este correo electrónico porque ha solicitado restablecer la contraseña para su "
|
"Ha recibido este correo electrónico porque ha solicitado restablecer la "
|
||||||
"cuenta en %(site_name)s."
|
"contraseña para su cuenta en %(site_name)s."
|
||||||
|
|
||||||
#: web/templates/mails/reset_password.html:4
|
#: web/templates/mails/reset_password.html:4
|
||||||
msgid "Please go to the following page and choose a new password:"
|
msgid "Please go to the following page and choose a new password:"
|
||||||
@@ -1059,7 +1059,7 @@ msgstr " ¡Gracias por usar nuestro sitio!"
|
|||||||
#: web/templates/mails/reset_password.html:12
|
#: web/templates/mails/reset_password.html:12
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "The %(site_name)s team"
|
msgid "The %(site_name)s team"
|
||||||
msgstr "El equipo de %(site_name)"
|
msgstr "El equipo de %(site_name)s"
|
||||||
|
|
||||||
#: web/templates/users/login.html:18
|
#: web/templates/users/login.html:18
|
||||||
msgid "Inicia sesión en tu cuenta"
|
msgid "Inicia sesión en tu cuenta"
|
||||||
@@ -1265,7 +1265,9 @@ msgid "reset-password/"
|
|||||||
msgstr "restablecer-contrasena/"
|
msgstr "restablecer-contrasena/"
|
||||||
|
|
||||||
#: web/urls.py:53
|
#: web/urls.py:53
|
||||||
msgid "reset/<uidb64>/<token>/"
|
#, fuzzy
|
||||||
|
#| msgid "reset/<uidb64>/<token>/"
|
||||||
|
msgid "reset-password/<uidb64>/<token>/"
|
||||||
msgstr "restablecer-contrasena/<uidb64>/<token>/"
|
msgstr "restablecer-contrasena/<uidb64>/<token>/"
|
||||||
|
|
||||||
#: web/urls.py:58
|
#: web/urls.py:58
|
||||||
|
|||||||
@@ -24,7 +24,9 @@ class SetPasswordForm(BaseSetPasswordForm):
|
|||||||
)
|
)
|
||||||
|
|
||||||
def validate_token(self):
|
def validate_token(self):
|
||||||
is_valid = default_token_generator.check_token(self.user, self.data.get('token'))
|
is_valid = default_token_generator.check_token(
|
||||||
|
self.user, self.data.get("token")
|
||||||
|
)
|
||||||
|
|
||||||
if not is_valid:
|
if not is_valid:
|
||||||
raise ValidationError(_("El token no es válido o ha expirado"))
|
raise ValidationError(_("El token no es válido o ha expirado"))
|
||||||
|
|||||||
@@ -0,0 +1,79 @@
|
|||||||
|
from django.contrib.auth import get_user_model
|
||||||
|
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
|
||||||
|
|
||||||
|
User = get_user_model()
|
||||||
|
|
||||||
|
|
||||||
|
class TestResetPassword(TransactionTestCase):
|
||||||
|
def setUp(self) -> None:
|
||||||
|
self.password = "theonering"
|
||||||
|
self.email = "sauron@mordor.middleearth"
|
||||||
|
self.first_name = "Sauron"
|
||||||
|
self.last_name = "The Lord of the Rings"
|
||||||
|
|
||||||
|
self.user = User.objects.create_user(
|
||||||
|
username=self.email,
|
||||||
|
password=self.password,
|
||||||
|
first_name=self.first_name,
|
||||||
|
last_name=self.last_name,
|
||||||
|
)
|
||||||
|
|
||||||
|
def test_get_reset_password_page(self):
|
||||||
|
response = self.client.get(reverse("web:reset_password"))
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
def test_reset_password(self):
|
||||||
|
response = self.client.post(
|
||||||
|
reverse("web:reset_password"),
|
||||||
|
{
|
||||||
|
"email": self.email,
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 302
|
||||||
|
assert response.url == reverse("web:reset_password_email_sent")
|
||||||
|
|
||||||
|
def test_reset_password_not_existing_user(self):
|
||||||
|
response = self.client.post(
|
||||||
|
reverse("web:reset_password"),
|
||||||
|
{
|
||||||
|
"email": 'vanpiro@noesiten.com',
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 302
|
||||||
|
assert response.url == reverse("web:reset_password_email_sent")
|
||||||
|
|
||||||
|
def test_reset_password_confirm_get(self):
|
||||||
|
token = default_token_generator.make_token(self.user)
|
||||||
|
uidb64 = urlsafe_base64_encode(force_bytes(self.user.pk))
|
||||||
|
|
||||||
|
response = self.client.get(
|
||||||
|
reverse("web:reset_password_confirm", kwargs={"uidb64": uidb64, "token": token}),
|
||||||
|
)
|
||||||
|
|
||||||
|
assert response.status_code == 200
|
||||||
|
|
||||||
|
def test_reset_password_confirm(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": new_password,
|
||||||
|
}
|
||||||
|
)
|
||||||
|
assert response.status_code == 302
|
||||||
|
assert response.url == reverse('web:login')
|
||||||
|
self.user.refresh_from_db()
|
||||||
|
|
||||||
|
assert self.user.check_password(new_password)
|
||||||
+1
-1
@@ -50,7 +50,7 @@ i18n_resolvers = i18n_patterns(
|
|||||||
path(_("register/"), register, name="register"),
|
path(_("register/"), register, name="register"),
|
||||||
path(_("reset-password/"), reset_password, name="reset_password"),
|
path(_("reset-password/"), reset_password, name="reset_password"),
|
||||||
path(
|
path(
|
||||||
_("reset/<uidb64>/<token>/"),
|
_("reset-password/<uidb64>/<token>/"),
|
||||||
reset_password_confirm,
|
reset_password_confirm,
|
||||||
name="reset_password_confirm",
|
name="reset_password_confirm",
|
||||||
),
|
),
|
||||||
|
|||||||
+1
-1
@@ -210,7 +210,7 @@ class ResetPasswordConfirmView(TemplateView):
|
|||||||
return {
|
return {
|
||||||
"title": WebSettings.load().web_title,
|
"title": WebSettings.load().web_title,
|
||||||
"description": _("Establecer nueva contraseña"),
|
"description": _("Establecer nueva contraseña"),
|
||||||
"form": self.form_class(user, {'token': new_token}),
|
"form": self.form_class(user, {"token": new_token}),
|
||||||
"valid_token": valid_token,
|
"valid_token": valid_token,
|
||||||
"new_token": new_token,
|
"new_token": new_token,
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user