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 58 59 60 61 62 63 64 65 66 67 68
|
import time
import pytest
from httpx import ASGITransport
from authlib.integrations.httpx_client import AsyncAssertionClient
from ..asgi_helper import AsyncMockDispatch
default_token = {
"token_type": "Bearer",
"access_token": "a",
"refresh_token": "b",
"expires_in": "3600",
"expires_at": int(time.time()) + 3600,
}
@pytest.mark.asyncio
async def test_refresh_token():
async def verifier(request):
content = await request.body()
if str(request.url) == "https://i.b/token":
assert b"assertion=" in content
async with AsyncAssertionClient(
"https://i.b/token",
grant_type=AsyncAssertionClient.JWT_BEARER_GRANT_TYPE,
issuer="foo",
subject="foo",
audience="foo",
alg="HS256",
key="secret",
transport=ASGITransport(AsyncMockDispatch(default_token, assert_func=verifier)),
) as client:
await client.get("https://i.b")
# trigger more case
now = int(time.time())
async with AsyncAssertionClient(
"https://i.b/token",
issuer="foo",
subject=None,
audience="foo",
issued_at=now,
expires_at=now + 3600,
header={"alg": "HS256"},
key="secret",
scope="email",
claims={"test_mode": "true"},
transport=ASGITransport(AsyncMockDispatch(default_token, assert_func=verifier)),
) as client:
await client.get("https://i.b")
await client.get("https://i.b")
@pytest.mark.asyncio
async def test_without_alg():
async with AsyncAssertionClient(
"https://i.b/token",
issuer="foo",
subject="foo",
audience="foo",
key="secret",
transport=ASGITransport(AsyncMockDispatch()),
) as client:
with pytest.raises(ValueError):
await client.get("https://i.b")
|