File size: 1,296 Bytes
b67c03f | 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 | from __future__ import annotations
from datetime import datetime, timezone, timedelta
from src.auth import OAuthContext, _parse_scope, public_oauth_context, oauth_warning_messages, REQUIRED_OAUTH_SCOPES
def test_parse_scope_accepts_space_and_commas():
assert _parse_scope("openid profile jobs,manage-repos write-repos") >= {"openid", "profile", "jobs", "manage-repos", "write-repos"}
def test_public_oauth_context_never_exposes_token():
ctx = OAuthContext(
username="alice",
token="hf_secret_token",
profile={"preferred_username": "alice", "picture": "https://example.com/a.png"},
scopes=set(REQUIRED_OAUTH_SCOPES),
expires_at=datetime.now(timezone.utc) + timedelta(hours=1),
is_pro=True,
can_pay=False,
)
data = public_oauth_context(ctx)
assert "token" not in str(data).lower()
assert "hf_secret_token" not in str(data)
assert data["username"] == "alice"
assert data["missing_scopes"] == []
def test_oauth_warnings_report_missing_scopes_and_billing():
ctx = OAuthContext(username="alice", token="secret", scopes={"jobs"}, can_pay=False)
warnings = "\n".join(oauth_warning_messages(ctx))
assert "Missing OAuth scopes" in warnings
assert "payment" in warnings or "billing" in warnings
|