diff --git a/dusken/main/api/membership.py b/dusken/main/api/membership.py new file mode 100644 index 0000000..c1f948c --- /dev/null +++ b/dusken/main/api/membership.py @@ -0,0 +1,17 @@ +from tastypie.resources import ModelResource, ALL +from tastypie.authorization import Authorization +from main.models import * + + +class MembershipResource(ModelResource): + """ + This class provides following endpoints: + (1) /api/v1/membership/ + """ + class Meta: + queryset = Membership.objects.all() + resource_name = 'membership' + list_allowed_methods = [ 'get', 'post' ] + detail_allowed_methods = [ 'get', 'post' ] + authorization = Authorization() # TODO: for dev (VERY INSECURE) + diff --git a/dusken/main/tests/membership.py b/dusken/main/tests/membership.py new file mode 100644 index 0000000..63c43ee --- /dev/null +++ b/dusken/main/tests/membership.py @@ -0,0 +1,64 @@ +import logging + +from support.test import ResourceTestCase +from main.models import Membership + +class MembershipTest(ResourceTestCase): + fixtures = [ 'testdata.json' ] + + def assertValidMembershipData(self, membership): + self.assertEquals(type(membership), dict) + self.assertKeys(member, [ + u'id', + u'start_date', + u'mtype', + u'payment', + u'member', + u'created', + u'updated', + u'resource_uri' + ]) + self.assertNotEquals(None,member['id']) + self.assertNotEquals(None,member['start_type']) + self.assertNotEquals(None,member['mtype']) + self.assertNotEquals(None,member['member']) + self.assertNotEquals(None,member['created']) + self.assertNotEquals(None,member['updated']) + self.assertNotEquals(None,member['resource_uri']) + + def setUp(self): + super(MembershipTest, self).setUp() + + # URI to get the existing member. We'll probably + # need it at one point or another. + self.all_membership_url = '/api/v1/membership/' + + + 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_memberships(self): + """ + Tests that we can get a premade user correctly. + """ + resp = self.api_client.get(self.membership_url, format='json') + self.assertValidJSONResponse(resp) + + # Check if the returned data is correct: + member = self.deserialize(resp) + self.assertValidMembershipData(member) + + diff --git a/dusken/main/urls.py b/dusken/main/urls.py index 29234c0..b0c0475 100644 --- a/dusken/main/urls.py +++ b/dusken/main/urls.py @@ -1,10 +1,12 @@ from django.conf.urls.defaults import * from tastypie.api import Api from main.api.member import MemberResource +from main.api.membership import MembershipResource from main.api.group import GroupResource v1_api = Api(api_name='v1') v1_api.register(MemberResource()) +v1_api.register(MembershipResource()) v1_api.register(GroupResource()) urlpatterns = patterns('',