Files
colibre/tests/auth/test_tokens.py
2026-04-20 17:24:49 +02:00

69 lines
2.2 KiB
Python

from src.auth import db
from src.auth.tokens import (
consume_password_reset_token,
consume_verification_token,
create_password_reset_token,
create_verification_token,
hash_token,
)
def test_hash_token_is_stable():
t = "abc123"
assert hash_token(t) == hash_token(t)
assert hash_token(t) != hash_token("abc124")
assert len(hash_token(t)) == 64 # sha256 hex
def test_create_verification_token_returns_plain_token(users_db_path):
db.init_schema()
uid = db.create_user("a@b.c", "h")
plain = create_verification_token(uid)
assert isinstance(plain, str)
assert len(plain) >= 32
# stocké en DB sous forme hashée
row = db.find_email_verification_token(hash_token(plain))
assert row is not None
assert row["user_id"] == uid
def test_consume_verification_token_succeeds_once(users_db_path):
db.init_schema()
uid = db.create_user("a@b.c", "h")
plain = create_verification_token(uid)
user_id = consume_verification_token(plain)
assert user_id == uid
# usage unique : les tokens de cet user sont supprimés
assert consume_verification_token(plain) is None
def test_consume_invalid_verification_token(users_db_path):
db.init_schema()
assert consume_verification_token("n-existe-pas") is None
def test_verification_token_expires(users_db_path, monkeypatch):
db.init_schema()
uid = db.create_user("a@b.c", "h")
plain = create_verification_token(uid, expires_in_hours=-1)
assert consume_verification_token(plain) is None
def test_create_password_reset_token_deletes_previous(users_db_path):
db.init_schema()
uid = db.create_user("a@b.c", "h")
old = create_password_reset_token(uid)
new = create_password_reset_token(uid)
# l'ancien a été supprimé
assert consume_password_reset_token(old) is None
# le nouveau fonctionne
assert consume_password_reset_token(new) == uid
def test_consume_password_reset_token_is_single_use(users_db_path):
db.init_schema()
uid = db.create_user("a@b.c", "h")
plain = create_password_reset_token(uid)
assert consume_password_reset_token(plain) == uid
assert consume_password_reset_token(plain) is None