Files
colibre/tests/auth/test_account.py
T

103 lines
3.2 KiB
Python

from werkzeug.security import check_password_hash, generate_password_hash
from src.auth import db
def _login(client, email="a@b.c", password="old-password12"):
db.init_schema()
uid = db.create_user(email, generate_password_hash(password))
db.set_email_verified(uid)
client.post("/auth/login", data={"email": email, "password": password})
return uid
def test_change_password_requires_login(client, users_db_path):
resp = client.post(
"/auth/change-password",
data={
"current_password": "whatever",
"password": "new-password12",
"password_confirm": "new-password12",
},
)
assert resp.status_code in (302, 401)
def test_change_password_success(client, users_db_path):
uid = _login(client)
resp = client.post(
"/auth/change-password",
data={
"current_password": "old-password12",
"password": "new-password12",
"password_confirm": "new-password12",
},
)
assert resp.status_code == 302
assert "password_changed=1" in resp.headers["Location"]
row = db.get_user_by_id(uid)
assert check_password_hash(row["password_hash"], "new-password12")
def test_change_password_wrong_current(client, users_db_path):
uid = _login(client)
resp = client.post(
"/auth/change-password",
data={
"current_password": "wrong",
"password": "new-password12",
"password_confirm": "new-password12",
},
)
assert "error=invalid_current_password" in resp.headers["Location"]
row = db.get_user_by_id(uid)
assert check_password_hash(row["password_hash"], "old-password12")
def test_change_password_short(client, users_db_path):
_login(client)
resp = client.post(
"/auth/change-password",
data={
"current_password": "old-password12",
"password": "short",
"password_confirm": "short",
},
)
assert "error=password_too_short" in resp.headers["Location"]
def test_change_password_mismatch(client, users_db_path):
_login(client)
resp = client.post(
"/auth/change-password",
data={
"current_password": "old-password12",
"password": "new-password12",
"password_confirm": "autre-password12",
},
)
assert "error=password_mismatch" in resp.headers["Location"]
def test_delete_account_requires_login(client, users_db_path):
resp = client.post("/auth/delete-account", data={"current_password": "x"})
assert resp.status_code in (302, 401)
def test_delete_account_wrong_password(client, users_db_path):
uid = _login(client)
resp = client.post("/auth/delete-account", data={"current_password": "wrong"})
assert "error=invalid_current_password" in resp.headers["Location"]
assert db.get_user_by_id(uid) is not None
def test_delete_account_success(client, users_db_path):
uid = _login(client)
resp = client.post(
"/auth/delete-account", data={"current_password": "old-password12"}
)
assert resp.status_code == 302
assert "account_deleted=1" in resp.headers["Location"]
assert db.get_user_by_id(uid) is None