From 3e2601f84ea0952692ecc0448df5a42d755c84d2 Mon Sep 17 00:00:00 2001 From: Robert Kolner Date: Sat, 20 Jul 2013 22:27:44 +0200 Subject: [PATCH] Added /group//members/()? endpoints and updated tests somewhat. --- dusken/api/group.py | 43 +++++++++++++++++++++++----------- dusken/api/member.py | 1 - dusken/tests/membersbygroup.py | 29 +++++++---------------- 3 files changed, 37 insertions(+), 36 deletions(-) diff --git a/dusken/api/group.py b/dusken/api/group.py index 83572ad..d5c7ae2 100644 --- a/dusken/api/group.py +++ b/dusken/api/group.py @@ -1,20 +1,35 @@ +from django.conf.urls import url from tastypie.authorization import Authorization from tastypie.resources import ModelResource, ALL -from dusken.models import Group +from dusken.models import Group +from dusken.api.membersbygroup import MembersByGroupResource class GroupResource(ModelResource): - """ - This class provides following endpoints: - (1) /api/v1/group/ - (2) /api/v1/group/{id}/ - """ - class Meta: - queryset = Group.objects.all() - resource_name = 'group' - list_allowed_methods = [ 'get', 'post' ] - detail_allowed_methods = [ 'get', 'post' ] - authorization = Authorization() # TODO: for dev (VERY INSECURE) - filtering = { - } + """ + This class provides following endpoints: + (1) /api/v1/group/ + (2) /api/v1/group/{id}/ + """ + class Meta: + queryset = Group.objects.all() + resource_name = 'group' + list_allowed_methods = [ 'get', 'post' ] + detail_allowed_methods = [ 'get', 'post' ] + authorization = Authorization() # TODO: for dev (VERY INSECURE) + filtering = { + } + def prepend_urls(self): + return [ + url(r"^(?P%s)/(?P\d+)/members/$" % (self._meta.resource_name), self.wrap_view("members"), name="api_members"), + url(r"^(?P%s)/(?P\d+)/members/(?P\d+)/$" % (self._meta.resource_name), self.wrap_view("detail_members"), name="api_detail_members"), + ] + + def members(self, request, **kwargs): + resource = MembersByGroupResource() + return resource.dispatch_list(request, **kwargs) + + def detail_members(self, request, **kwargs): + resource = MembersByGroupResource() + return resource.dispatch_detail(request, **kwargs) diff --git a/dusken/api/member.py b/dusken/api/member.py index 7aa7205..ceb2022 100644 --- a/dusken/api/member.py +++ b/dusken/api/member.py @@ -8,7 +8,6 @@ from tastypie.exceptions import ImmediateHttpResponse from tastypie.http import HttpForbidden, HttpNoContent, HttpResponse from tastypie.resources import ModelResource, ALL from dusken.models import * -from dusken.api.membersbygroup import MembersByGroupResource from dusken.api.groupsbymember import GroupsByMemberResource diff --git a/dusken/tests/membersbygroup.py b/dusken/tests/membersbygroup.py index 90bbed7..bd0a7eb 100644 --- a/dusken/tests/membersbygroup.py +++ b/dusken/tests/membersbygroup.py @@ -16,34 +16,21 @@ class MembersByGroupTest(ResourceTestCase): self.group.save() # URI to get all members by group relations (not functional, needs more things at the end) - self.url = '/api/v1/membersbygroup/' - - def test_request_types(self): - """ - Tests that the endpoint responds to correct types of requests. - """ - resp = self.api_client.get(self.url, format='json') - self.assertHttpMethodNotAllowed(resp) - - resp = self.api_client.post(self.url) - self.assertHttpMethodNotAllowed(resp) - - resp = self.api_client.put(self.url) - self.assertHttpMethodNotAllowed(resp) - - resp = self.api_client.delete(self.url) - self.assertHttpMethodNotAllowed(resp) + self.url = '/api/v1/group/{member_id}/member/'.format(member_id=self.group.id) def test_get_all_relations(self): - url = self.url + str(self.group.pk) + "/" + url = self.url + str(self.member.id) + "/" 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) + + groupmembers = data['objects'] + + self.assertEquals(len(groupmembers), self.group.user_set.count()) + self.assertEquals(int(groupmembers[0]['member_id']), self.member.pk) def test_get_a_relation(self): - url = self.url + str(self.group.pk) +"/" +str(self.member.pk) +"/" + url = self.url + str(self.group.pk) +"/" resp = self.api_client.get(url, format='json') self.assertValidJSONResponse(resp)