Spaces:
Sleeping
Sleeping
| """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" | |