test_serializer.py 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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=datetime.utcnow() + 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)
  32. def test_raises_typeerror_expiry_args():
  33. with pytest.raises(TypeError) as excinfo:
  34. tokens.FlaskBBTokenSerializer("hello i am also secret", 100)
  35. assert "timedelta or datetime" in excinfo.value