grantforge-api / backend /tests /test_generator_stream_ticket.py
GrantForge Bot
Deploy sha-565ad85979610064f6d1c18ab3b6404357d61073 — source build (no GHCR)
ce8f04a
Raw
History Blame Contribute Delete
1.14 kB
"""Generator SSE tickets must survive reconnect (not one-shot burn)."""
from __future__ import annotations
def test_validate_ticket_reusable_until_ttl():
from core.ticket_store import mint_ticket, validate_ticket, consume_ticket
tid = mint_ticket("user_abc", "proj-1", ttl_seconds=60)
u1 = validate_ticket(tid, "proj-1", consume=False)
u2 = validate_ticket(tid, "proj-1", consume=False)
assert u1 == "user_abc"
assert u2 == "user_abc"
# still consumable
u3 = consume_ticket(tid, "proj-1")
assert u3 == "user_abc"
# gone after consume
try:
validate_ticket(tid, "proj-1", consume=False)
assert False, "expected invalid after consume"
except ValueError as e:
assert "invalid" in str(e) or "expired" in str(e)
def test_validate_ticket_project_mismatch():
from core.ticket_store import mint_ticket, validate_ticket
tid = mint_ticket("user_x", "proj-a", ttl_seconds=30)
try:
validate_ticket(tid, "proj-b", consume=False)
assert False, "expected project_mismatch"
except ValueError as e:
assert str(e) == "project_mismatch"