Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch '1505-invite-to-organization-causes-error'
- Loading branch information
Showing
8 changed files
with
147 additions
and
109 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,89 @@ | ||
'''Unit tests for ckan/logic/auth/create.py. | ||
''' | ||
|
||
import mock | ||
import nose.tools | ||
|
||
import ckan.new_tests.helpers as helpers | ||
import ckan.new_tests.factories as factories | ||
import ckan.model | ||
import ckan.logic | ||
|
||
|
||
class TestUserInvite(object): | ||
|
||
def setup(self): | ||
helpers.reset_db() | ||
|
||
@mock.patch('ckan.lib.mailer.send_invite') | ||
def test_user_invite(self, _): | ||
invited_user = self._invite_user_to_group() | ||
|
||
assert invited_user is not None | ||
assert invited_user.is_pending() | ||
|
||
@mock.patch('ckan.lib.mailer.send_invite') | ||
def test_user_invite_creates_user_with_valid_username(self, _): | ||
email = 'user$%+abc@email.com' | ||
invited_user = self._invite_user_to_group(email) | ||
|
||
assert invited_user.name.startswith('user---abc'), invited_user | ||
|
||
@mock.patch('ckan.lib.mailer.send_invite') | ||
def test_user_invite_assigns_user_to_group_in_expected_role(self, _): | ||
role = 'admin' | ||
invited_user = self._invite_user_to_group(role=role) | ||
|
||
group_ids = invited_user.get_group_ids(capacity=role) | ||
assert len(group_ids) == 1, group_ids | ||
|
||
@mock.patch('ckan.lib.mailer.send_invite') | ||
def test_user_invite_sends_invite(self, send_invite): | ||
invited_user = self._invite_user_to_group() | ||
|
||
assert send_invite.called | ||
assert send_invite.call_args[0][0].id == invited_user.id | ||
|
||
@mock.patch('ckan.lib.mailer.send_invite') | ||
@mock.patch('random.SystemRandom') | ||
def test_user_invite_works_even_if_username_already_exists(self, rand, _): | ||
rand.return_value.random.side_effect = [1000, 1000, 1000, 2000, | ||
3000, 4000, 5000] | ||
|
||
for _ in range(3): | ||
invited_user = self._invite_user_to_group(email='same@email.com') | ||
assert invited_user is not None, invited_user | ||
|
||
@mock.patch('ckan.lib.mailer.send_invite') | ||
@nose.tools.raises(ckan.logic.ValidationError) | ||
def test_user_invite_requires_email(self, _): | ||
self._invite_user_to_group(email=None) | ||
|
||
@mock.patch('ckan.lib.mailer.send_invite') | ||
@nose.tools.raises(ckan.logic.ValidationError) | ||
def test_user_invite_requires_role(self, _): | ||
self._invite_user_to_group(role=None) | ||
|
||
@mock.patch('ckan.lib.mailer.send_invite') | ||
@nose.tools.raises(ckan.logic.ValidationError) | ||
def test_user_invite_requires_group_id(self, _): | ||
self._invite_user_to_group(group={'id': None}) | ||
|
||
def _invite_user_to_group(self, email='user@email.com', | ||
group=None, role='member'): | ||
user = factories.User() | ||
group = group or factories.Group(user=user) | ||
|
||
context = { | ||
'user': user['name'] | ||
} | ||
params = { | ||
'email': email, | ||
'group_id': group['id'], | ||
'role': role | ||
} | ||
|
||
result = helpers.call_action('user_invite', context, **params) | ||
|
||
return ckan.model.User.get(result['id']) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,35 @@ | ||
'''Unit tests for ckan/logic/auth/create.py. | ||
''' | ||
|
||
import mock | ||
import nose | ||
|
||
import ckan.new_tests.helpers as helpers | ||
import ckan.new_tests.factories as factories | ||
|
||
logic = helpers.logic | ||
|
||
|
||
class TestCreate(object): | ||
|
||
def setup(self): | ||
helpers.reset_db() | ||
|
||
@mock.patch('ckan.logic.auth.create.group_member_create') | ||
def test_user_invite_delegates_correctly_to_group_member_create(self, gmc): | ||
user = factories.User() | ||
context = { | ||
'user': user['name'], | ||
'model': None, | ||
'auth_user_obj': user | ||
} | ||
data_dict = {'group_id': 42} | ||
|
||
gmc.return_value = {'success': False} | ||
nose.tools.assert_raises(logic.NotAuthorized, helpers.call_auth, | ||
'user_invite', context=context, **data_dict) | ||
|
||
gmc.return_value = {'success': True} | ||
result = helpers.call_auth('user_invite', context=context, **data_dict) | ||
assert result is True |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters