From 2c2585fe5b824ec257f86b23ac8b20c7ee9b57d1 Mon Sep 17 00:00:00 2001 From: Robert Kolner Date: Wed, 28 Aug 2013 20:04:41 +0200 Subject: [PATCH] Added check for registering of existing members. --- dusken/api/member.py | 16 +++++++++++++--- dusken/tests/member.py | 16 ++++++++++++++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/dusken/api/member.py b/dusken/api/member.py index 508e497..8d0a1a6 100644 --- a/dusken/api/member.py +++ b/dusken/api/member.py @@ -72,9 +72,19 @@ class MemberResource(ModelResource): """ Catches POST and PATCH requests and intercepts data. """ - # Check if the user exists and return an error when attempting to change the username - if bundle.obj.user_ptr_id is not None and not bundle.data['username'] == bundle.obj.username: - raise ImmediateHttpResponse(HttpForbidden("You can't change your username.")) + update_existing_user = bundle.obj.user_ptr_id is not None + + if update_existing_user: + # If the user already exists, return an error when attempting to change the username. + if bundle.data['username'] != bundle.obj.username: + raise ImmediateHttpResponse(HttpForbidden("You can't change your username.")) + else: + # If creating new user, check if it already exists: + member_count = len(Member.objects.filter(username=bundle.data['username'])) \ + + len(Member.objects.filter(email=bundle.data['email'])) \ + + len(Member.objects.filter(phone_number=bundle.data['phone_number'])) + if member_count > 0: + raise ImmediateHttpResponse(HttpForbidden("User with given data already exists")) return bundle def obj_update(self, bundle, request, **kwargs): diff --git a/dusken/tests/member.py b/dusken/tests/member.py index 3470005..6988e07 100644 --- a/dusken/tests/member.py +++ b/dusken/tests/member.py @@ -119,6 +119,22 @@ class MemberTest(MemberTestBase): self.assertEquals(user.phone_number, data['phone_number']) + def test_post_existing_member(self): + """ + Tests that we can't create users with duplicate username + """ + data = { + 'username' : self.member.username, + 'password' : 'asdf', + 'email' : self.member.email, + 'phone_number' : self.member.phone_number + } + + resp = self.api_client.post(self.all_members_url, + format = 'json', + data = data) + self.assertHttpForbidden(resp) + def test_patch_change_member(self): """ Tests that we can correctly change data of existing members.