feat(vues): jeton de partage en minuscules (base36, #112)
Alphabet du jeton passé de base62 (a-z A-Z 0-9) à base36 (a-z 0-9), longueur inchangée (6). Lien plus lisible/dictable et cohérent avec le slug déjà en minuscules. Les jetons déjà générés (à casse mixte) restent valides (lookup par match exact).
This commit is contained in:
@@ -24,7 +24,7 @@ CREATE UNIQUE INDEX IF NOT EXISTS idx_saved_views_token
|
|||||||
ON saved_views(token);
|
ON saved_views(token);
|
||||||
"""
|
"""
|
||||||
|
|
||||||
_TOKEN_ALPHABET = string.ascii_letters + string.digits # base62
|
_TOKEN_ALPHABET = string.ascii_lowercase + string.digits # base36 (a-z 0-9)
|
||||||
|
|
||||||
|
|
||||||
def generate_token(length: int = 6) -> str:
|
def generate_token(length: int = 6) -> str:
|
||||||
|
|||||||
@@ -79,11 +79,13 @@ def test_views_deleted_on_user_cascade(users_db_path):
|
|||||||
assert db.list_views(uid, "tableau") == []
|
assert db.list_views(uid, "tableau") == []
|
||||||
|
|
||||||
|
|
||||||
def test_generate_token_is_base62_and_length_6():
|
def test_generate_token_is_lowercase_base36_and_length_6():
|
||||||
token = db.generate_token()
|
token = db.generate_token()
|
||||||
assert len(token) == 6
|
assert len(token) == 6
|
||||||
alphabet = set(string.ascii_letters + string.digits)
|
alphabet = set(string.ascii_lowercase + string.digits)
|
||||||
assert set(token) <= alphabet
|
assert set(token) <= alphabet
|
||||||
|
# Jamais de majuscule (lien plus lisible/dictable, cohérent avec le slug).
|
||||||
|
assert token == token.lower()
|
||||||
|
|
||||||
|
|
||||||
def test_upsert_returns_token_on_insert(users_db_path):
|
def test_upsert_returns_token_on_insert(users_db_path):
|
||||||
|
|||||||
Reference in New Issue
Block a user