File size: 1,135 Bytes
ce8f04a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
"""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"