test_activation.py 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import pytest
  2. from flaskbb.auth.services import activation
  3. from flaskbb.core.exceptions import ValidationError
  4. from flaskbb.core.tokens import Token, TokenActions, TokenError
  5. from flaskbb.user.models import User
  6. pytestmark = pytest.mark.usefixtures('default_settings')
  7. class TestAccountActivationInitiateActivation(object):
  8. def test_raises_if_user_doesnt_exist(self, Fred, token_serializer):
  9. service = activation.AccountActivator(token_serializer, User)
  10. with pytest.raises(ValidationError) as excinfo:
  11. service.initiate_account_activation('does@not.exist')
  12. assert excinfo.value.reason == "Entered email doesn't exist"
  13. def test_raises_if_user_is_already_active(self, Fred, token_serializer):
  14. service = activation.AccountActivator(token_serializer, User)
  15. with pytest.raises(ValidationError) as excinfo:
  16. service.initiate_account_activation(Fred.email)
  17. assert excinfo.value.reason == "Account is already activated"
  18. def test_calls_send_activation_token_successfully_if_user_exists(
  19. self, mocker, unactivated_user, token_serializer
  20. ):
  21. service = activation.AccountActivator(token_serializer, User)
  22. mock = mocker.MagicMock()
  23. with mocker.patch(
  24. 'flaskbb.auth.services.activation.send_activation_token.delay',
  25. mock):
  26. service.initiate_account_activation(unactivated_user.email)
  27. token = token_serializer.dumps(
  28. Token(
  29. user_id=unactivated_user.id,
  30. operation=TokenActions.ACTIVATE_ACCOUNT
  31. )
  32. )
  33. mock.assert_called_once_with(
  34. token=token,
  35. username=unactivated_user.username,
  36. email=unactivated_user.email
  37. )
  38. class TestAccountActivationActivateAccount(object):
  39. def test_raises_if_token_operation_isnt_activate(self, token_serializer):
  40. service = activation.AccountActivator(token_serializer, User)
  41. token = token_serializer.dumps(
  42. Token(user_id=1, operation=TokenActions.RESET_PASSWORD)
  43. )
  44. with pytest.raises(TokenError):
  45. service.activate_account(token)
  46. def test_raises_if_user_is_already_active(self, Fred, token_serializer):
  47. service = activation.AccountActivator(token_serializer, User)
  48. token = token_serializer.dumps(
  49. Token(user_id=Fred.id, operation=TokenActions.ACTIVATE_ACCOUNT)
  50. )
  51. with pytest.raises(ValidationError) as excinfo:
  52. service.activate_account(token)
  53. assert excinfo.value.reason == 'Account is already activated'
  54. def test_activates_user_successfully(
  55. self, unactivated_user, token_serializer
  56. ):
  57. service = activation.AccountActivator(token_serializer, User)
  58. token = token_serializer.dumps(
  59. Token(
  60. user_id=unactivated_user.id,
  61. operation=TokenActions.ACTIVATE_ACCOUNT
  62. )
  63. )
  64. service.activate_account(token)
  65. assert unactivated_user.activated