File size: 1,882 Bytes
4879fc7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
"""GET /v1/me — the caller's identity + organizer status, the dashboard's
hint for whether to show the broadcast toggle. Not the security boundary:
POST /v1/messages re-verifies on every broadcast."""


def _me(env, token="user-token"):
    return env.client.get("/v1/me", headers={"Authorization": f"Bearer {token}"})


def test_me_requires_bearer_token(env):
    r = env.client.get("/v1/me")
    assert r.status_code == 401
    assert r.json()["error"]["code"] == "UNAUTHORIZED"


def test_me_reports_organizer_via_email_lookup(env):
    env.hub.org_roles_by_email = {env.hub.whoami_email.lower(): ("test-user", "admin")}
    data = _me(env).json()
    assert data == {
        "hf_user": "test-user",
        "handle": "human-test-user",
        "is_member": True,
        "is_organizer": True,
    }
    # the targeted lookup answered; no full-org scan needed
    assert env.hub.org_member_roles_calls == 0


def test_me_non_admin_member_is_not_organizer(env):
    env.hub.org_roles = {"test-user": "write"}
    data = _me(env).json()
    assert data["is_member"] is True
    assert data["is_organizer"] is False


def test_me_non_member_is_neither(env):
    env.hub.whoami_orgs = set()
    data = _me(env).json()
    assert data["is_member"] is False
    assert data["is_organizer"] is False
    # not a member → never bother resolving a role
    assert env.hub.org_member_role_by_email_calls == 0
    assert env.hub.org_member_roles_calls == 0


def test_me_degrades_to_not_organizer_on_lookup_failure(env):
    env.hub.org_member_role_by_email_fails = True
    env.hub.org_member_roles_fails = True
    r = _me(env)
    assert r.status_code == 200  # a UI hint must not 503 the whole page
    assert r.json()["is_organizer"] is False


def test_me_handle_is_lowercased(env):
    env.hub.whoami_user = "Test-User"
    assert _me(env).json()["handle"] == "human-test-user"