diff --git a/dusken/api/membersbygroup.py b/dusken/api/membersbygroup.py index e2867f1..74bac83 100644 --- a/dusken/api/membersbygroup.py +++ b/dusken/api/membersbygroup.py @@ -1,6 +1,8 @@ from tastypie import fields from tastypie.authorization import Authorization from tastypie.bundle import Bundle +from tastypie.exceptions import ImmediateHttpResponse +from tastypie.http import HttpNotFound from tastypie.resources import Resource from dusken.models import Member, Group @@ -24,7 +26,6 @@ class MembersByGroupResource(Resource): kwargs = { 'resource_name': self._meta.resource_name, } - if isinstance(bundle_or_obj, Bundle): kwargs['pk'] = bundle_or_obj.obj.group_id else: @@ -42,15 +43,31 @@ class MembersByGroupResource(Resource): pass # We can't return lists. def obj_get(self, request=None, **kwargs): - group_id = int(kwargs['pk']) + keys = kwargs['pk'].split("/") + group_id = int(keys[0]) group = Group.objects.get(id=group_id) + member = None + if len(keys) > 1: + member_id = int(keys[1]) + member = Member.objects.get(id=member_id) + + if member is None: + return None + + if member.groups.filter(name=group.name).count() == 0: + raise ImmediateHttpResponse(HttpNotFound()) + if group is None: return None obj = MembersByGroupObject() obj.group_id = group.id - for member in group.user_set.all(): + + if member is None: + for member in group.user_set.all(): + obj.members.append(member.id) + else: obj.members.append(member.id) return obj diff --git a/dusken/tests/membersbygroup.py b/dusken/tests/membersbygroup.py index 8c454c2..b189009 100644 --- a/dusken/tests/membersbygroup.py +++ b/dusken/tests/membersbygroup.py @@ -7,6 +7,14 @@ class MembersByGroupTest(ResourceTestCase): def setUp(self): super(MembersByGroupTest, self).setUp() + self.member = Member(username='robert', email='robert.kolner@gmail.com', phone_number=90567268) + self.member.save() + + self.group = Group(name="EDB", posix_name="edb") + self.group.save() + self.group.user_set.add(self.member) + self.group.save() + # URI to get all members by group relations (not functional, needs more things at the end) self.url = '/api/v1/membersbygroup/' @@ -27,10 +35,17 @@ class MembersByGroupTest(ResourceTestCase): self.assertHttpMethodNotAllowed(resp) def test_get_all_relations(self): - pass + url = self.url + str(self.group.pk) + "/" + resp = self.api_client.get(url, format="json") + self.assertValidJSONResponse(resp) + data = self.deserialize(resp) + self.assertEquals(len(data['members']), self.group.user_set.count()) + self.assertEquals(data['members'][0], self.member.pk) def test_get_a_relation(self): - pass + url = self.url + str(self.group.pk) +"/" +str(self.member.pk) +"/" + resp = self.api_client.get(url, format='json') + self.assertValidJSONResponse(resp) def test_create_relation(self): pass