test_serializer.py 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. from datetime import datetime, timedelta
  2. import pytest
  3. from freezegun import freeze_time
  4. from flaskbb import tokens
  5. from flaskbb.core.tokens import Token, TokenActions, TokenError
  6. def test_can_round_trip_token():
  7. serializer = tokens.FlaskBBTokenSerializer(
  8. 'hello i am secret', timedelta(seconds=100)
  9. )
  10. token = Token(user_id=1, operation=TokenActions.RESET_PASSWORD)
  11. roundtrip = serializer.loads(serializer.dumps(token))
  12. assert token == roundtrip
  13. def test_raises_token_error_with_bad_data():
  14. serializer = tokens.FlaskBBTokenSerializer(
  15. 'hello i am also secret', timedelta(seconds=100)
  16. )
  17. with pytest.raises(TokenError) as excinfo:
  18. serializer.loads('not actually a token')
  19. assert 'invalid' in str(excinfo.value)
  20. def test_expired_token_raises():
  21. serializer = tokens.FlaskBBTokenSerializer(
  22. 'i am a secret not', expiry=timedelta(seconds=1)
  23. )
  24. dumped_token = serializer.dumps(
  25. Token(user_id=1, operation=TokenActions.RESET_PASSWORD)
  26. )
  27. with freeze_time(datetime.now() + timedelta(days=10)):
  28. with pytest.raises(TokenError) as excinfo:
  29. serializer.loads(dumped_token)
  30. assert 'expired' in str(excinfo.value)