test_auth_api.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. from datetime import datetime, timedelta, timezone
  2. import pytest
  3. def test_access_token_contains_only_identity_claims():
  4. from app.core.system.tokens import decode_access_token, issue_access_token
  5. token = issue_access_token(
  6. user_id="01900000-0000-7000-8000-000000000001",
  7. roles=["viewer"],
  8. secret="test-secret-that-is-long-enough",
  9. now=datetime(2026, 7, 16, tzinfo=timezone.utc),
  10. lifetime=timedelta(minutes=15),
  11. )
  12. claims = decode_access_token(
  13. token,
  14. secret="test-secret-that-is-long-enough",
  15. now=datetime(2026, 7, 16, 0, 5, tzinfo=timezone.utc),
  16. )
  17. assert set(claims) == {"sub", "roles", "iat", "exp", "jti"}
  18. assert claims["roles"] == ["viewer"]
  19. def test_expired_and_tampered_tokens_are_rejected():
  20. from app.core.system.tokens import TokenError, decode_access_token, issue_access_token
  21. now = datetime(2026, 7, 16, tzinfo=timezone.utc)
  22. token = issue_access_token(
  23. user_id="01900000-0000-7000-8000-000000000001",
  24. roles=["admin"],
  25. secret="test-secret-that-is-long-enough",
  26. now=now,
  27. lifetime=timedelta(seconds=1),
  28. )
  29. with pytest.raises(TokenError):
  30. decode_access_token(
  31. token,
  32. secret="test-secret-that-is-long-enough",
  33. now=now + timedelta(seconds=2),
  34. )
  35. with pytest.raises(TokenError):
  36. decode_access_token(
  37. token + "tampered",
  38. secret="test-secret-that-is-long-enough",
  39. now=now,
  40. )