Skip to content

Commit

Permalink
Merge branch 'ckan-3077-exceptions-user-invite'
Browse files Browse the repository at this point in the history
  • Loading branch information
brew committed Jun 6, 2016
2 parents dd85519 + a809747 commit bccd815
Show file tree
Hide file tree
Showing 2 changed files with 35 additions and 1 deletion.
12 changes: 11 additions & 1 deletion ckan/logic/action/create.py
Expand Up @@ -5,6 +5,7 @@
import logging
import random
import re
from socket import error as socket_error

from pylons import config
import paste.deploy.converters
Expand Down Expand Up @@ -1031,8 +1032,17 @@ def user_invite(context, data_dict):
_get_action('group_member_create')(context, member_dict)
group_dict = _get_action('group_show')(context,
{'id': data['group_id']})
try:
mailer.send_invite(user, group_dict, data['role'])
except (socket_error, mailer.MailerException) as error:
# Email could not be sent, delete the pending user

_get_action('user_delete')(context, {'id': user.id})

msg = _('Error sending the invite email, ' +
'the user was not created: {0}').format(error)
raise ValidationError({'message': msg}, error_summary=msg)

mailer.send_invite(user, group_dict, data['role'])
return model_dictize.user_dictize(user, context)


Expand Down
24 changes: 24 additions & 0 deletions ckan/tests/logic/action/test_create.py
Expand Up @@ -99,6 +99,30 @@ def test_user_name_lowercase_when_email_is_uppercase(self, _):

assert_equals(invited_user.name.split('-')[0], 'maria')

@helpers.change_config('smtp.server', 'email.example.com')
def test_smtp_error_returns_error_message(self):

sysadmin = factories.Sysadmin()
group = factories.Group()

context = {
'user': sysadmin['name']
}
params = {
'email': 'example-invited-user@example.com',
'group_id': group['id'],
'role': 'editor'
}

assert_raises(logic.ValidationError, helpers.call_action,
'user_invite', context, **params)

# Check that the pending user was deleted
user = model.Session.query(model.User).filter(
model.User.name.like('example-invited-user%')).all()

assert_equals(user[0].state, 'deleted')

def _invite_user_to_group(self, email='user@email.com',
group=None, role='member'):
user = factories.User()
Expand Down

0 comments on commit bccd815

Please sign in to comment.