fooder-api/fooder/test/test_context.py

32 lines
1.2 KiB
Python

from datetime import datetime, timezone
import pytest
from fooder.context import AuthContextDependency
from fooder.exc import Unauthorized
from fooder.utils.jwt import AccessToken, RefreshToken
NOW = datetime.now(timezone.utc)
async def test_auth_context_valid_token_returns_correct_user(db_session, user):
token = AccessToken(exp=AccessToken.calculate_exp(NOW), sub=user.id)
ctx = await AuthContextDependency()(token=token.encode(), session=db_session)
assert ctx.user.id == user.id
async def test_auth_context_invalid_token_raises(db_session):
with pytest.raises(Unauthorized):
await AuthContextDependency()(token="bad-token", session=db_session)
async def test_auth_context_refresh_token_raises(db_session, user):
token = RefreshToken(exp=RefreshToken.calculate_exp(NOW), sub=user.id)
with pytest.raises(Unauthorized):
await AuthContextDependency()(token=token.encode(), session=db_session)
async def test_auth_context_unknown_user_raises(db_session):
token = AccessToken(exp=AccessToken.calculate_exp(NOW), sub=99999)
with pytest.raises(Unauthorized):
await AuthContextDependency()(token=token.encode(), session=db_session)