diff --git a/Makefile b/Makefile index 19b2637..68ae0f7 100644 --- a/Makefile +++ b/Makefile @@ -15,8 +15,13 @@ clean-build: clean-package find . -name "*.pyo" -exec rm -f {} + clean-tests: + rm -rf .sesskey rm -rf tests/.sesskey - rm -rf tests/Users.db + rm -rf tests/*.db # Alias to clean everything -clean: clean-build clean-tests \ No newline at end of file +clean: clean-build clean-tests + +clean-all : clean + rm -rf src/.sesskey + rm -rf src/Users.db diff --git a/src/myfasthtml/auth/utils.py b/src/myfasthtml/auth/utils.py index b59686d..c594c42 100644 --- a/src/myfasthtml/auth/utils.py +++ b/src/myfasthtml/auth/utils.py @@ -216,11 +216,11 @@ def register_user(email: str, username: str, password: str) -> Optional[Dict[str timeout=10.0 ) - if response.status_code == 200: + if response.status_code in (200, 201): return response.json() return None - except httpx.HTTPError: + except httpx.HTTPError as ex: return None diff --git a/tests/auth/test_login.py b/tests/auth/test_login.py index 80e8c7f..cd0f776 100644 --- a/tests/auth/test_login.py +++ b/tests/auth/test_login.py @@ -1,4 +1,5 @@ import os +from dataclasses import dataclass import pytest from fasthtml.fastapp import fast_app @@ -9,11 +10,29 @@ from myfasthtml.auth.utils import create_auth_beforeware, register_user from myfasthtml.core.testclient import MyTestClient +@dataclass +class DummyUser: + email: str + username: str + password: str + + +@pytest.fixture() +def registered_user(): + user = DummyUser("user@email.com", "user", "#Passw0rd") + register_user(user.email, user.username, user.password) + return user + + @pytest.fixture() def app(): beforeware = create_auth_beforeware() test_app, test_rt = fast_app(before=beforeware) setup_auth_routes(test_app, test_rt, mount_auth_app=True, sqlite_db_path="TestUsers.db") + + @test_rt('/') + def index(): return "You are now logged in !" + return test_app @@ -54,15 +73,43 @@ def test_i_cannot_login_with_wrong_credentials(user): user.should_see("Invalid email or password. Please try again.") -def test_i_can_login_with_correct_credentials(user, rt): - # create user - register_user("user@email.com", "user", "#Passw0rd") - - @rt('/') - def index(): return "You are now logged in !" - +def test_i_can_login_with_correct_credentials(user, registered_user): user.open("/login") form = user.find_form(fields=["Email", "Password"]) - form.fill(Email="user@email.com", Password="#Passw0rd") + form.fill(Email=registered_user.email, Password=registered_user.password) form.submit() user.should_see("You are now logged in !") + + +def test_i_can_can_navigate_once_logged_in(user, registered_user): + user.open("/welcome") # not logged in, redirects to login + user.should_see("Sign In") + + form = user.find_form(fields=["Email", "Password"]) + form.fill(Email=registered_user.email, Password=registered_user.password) + form.submit() + + user.open("/welcome") # once logged in, welcome page is accessible + user.should_see("Welcome back, user@email.com!") # welcome page is predefined + + +def test_i_can_register(user): + user.open("/register") + form = user.find_form(fields=["Email", "Username", "Password"]) + form.fill(Email="user@email.com", Username="username", Password="#Passw0rd", confirm_password="#Passw0rd") + form.submit() + + user.should_see("You are now logged in !") + + +def test_i_can_logout(user, registered_user): + user.open("/login") + form = user.find_form(fields=["Email", "Password"]) + form.fill(Email=registered_user.email, Password=registered_user.password) + form.submit() + + user.open("/logout") + user.should_see("Sign In") + + user.open("/welcome") + user.should_see("Sign In")