Skip to content

Commit

Permalink
[2211] Logic layer functions for member and associated tests
Browse files Browse the repository at this point in the history
  • Loading branch information
rossjones committed Mar 9, 2012
1 parent d4f46a1 commit c3f5768
Show file tree
Hide file tree
Showing 4 changed files with 83 additions and 8 deletions.
6 changes: 5 additions & 1 deletion ckan/logic/action/create.py
Expand Up @@ -180,11 +180,14 @@ def member_create(context, data_dict=None):
obj_type = data_dict['object_type']
capacity = data_dict['capacity']

if 'group' not in context:
context['group'] = group_id

# User must be able to update the group to add a member to it
check_access('group_update', context, data_dict)

# Look up existing, in case it exists
member = model.Session.Query(model.Member).\
member = model.Session.query(model.Member).\
filter(model.Member.table_name == obj_type).\
filter(model.Member.table_id == obj_id).\
filter(model.Member.group_id == group_id).\
Expand All @@ -197,6 +200,7 @@ def member_create(context, data_dict=None):
table_id = obj_id,
group_id = group_id,
capacity=capacity)

model.Session.add(member)
model.repo.commit()

Expand Down
7 changes: 4 additions & 3 deletions ckan/logic/action/delete.py
Expand Up @@ -87,20 +87,21 @@ def member_delete(context, data_dict=None):
obj_id = data_dict['object']
obj_type = data_dict['object_type']

if 'group' not in context:
context['group'] = group_id

# User must be able to update the group to remove a member from it
check_access('group_update', context, data_dict)

member = model.Session.Query(model.Member).\
member = model.Session.query(model.Member).\
filter(model.Member.table_name == obj_type).\
filter(model.Member.table_id == obj_id).\
filter(model.Member.group_id == group_id).\
filter(model.Member.state == "active").first()

if member:
member.delete()
model.repo.commit()


def group_delete(context, data_dict):

model = context['model']
Expand Down
10 changes: 6 additions & 4 deletions ckan/logic/action/get.py
Expand Up @@ -118,14 +118,16 @@ def member_list(context, data_dict=None):
model = context['model']
user = context['user']

# User must be able to update the group to remove a member from it
check_access('group_show', context, data_dict)

group_id = data_dict['group']
obj_type = data_dict.get('object_type', None)
capacity = data_dict.get('capacity', None)

q = model.Session.Query(model.Member).\
# User must be able to update the group to remove a member from it
if 'group' not in context:
context['group'] = group_id
check_access('group_show', context, data_dict)

q = model.Session.query(model.Member).\
filter(model.Member.group_id == group_id).\
filter(model.Member.state == "active")

Expand Down
68 changes: 68 additions & 0 deletions ckan/tests/logic/test_member.py
@@ -0,0 +1,68 @@
from ckan import model
from ckan.logic import get_action
from ckan.lib.create_test_data import CreateTestData

class TestMemberLogic(object):

@classmethod
def setup_class(cls):
cls.username = 'testsysadmin'
cls.groupname = 'david'

model.Session.remove()
CreateTestData.create()
model.Session.remove()
model.repo.new_revision()

@classmethod
def teardown_class(cls):
model.repo.rebuild_db()

def _build_context( self, obj, obj_type, capacity='member'):
ctx = { 'model': model,
'session': model.Session,
'user':self.username}
dd = {
'group': self.groupname,
'object': obj,
'object_type': obj_type,
'capacity': capacity }
return ctx, dd

def _add_member( self, obj, obj_type, capacity):
ctx, dd = self._build_context(obj,obj_type,capacity)
return get_action('member_create')(ctx,dd)

def test_member_add(self):
res = self._add_member( 'warandpeace', 'package', 'member')
assert 'capacity' in res and res['capacity'] == u'member'
assert 'group_id' in res and res['group_id'] == u'david'

def test_member_list(self):
_ = self._add_member( 'warandpeace', 'package', 'member')
_ = self._add_member( 'annakarenina', 'package', 'member')
ctx, dd = self._build_context('','package')
res = get_action('member_list')(ctx,dd)
assert res[0][0] == 'warandpeace', res
assert res[1][0] == 'annakarenina', res

ctx, dd = self._build_context('','user', 'admin')
res = get_action('member_list')(ctx,dd)
assert len(res) == 0, res

_ = self._add_member( self.username, 'user', 'admin')
ctx, dd = self._build_context('','user', 'admin')
res = get_action('member_list')(ctx,dd)
assert len(res) == 1, res


def test_member_delete(self):
_ = self._add_member( self.username, 'user', 'admin')
ctx, dd = self._build_context(self.username,'user', 'admin')
res = get_action('member_list')(ctx,dd)
assert len(res) == 1, res

get_action('member_delete')(ctx,dd)

res = get_action('member_list')(ctx,dd)
assert len(res) == 0, res

0 comments on commit c3f5768

Please sign in to comment.