test_serializer.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  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. pytestmark = pytest.mark.usefixtures('default_settings')
  7. def test_can_round_trip_token():
  8. serializer = tokens.FlaskBBTokenSerializer(
  9. 'hello i am secret', timedelta(seconds=100)
  10. )
  11. token = Token(user_id=1, operation=TokenActions.RESET_PASSWORD)
  12. roundtrip = serializer.loads(serializer.dumps(token))
  13. assert token == roundtrip
  14. def test_raises_token_error_with_bad_data():
  15. serializer = tokens.FlaskBBTokenSerializer(
  16. 'hello i am also secret', timedelta(seconds=100)
  17. )
  18. with pytest.raises(TokenError) as excinfo:
  19. serializer.loads('not actually a token')
  20. assert 'invalid' in str(excinfo.value)
  21. def test_expired_token_raises():
  22. serializer = tokens.FlaskBBTokenSerializer(
  23. 'i am a secret not', expiry=timedelta(seconds=1)
  24. )
  25. dumped_token = serializer.dumps(
  26. Token(user_id=1, operation=TokenActions.RESET_PASSWORD)
  27. )
  28. with freeze_time(datetime.now() + timedelta(days=10)):
  29. with pytest.raises(TokenError) as excinfo:
  30. serializer.loads(dumped_token)
  31. assert 'expired' in str(excinfo.value)