@@ -0,0 +1,47 @@
|
||||
# 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
|
||||
Reference in New Issue
Block a user