test_activation.py 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. mocker.patch(
  24. 'flaskbb.auth.services.activation.send_activation_token.delay',
  25. mock
  26. )
  27. service.initiate_account_activation(unactivated_user.email)
  28. token = token_serializer.dumps(
  29. Token(
  30. user_id=unactivated_user.id,
  31. operation=TokenActions.ACTIVATE_ACCOUNT
  32. )
  33. )
  34. mock.assert_called_once_with(
  35. token=token,
  36. username=unactivated_user.username,
  37. email=unactivated_user.email
  38. )
  39. class TestAccountActivationActivateAccount(object):
  40. def test_raises_if_token_operation_isnt_activate(self, token_serializer):
  41. service = activation.AccountActivator(token_serializer, User)
  42. token = token_serializer.dumps(
  43. Token(user_id=1, operation=TokenActions.RESET_PASSWORD)
  44. )
  45. with pytest.raises(TokenError):
  46. service.activate_account(token)
  47. def test_raises_if_user_is_already_active(self, Fred, token_serializer):
  48. service = activation.AccountActivator(token_serializer, User)
  49. token = token_serializer.dumps(
  50. Token(user_id=Fred.id, operation=TokenActions.ACTIVATE_ACCOUNT)
  51. )
  52. with pytest.raises(ValidationError) as excinfo:
  53. service.activate_account(token)
  54. assert excinfo.value.reason == 'Account is already activated'
  55. def test_activates_user_successfully(
  56. self, unactivated_user, token_serializer
  57. ):
  58. service = activation.AccountActivator(token_serializer, User)
  59. token = token_serializer.dumps(
  60. Token(
  61. user_id=unactivated_user.id,
  62. operation=TokenActions.ACTIVATE_ACCOUNT
  63. )
  64. )
  65. service.activate_account(token)
  66. assert unactivated_user.activated