123 lines
4.0 KiB
Python
123 lines
4.0 KiB
Python
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.utils.encoding import force_bytes
|
|
from django.utils.http import urlsafe_base64_encode
|
|
|
|
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)
|
|
|
|
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
|