From 72fd495c5b77b36104ac7bae4eabcc8247dfea42 Mon Sep 17 00:00:00 2001 From: Colin Maudry Date: Mon, 20 Apr 2026 17:25:56 +0200 Subject: [PATCH] src/auth/models.py : classe User Flask-Login (#73) Co-Authored-By: Claude Sonnet 4.6 --- src/auth/models.py | 34 ++++++++++++++++++++++++++++++++++ tests/auth/test_models.py | 29 +++++++++++++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 src/auth/models.py create mode 100644 tests/auth/test_models.py diff --git a/src/auth/models.py b/src/auth/models.py new file mode 100644 index 0000000..63ba464 --- /dev/null +++ b/src/auth/models.py @@ -0,0 +1,34 @@ +import sqlite3 + +from src.auth import db + + +class User: + def __init__(self, row: sqlite3.Row): + self.id: int = row["id"] + self.email: str = row["email"] + self.email_verified: bool = bool(row["email_verified"]) + + @property + def is_authenticated(self) -> bool: + return True + + @property + def is_active(self) -> bool: + return True + + @property + def is_anonymous(self) -> bool: + return False + + def get_id(self) -> str: + return str(self.id) + + +def load_user(user_id: str) -> User | None: + try: + uid = int(user_id) + except (TypeError, ValueError): + return None + row = db.get_user_by_id(uid) + return User(row) if row else None diff --git a/tests/auth/test_models.py b/tests/auth/test_models.py new file mode 100644 index 0000000..df61960 --- /dev/null +++ b/tests/auth/test_models.py @@ -0,0 +1,29 @@ +from src.auth import db +from src.auth.models import User, load_user + + +def test_user_from_row(users_db_path): + db.init_schema() + uid = db.create_user("a@b.c", "hash") + db.set_email_verified(uid) + row = db.get_user_by_id(uid) + user = User(row) + assert user.id == uid + assert user.email == "a@b.c" + assert user.is_authenticated is True + assert user.is_active is True + assert user.is_anonymous is False + assert user.get_id() == str(uid) + + +def test_load_user_returns_none_if_missing(users_db_path): + db.init_schema() + assert load_user("999999") is None + + +def test_load_user_returns_user(users_db_path): + db.init_schema() + uid = db.create_user("a@b.c", "h") + user = load_user(str(uid)) + assert user is not None + assert user.id == uid