Skip to content

Commit 87fff49

Browse files
committed
Add tests for permanent and custom claims mappings
1 parent 644d7a4 commit 87fff49

File tree

2 files changed

+59
-3
lines changed

2 files changed

+59
-3
lines changed

tests/conftest.py

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,13 @@ def user(request: Request, _: str = Depends(oauth2)):
5454
@app_router.get("/auth")
5555
def auth(request: Request):
5656
access_token = request.auth.jwt_create({
57-
"name": "test",
58-
"sub": "test",
59-
"id": "test",
57+
"id": 54321,
58+
"followers": 80,
59+
"sub": "1234567890",
60+
"name": "John Doe",
61+
"provider": "github",
62+
"emails": ["[email protected]"],
63+
"image": "https://example.com/john.doe.png",
6064
})
6165
response = Response()
6266
response.set_cookie(

tests/test_claims.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
import pytest
2+
from fastapi import APIRouter
3+
from fastapi import Request
4+
from httpx import AsyncClient
5+
6+
from fastapi_oauth2.claims import Claims
7+
8+
9+
@pytest.mark.anyio
10+
async def test_permanent_claims_mapping(get_app):
11+
app = get_app()
12+
router = APIRouter()
13+
14+
@router.get("/test_claims")
15+
def test_claims(request: Request):
16+
user = request.user.use_claims(Claims()) # use default claims mapping
17+
assert user.display_name == "John Doe"
18+
assert user.identity == "1234567890"
19+
assert user.picture == ""
20+
assert user.email == ""
21+
22+
app.include_router(router)
23+
24+
async with AsyncClient(app=app, base_url="http://test") as client:
25+
await client.get("/auth") # Simulate login
26+
await client.get("/test_claims")
27+
28+
29+
@pytest.mark.anyio
30+
async def test_custom_claims_mapping(get_app):
31+
app = get_app()
32+
router = APIRouter()
33+
34+
@router.get("/test_claims")
35+
def test_claims(request: Request):
36+
user = request.user.use_claims(Claims(
37+
picture="image",
38+
email=lambda u: u.emails[0],
39+
identity=lambda u: f"{u.provider}:{u.sub}",
40+
is_popular=lambda u: u.followers > 100,
41+
)) # use custom claims mapping
42+
assert user.display_name == "John Doe"
43+
assert user.identity == "github:1234567890"
44+
assert user.picture == "https://example.com/john.doe.png"
45+
assert user.email == "[email protected]"
46+
assert not user.is_popular
47+
48+
app.include_router(router)
49+
50+
async with AsyncClient(app=app, base_url="http://test") as client:
51+
await client.get("/auth") # Simulate login
52+
await client.get("/test_claims")

0 commit comments

Comments
 (0)