test_activation.py 3.0 KB

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