From fea743c9289371ecbbb9c2d013d8f176ed8f4b27 Mon Sep 17 00:00:00 2001 From: Vitor Baptista Date: Thu, 12 Sep 2013 16:21:03 -0300 Subject: [PATCH 1/2] Fix bug in (group|organization)_member_create According to the documentation, the "username" parameter accepts either name or id, but the code only accepted name. I've fixed it to accept both. --- ckan/logic/action/create.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ckan/logic/action/create.py b/ckan/logic/action/create.py index fcb55ceae64..baac5a2154c 100644 --- a/ckan/logic/action/create.py +++ b/ckan/logic/action/create.py @@ -1141,7 +1141,7 @@ def _group_or_org_member_create(context, data_dict, is_org=False): role = data_dict.get('role') group_id = data_dict.get('id') group = model.Group.get(group_id) - result = session.query(model.User).filter_by(name=username).first() + result = model.User.get(username) if result: user_id = result.id else: From 21c21df965609e9dbfd1a20d1e01dc5d44807f34 Mon Sep 17 00:00:00 2001 From: Vitor Baptista Date: Tue, 24 Sep 2013 15:01:23 -0300 Subject: [PATCH 2/2] [#1243] Add tests to group_member_create. --- ckan/tests/logic/test_action.py | 49 +++++++++++++++++++++++++++++++++ 1 file changed, 49 insertions(+) diff --git a/ckan/tests/logic/test_action.py b/ckan/tests/logic/test_action.py index 89e030beac8..9d7bb3c1dbf 100644 --- a/ckan/tests/logic/test_action.py +++ b/ckan/tests/logic/test_action.py @@ -1722,3 +1722,52 @@ def test_2_view_group(self): res_json = json.loads(res.body) assert res_json['success'] is False + +class TestMember(WsgiAppCase): + + sysadmin = None + + group = None + + def setup(self): + username = 'sysadmin' + groupname = 'test group' + organization_name = 'test organization' + CreateTestData.create_user('sysadmin', **{ 'sysadmin': True }) + CreateTestData.create_groups([{ 'name': groupname }, + { 'name': organization_name, + 'type': 'organization'}]) + self.sysadmin = model.User.get(username) + self.group = model.Group.get(groupname) + + def teardown(self): + model.repo.rebuild_db() + + def test_group_member_create_works_user_id_and_group_id(self): + self._assert_we_can_add_user_to_group(self.sysadmin.id, self.group.id) + + def test_group_member_create_works_with_user_id_and_group_name(self): + self._assert_we_can_add_user_to_group(self.sysadmin.id, self.group.name) + + def test_group_member_create_works_with_user_name_and_group_name(self): + self._assert_we_can_add_user_to_group(self.sysadmin.name, self.group.name) + + def _assert_we_can_add_user_to_group(self, user_id, group_id): + user = model.User.get(user_id) + group = model.Group.get(group_id) + url = '/api/action/group_member_create' + role = 'member' + postparams = '%s=1' % json.dumps({ + 'id': group_id, + 'username': user_id, + 'role': role}) + + res = self.app.post(url, params=postparams, + extra_environ={'Authorization': str(user.apikey)}) + + res = json.loads(res.body) + groups = user.get_groups(group.type, role) + group_ids = [g.id for g in groups] + assert res['success'] is True, res + assert group.id in group_ids, (group, user_groups) +