# retoor 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