|
# retoor <retoor@molodetz.nl>
|
|
|
|
from datetime import datetime, timedelta, timezone
|
|
|
|
from devplacepy.database import get_table
|
|
from devplacepy.utils import generate_uid
|
|
from devplacepy.services.messaging.tickets import issue_ticket, redeem_ticket
|
|
|
|
|
|
def _user_uid():
|
|
uid = generate_uid()
|
|
get_table("users").insert(
|
|
{
|
|
"uid": uid,
|
|
"username": f"tkt_{uid[:8]}",
|
|
"email": f"{uid[:8]}@tkt.dev",
|
|
"password_hash": "x",
|
|
"role": "Member",
|
|
"is_active": True,
|
|
"created_at": datetime.now(timezone.utc).isoformat(),
|
|
}
|
|
)
|
|
return uid
|
|
|
|
|
|
def test_ticket_redeems_once(local_db):
|
|
user_uid = _user_uid()
|
|
token = issue_ticket(user_uid)
|
|
|
|
assert redeem_ticket(token) == user_uid
|
|
assert redeem_ticket(token) is None
|
|
|
|
|
|
def test_expired_ticket_never_used_still_rejected(local_db):
|
|
user_uid = _user_uid()
|
|
token = issue_ticket(user_uid)
|
|
|
|
expired_at = (datetime.now(timezone.utc) - timedelta(seconds=5)).isoformat()
|
|
tickets = get_table("ws_tickets")
|
|
row = tickets.find_one(token=token)
|
|
tickets.update({"uid": row["uid"], "expires_at": expired_at}, ["uid"])
|
|
|
|
assert redeem_ticket(token) is None
|
|
|
|
|
|
def test_redeem_unknown_token_returns_none(local_db):
|
|
assert redeem_ticket("not-a-real-token") is None
|