Added /group/<id>/members/(<id>)? endpoints and updated tests somewhat.

This commit is contained in:
Robert Kolner committed 2013-07-20 22:27:44 +02:00
1 parent 2c50b83c7c
commit 3e2601f84e
3 files changed
+37 -36

No files matched your search

+29 -14
View File
@@ -1,20 +1,35 @@
from django.conf.urls import url
from tastypie.authorization import Authorization from tastypie.authorization import Authorization
from tastypie.resources import ModelResource, ALL 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): class GroupResource(ModelResource):
""" """
This class provides following endpoints: This class provides following endpoints:
(1) /api/v1/group/ (1) /api/v1/group/
(2) /api/v1/group/{id}/ (2) /api/v1/group/{id}/
""" """
class Meta: class Meta:
queryset = Group.objects.all() queryset = Group.objects.all()
resource_name = 'group' resource_name = 'group'
list_allowed_methods = [ 'get', 'post' ] list_allowed_methods = [ 'get', 'post' ]
detail_allowed_methods = [ 'get', 'post' ] detail_allowed_methods = [ 'get', 'post' ]
authorization = Authorization() # TODO: for dev (VERY INSECURE) authorization = Authorization() # TODO: for dev (VERY INSECURE)
filtering = { filtering = {
} }
def prepend_urls(self):
return [
url(r"^(?P<resource_name>%s)/(?P<group_id>\d+)/members/$" % (self._meta.resource_name), self.wrap_view("members"), name="api_members"),
url(r"^(?P<resource_name>%s)/(?P<group_id>\d+)/members/(?P<member_id>\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)
-1
View File
@@ -8,7 +8,6 @@ from tastypie.exceptions import ImmediateHttpResponse
from tastypie.http import HttpForbidden, HttpNoContent, HttpResponse from tastypie.http import HttpForbidden, HttpNoContent, HttpResponse
from tastypie.resources import ModelResource, ALL from tastypie.resources import ModelResource, ALL
from dusken.models import * from dusken.models import *
from dusken.api.membersbygroup import MembersByGroupResource
from dusken.api.groupsbymember import GroupsByMemberResource from dusken.api.groupsbymember import GroupsByMemberResource
+8 -21
View File
@@ -16,34 +16,21 @@ class MembersByGroupTest(ResourceTestCase):
self.group.save() self.group.save()
# URI to get all members by group relations (not functional, needs more things at the end) # URI to get all members by group relations (not functional, needs more things at the end)
self.url = '/api/v1/membersbygroup/' self.url = '/api/v1/group/{member_id}/member/'.format(member_id=self.group.id)
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)
def test_get_all_relations(self): 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") resp = self.api_client.get(url, format="json")
self.assertValidJSONResponse(resp) self.assertValidJSONResponse(resp)
data = self.deserialize(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): 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') resp = self.api_client.get(url, format='json')
self.assertValidJSONResponse(resp) self.assertValidJSONResponse(resp)