From 4f40389e470854858befb915128b39ea25056572 Mon Sep 17 00:00:00 2001 From: Mark Polak Date: Wed, 18 Sep 2013 19:28:36 +0200 Subject: [PATCH 1/3] Implements first membership tests --- dusken/fixtures/membership.json | 37 +++++++++++++- dusken/tests/membership.py | 90 ++++++++++++++++++++++++++++----- 2 files changed, 113 insertions(+), 14 deletions(-) diff --git a/dusken/fixtures/membership.json b/dusken/fixtures/membership.json index cc0e439..d74d562 100644 --- a/dusken/fixtures/membership.json +++ b/dusken/fixtures/membership.json @@ -1 +1,36 @@ -[{"pk": 1, "model": "dusken.membership", "fields": {"member": 2, "updated": "2013-09-11T18:45:13.341Z", "created": "2013-09-11T18:45:13.341Z", "payment": null, "mtype": 1, "start_date": "2013-09-11"}}, {"pk": 2, "model": "dusken.membership", "fields": {"member": 2, "updated": "2013-09-11T18:45:30.084Z", "created": "2013-09-11T18:45:30.084Z", "payment": null, "mtype": 1, "start_date": "2013-09-15"}}, {"pk": 3, "model": "dusken.membership", "fields": {"member": 2, "updated": "2013-09-11T18:45:53.522Z", "created": "2013-09-11T18:45:53.522Z", "payment": null, "mtype": 2, "start_date": "2013-09-11"}}] \ No newline at end of file +[ + { + "pk": 1, + "model": "dusken.membership", + "fields": { + "member": 2, + "updated": "2013-09-11T18:45:13.341Z", + "created": "2013-09-11T18:45:13.341Z", + "payment": null, + "mtype": 1, + "start_date": "2013-09-11" + } + }, { + "pk": 2, + "model": "dusken.membership", + "fields": { + "member": 2, + "updated": "2013-09-11T18:45:30.084Z", + "created": "2013-09-11T18:45:30.084Z", + "payment": null, + "mtype": 1, + "start_date": "2013-09-15" + } + }, { + "pk": 3, + "model": "dusken.membership", + "fields": { + "member": 2, + "updated": "2013-09-11T18:45:53.522Z", + "created": "2013-09-11T18:45:53.522Z", + "payment": null, + "mtype": 2, + "start_date": "2013-09-11" + } + } +] \ No newline at end of file diff --git a/dusken/tests/membership.py b/dusken/tests/membership.py index 733c536..2e5a36d 100644 --- a/dusken/tests/membership.py +++ b/dusken/tests/membership.py @@ -5,11 +5,10 @@ from support.test import ResourceTestCase from tastypie.models import ApiKey from utils.tests import load_test_fixtures_for_membership -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" class MembershipTest(ResourceTestCase): membership_url = '/api/v1/membership/' - membership_url_single = '/api/v1/membership/{}/'.format(1) + membership_url_single = '/api/v1/membership/{}/' def setUp(self): load_test_fixtures_for_membership() @@ -20,20 +19,85 @@ class MembershipTest(ResourceTestCase): super(MembershipTest, self).setUp() - def test_get_memberships(self): - resp = self.api_client.get( - self.membership_url, + #################################################################### + ### Helper Functions + def member_url(self, member_id): + return self.membership_url_single.format(member_id) + + def do_request(self, url): + return self.api_client.get( + url, format='json', authentication=self.creds ) - self.assertValidJSONResponse(resp) - - def test_get_single_membership(self): - resp = self.api_client.get( - self.membership_url_single, - format='json', - authentication=self.creds - ) + #################################################################### + ### Tests + def test_get_memberships(self): + resp = self.do_request(self.membership_url) self.assertValidJSONResponse(resp) + self.assertEqual(self.expected_memberships(), self.deserialize(resp)['objects']) + + def test_get_membership(self): + resp = self.do_request(self.member_url(1)) + + self.assertValidJSONResponse(resp) + self.assertEqual(self.expected_membership(), self.deserialize(resp)) + + def test_get_membership_with_payment(self): + resp = self.do_request(self.member_url(4)) + + #################################################################### + ### JSON Responses + def expected_memberships(self): + return [{ + u'created': u'2013-09-11T20:45:13.341000', + u'expires': u'2014-07-31T00:00:00', + u'id': 1, + u'member': 2, + u'membership_type': 1, + u'payment': None, + u'resource_uri': u'/api/v1/membership/1/', + u'start_date': u'2013-09-11', + u'updated': u'2013-09-11T20:45:13.341000' + }, + { + u'membership_type': 1, + u'updated': u'2013-09-11T20:45:30.084000', + u'created': u'2013-09-11T20:45:30.084000', + u'expires': u'2014-07-31T00:00:00', + u'id': 2, u'member': 2, + u'start_date': u'2013-09-15', + u'payment': None, + u'resource_uri': u'/api/v1/membership/2/' + }, + { + u'membership_type': 2, + u'updated': u'2013-09-11T20:45:53.522000', + u'created': u'2013-09-11T20:45:53.522000', + u'expires': u'2014-03-18T00:00:00', + u'id': 3, + u'member': 2, + u'start_date': u'2013-09-11', + u'payment': None, + u'resource_uri': u'/api/v1/membership/3/' + }] + + def expected_membership(self): + return { + u'created': u'2013-09-11T20:45:13.341000', + u'expires': u'2014-07-31T00:00:00', + u'id': 1, + u'member': 2, + u'membership_type': 1, + u'payment': None, + u'resource_uri': u'/api/v1/membership/1/', + u'start_date': u'2013-09-11', + u'updated': u'2013-09-11T20:45:13.341000' + } + + def expected_membership_with_payment(self): + return { + + } From 24446f10f0d59ddb463212728cfa9eadd0f285ff Mon Sep 17 00:00:00 2001 From: Mark Polak Date: Wed, 18 Sep 2013 19:58:34 +0200 Subject: [PATCH 2/3] Adds test and changes and adds post helper --- dusken/tests/membership.py | 43 +++++++++++++++++++++++++++++++++----- 1 file changed, 38 insertions(+), 5 deletions(-) diff --git a/dusken/tests/membership.py b/dusken/tests/membership.py index 2e5a36d..2cea7fe 100644 --- a/dusken/tests/membership.py +++ b/dusken/tests/membership.py @@ -24,29 +24,62 @@ class MembershipTest(ResourceTestCase): def member_url(self, member_id): return self.membership_url_single.format(member_id) - def do_request(self, url): + def do_get_request(self, url): return self.api_client.get( url, format='json', authentication=self.creds ) + def do_post_request(self, url, data): + return self.api_client.post( + url, + format='json', + data=data, + authentication=self.creds + ) + #################################################################### ### Tests def test_get_memberships(self): - resp = self.do_request(self.membership_url) + resp = self.do_get_request(self.membership_url) self.assertValidJSONResponse(resp) self.assertEqual(self.expected_memberships(), self.deserialize(resp)['objects']) def test_get_membership(self): - resp = self.do_request(self.member_url(1)) + resp = self.do_get_request(self.member_url(1)) self.assertValidJSONResponse(resp) self.assertEqual(self.expected_membership(), self.deserialize(resp)) def test_get_membership_with_payment(self): - resp = self.do_request(self.member_url(4)) + resp = self.do_get_request(self.member_url(4)) + + def test_post_membership(self): + data = { + u'member': 2, + u'membership_type': 1, + u'start_date': u'2013-09-11', + } + + resp = self.do_post_request(self.membership_url, data) + + self.assertValidJSONResponse(resp) + + def test_patch_membership(self): + data = { + u'member': 2, + u'membership_type': 1, + u'start_date': u'2013-09-11', + } + + resp = self.api_client.patch(self.member_url(1), + format='json', + data=data, + authentication=self.creds) + + self.assertValidJSONResponse(resp) #################################################################### ### JSON Responses @@ -99,5 +132,5 @@ class MembershipTest(ResourceTestCase): def expected_membership_with_payment(self): return { - + # TODO add membership with payment } From 439131f95c1fbfc4e3bfb833faed57a98e19c8c1 Mon Sep 17 00:00:00 2001 From: Mark Polak Date: Wed, 18 Sep 2013 20:22:39 +0200 Subject: [PATCH 3/3] Refactors group tests --- dusken/tests/group.py | 34 +++++----------------------------- utils/tests.py | 25 +++++++++++++++++++++---- 2 files changed, 26 insertions(+), 33 deletions(-) diff --git a/dusken/tests/group.py b/dusken/tests/group.py index 8a3f517..65f36a4 100644 --- a/dusken/tests/group.py +++ b/dusken/tests/group.py @@ -1,46 +1,22 @@ import logging +import utils.tests -from support.test import ResourceTestCase from dusken.models import Group +from support.test import ResourceTestCase class GroupTest(ResourceTestCase): - def assertValidMemberData(self, member): - self.assertEquals(type(member), dict) - self.assertKeys(member, [ - u'id', - u'name', - u'posix_name', - u'created', - u'updated', - u'resource_uri' - ]) - self.assertNotEquals(None,member['id']) - self.assertNotEquals(None,member['name']) - self.assertNotEquals(None,member['posix_name']) - self.assertNotEquals(None,member['created']) - self.assertNotEquals(None,member['updated']) - self.assertNotEquals(None,member['resource_uri']) - def setUp(self): super(GroupTest, self).setUp() # URI to get all groups self.groups_url = '/api/v1/group/' - def test_request_types(self): - """ - Tests that the endpoint responds to correct types of requests. - """ - resp = self.api_client.get(self.groups_url, format='json') - self.assertNotEquals(resp.status_code, 405) - - resp = self.api_client.post(self.groups_url) - self.assertNotEquals(resp.status_code, 405) - + def test_put_not_allowed(self): resp = self.api_client.put(self.groups_url) self.assertHttpMethodNotAllowed(resp) + def test_delete_not_allowed(self): resp = self.api_client.delete(self.groups_url) self.assertHttpMethodNotAllowed(resp) - + \ No newline at end of file diff --git a/utils/tests.py b/utils/tests.py index 3382fa2..85a5cb2 100644 --- a/utils/tests.py +++ b/utils/tests.py @@ -4,7 +4,25 @@ import django from dusken.models import Member from tastypie.models import create_api_key -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" +#################################################################### +### Request helper functions +def do_get_request(self, url, creds): + return self.api_client.get( + url, + format='json', + authentication=creds + ) + +def do_post_request(self, url, data, creds): + return self.api_client.post( + url, + format='json', + data=data, + authentication=creds + ) + +#################################################################### +### Fixture helper functions def test_fixtures(): ''' Returns a list with the locations of all defined fixtures. ''' return [os.path.join('dusken', 'fixtures', 'country.json'), @@ -12,7 +30,6 @@ def test_fixtures(): os.path.join('dusken', 'fixtures', 'institution.json'), ] -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" def load_test_fixtures(): ''' Explicitly load all defined fixtures. This can be useful when you only want to load the fixtures for some testcases, but not @@ -20,7 +37,6 @@ def load_test_fixtures(): for f in test_fixtures(): call_command('loaddata', f, verbosity=0) -"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" def test_fixtures_member(): ''' Returns a list with the locations of all defined fixtures. ''' return [os.path.join('dusken', 'fixtures', 'address.json'), @@ -36,7 +52,8 @@ def test_fixtures_membership(): os.path.join('dusken', 'fixtures', 'membershiptype.json'), os.path.join('dusken', 'fixtures', 'membership.json'), ] + def load_test_fixtures_for_membership(): django.db.models.signals.post_save.disconnect(create_api_key, sender=Member) for f in test_fixtures_membership(): - call_command('loaddata', f, verbosity=0) \ No newline at end of file + call_command('loaddata', f, verbosity=0)