From 520e8f887206ebe18671b942b6f35fa228a520c9 Mon Sep 17 00:00:00 2001 From: Robert Kolner Date: Fri, 1 Feb 2013 13:43:38 +0100 Subject: [PATCH] Moved api to an own module. Improved member-tests. --- dusken/main/api.py | 10 ------- dusken/main/api/__init__.py | 0 dusken/main/api/member.py | 21 ++++++++++++++ dusken/main/tests/MemberTest.py | 49 +++++++++++++++++++++++++++++---- dusken/main/urls.py | 2 +- 5 files changed, 65 insertions(+), 17 deletions(-) delete mode 100644 dusken/main/api.py create mode 100644 dusken/main/api/__init__.py create mode 100644 dusken/main/api/member.py diff --git a/dusken/main/api.py b/dusken/main/api.py deleted file mode 100644 index 5f08329..0000000 --- a/dusken/main/api.py +++ /dev/null @@ -1,10 +0,0 @@ -from tastypie.resources import ModelResource -from tastypie.authorization import Authorization -from main.models import * - - -class MemberResource(ModelResource): - class Meta: - queryset = Member.objects.all() - resource_name = 'member' - authorization= Authorization() # for dev (VERY INSECURE) diff --git a/dusken/main/api/__init__.py b/dusken/main/api/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/dusken/main/api/member.py b/dusken/main/api/member.py new file mode 100644 index 0000000..eb479dc --- /dev/null +++ b/dusken/main/api/member.py @@ -0,0 +1,21 @@ +from tastypie.resources import ModelResource, ALL +from tastypie.authorization import Authorization +from main.models import * + + +class MemberResource(ModelResource): + """ + This class provides following endpoints: + (1) /api/v1/member/ + (2) /api/v1/member/{id}/ + """ + class Meta: + queryset = Member.objects.all() + resource_name = 'member' + list_allowed_methods = [ 'get', 'post' ] + detail_allowed_methods = [ 'get', 'post' ] + authorization = Authorization() # TODO: for dev (VERY INSECURE) + filtering = { + 'username' : ALL + } + diff --git a/dusken/main/tests/MemberTest.py b/dusken/main/tests/MemberTest.py index 42c390e..8709c46 100644 --- a/dusken/main/tests/MemberTest.py +++ b/dusken/main/tests/MemberTest.py @@ -6,6 +6,10 @@ from main.models import Member class MemberTest(ResourceTestCase): fixtures = [ 'members.json' ] + def assertValidMemberData(self, member): + self.assertEquals(type(member), dict) + self.assertKeys(member, [ u'member_id', u'email', u'username', u'phonenumber', u'givenname', u'dateofbirth', u'surname', u'resource_uri' ]) + def setUp(self): super(MemberTest, self).setUp() @@ -18,6 +22,23 @@ class MemberTest(ResourceTestCase): self.all_members_url = '/api/v1/member/' self.member_url = self.all_members_url + '{}/'.format(self.member.pk) + def test_check_request_types(self): + """ + Tests that the endpoint responds to correct types of requests. + """ + resp = self.api_client.get(self.all_members_url, format='json') + self.assertNotEquals(resp.status_code, 405) + + resp = self.api_client.post(self.all_members_url) + self.assertNotEquals(resp.status_code, 405) + + resp = self.api_client.put(self.all_members_url) + self.assertHttpMethodNotAllowed(resp) + + resp = self.api_client.delete(self.all_members_url) + self.assertHttpMethodNotAllowed(resp) + + def test_get_member(self): """ Tests that we can get a premade user correctly. @@ -27,14 +48,11 @@ class MemberTest(ResourceTestCase): # Check if the returned data is correct: member = self.deserialize(resp) - - self.assertKeys(member, [ u'member_id', u'email', u'username', u'phonenumber', u'givenname', u'dateofbirth', u'surname', u'resource_uri' ]) - self.assertEqual(member['username'], 'robertko') - self.assertEqual(member['email'], 'robert.kolner@studentersamfundet.no') + self.assertValidMemberData(member) def test_get_all_members(self): """ - Tests that we can get multiple users from the api. + Tests that we can get all users from the api. """ resp = self.api_client.get(self.all_members_url, format='json') self.assertValidJSONResponse(resp) @@ -43,5 +61,24 @@ class MemberTest(ResourceTestCase): all_members = self.deserialize(resp)['objects'] self.assertEqual(len(all_members), 2) - # TODO: Check for correctness of data. + for index in range(len(all_members)): + self.assertValidMemberData(all_members[index]) + + def test_get_filtered_members(self): + """ + Tests that we can get a filtered list from the api. + """ + data = { + "username" : "robertko" + } + + resp = self.api_client.get(self.all_members_url, format='json', data=data) + self.assertValidJSONResponse(resp) + + # Check if the returned data is correct: + all_members = self.deserialize(resp)['objects'] + self.assertEqual(len(all_members), 1) + + member = all_members[0] + self.assertValidMemberData(member) diff --git a/dusken/main/urls.py b/dusken/main/urls.py index c3d5d0f..07bcb79 100644 --- a/dusken/main/urls.py +++ b/dusken/main/urls.py @@ -1,6 +1,6 @@ from django.conf.urls.defaults import * from tastypie.api import Api -from main.api import MemberResource +from main.api.member import MemberResource v1_api = Api(api_name='v1') v1_api.register(MemberResource())