src/auth/routes.py : route /auth/signup (#73)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -18,7 +18,9 @@ def app(users_db_path, monkeypatch):
|
||||
|
||||
from src.auth.setup import init_auth
|
||||
|
||||
monkeypatch.setenv("SECRET_KEY", "test-secret-key")
|
||||
app = Flask(__name__)
|
||||
app.config["WTF_CSRF_ENABLED"] = False
|
||||
init_auth(app)
|
||||
yield app
|
||||
|
||||
|
||||
@@ -0,0 +1,56 @@
|
||||
from src.auth import db
|
||||
|
||||
|
||||
def _signup(client, email="alice@example.com", password="password12", confirm=None):
|
||||
return client.post(
|
||||
"/auth/signup",
|
||||
data={
|
||||
"email": email,
|
||||
"password": password,
|
||||
"password_confirm": confirm if confirm is not None else password,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
def test_signup_creates_unverified_user(client, mail_outbox):
|
||||
resp = _signup(client)
|
||||
assert resp.status_code == 302
|
||||
assert "pending_verification=1" in resp.headers["Location"]
|
||||
row = db.get_user_by_email("alice@example.com")
|
||||
assert row is not None
|
||||
assert row["email_verified"] == 0
|
||||
assert len(mail_outbox) == 1
|
||||
assert mail_outbox[0].recipients == ["alice@example.com"]
|
||||
|
||||
|
||||
def test_signup_rejects_short_password(client, mail_outbox):
|
||||
resp = _signup(client, password="short", confirm="short")
|
||||
assert resp.status_code == 302
|
||||
assert "error=password_too_short" in resp.headers["Location"]
|
||||
assert db.get_user_by_email("alice@example.com") is None
|
||||
assert len(mail_outbox) == 0
|
||||
|
||||
|
||||
def test_signup_rejects_mismatched_passwords(client, mail_outbox):
|
||||
resp = _signup(client, password="password12", confirm="different12")
|
||||
assert "error=password_mismatch" in resp.headers["Location"]
|
||||
assert db.get_user_by_email("alice@example.com") is None
|
||||
assert len(mail_outbox) == 0
|
||||
|
||||
|
||||
def test_signup_rejects_invalid_email(client, mail_outbox):
|
||||
resp = _signup(client, email="pas-un-email")
|
||||
assert "error=invalid_email" in resp.headers["Location"]
|
||||
assert len(mail_outbox) == 0
|
||||
|
||||
|
||||
def test_signup_rejects_duplicate_email(client, mail_outbox):
|
||||
_signup(client)
|
||||
resp = _signup(client)
|
||||
assert "error=email_taken" in resp.headers["Location"]
|
||||
assert len(mail_outbox) == 1 # seul le premier signup a envoyé l'email
|
||||
|
||||
|
||||
def test_signup_email_lowercased(client, mail_outbox):
|
||||
_signup(client, email="Alice@Example.COM")
|
||||
assert db.get_user_by_email("alice@example.com") is not None
|
||||
Reference in New Issue
Block a user