From 39fe5cccea20b5498a810f2ff0e43d96b24f5aa1 Mon Sep 17 00:00:00 2001 From: "jonathan.christopher" Date: Wed, 29 Apr 2020 18:06:13 +0700 Subject: [PATCH 1/6] [RED] Add test for new account verification status --- apps/accounts/tests/test_units/test_accounts.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/apps/accounts/tests/test_units/test_accounts.py b/apps/accounts/tests/test_units/test_accounts.py index 9ac3107..4963c5e 100644 --- a/apps/accounts/tests/test_units/test_accounts.py +++ b/apps/accounts/tests/test_units/test_accounts.py @@ -112,6 +112,8 @@ class AccountViewTest(APITestCase): "phone_number": self.faker.phone_number(), "area": self.faker.city(), "is_admin": False, + "is_verified": True, + "is_active": True, } response = self.client.post(path=url, data=data, format="json",) @@ -120,8 +122,13 @@ class AccountViewTest(APITestCase): self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(officer_current_count, officer_prev_count + 1) + new_officer = Account.objects.filter(email=_account_id)[0] + self.assertTrue(new_officer.is_verified) + self.assertTrue(new_officer.is_active) + # Have account creation log for the new officer - new_officer_id = Account.objects.filter(email=_account_id)[0].id + new_officer_id = new_officer.id + response = self.client.get(self.LOGS_URL) response_string = response.rendered_content.decode("utf-8") -- GitLab From 175838348c5878c585e42ec2a0ca168ee2aba4da Mon Sep 17 00:00:00 2001 From: "jonathan.christopher" Date: Wed, 29 Apr 2020 18:06:56 +0700 Subject: [PATCH 2/6] [GREEN] Provide is_verified and is_active in register serializer --- apps/accounts/serializers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/apps/accounts/serializers.py b/apps/accounts/serializers.py index 5f35ab1..f755f82 100644 --- a/apps/accounts/serializers.py +++ b/apps/accounts/serializers.py @@ -46,6 +46,8 @@ class AccountRegisterSerializer(serializers.ModelSerializer): "phone_number", "area", "is_admin", + "is_verified", + "is_active", ] def validate_password(self, value): -- GitLab From 2089805ac4bb28f699903eb34954f9f278a4ea00 Mon Sep 17 00:00:00 2001 From: "jonathan.christopher" Date: Wed, 29 Apr 2020 20:48:09 +0700 Subject: [PATCH 3/6] [RED] Add handler for existing users --- apps/accounts/tests/test_units/test_accounts.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/apps/accounts/tests/test_units/test_accounts.py b/apps/accounts/tests/test_units/test_accounts.py index 4963c5e..cd9a88a 100644 --- a/apps/accounts/tests/test_units/test_accounts.py +++ b/apps/accounts/tests/test_units/test_accounts.py @@ -137,6 +137,22 @@ class AccountViewTest(APITestCase): f'"action_type":"{ACTIVITY_TYPE_CREATE}"', response_string ) + def test_create_existing_user_fails(self): + url = self.BASE_URL + data = { + "name": self.faker.name(), + "username": "user_1", + "password": "justpass", + "email": self.faker.email(), + "phone_number": self.faker.phone_number(), + "area": self.faker.city(), + "is_admin": False, + "is_verified": True, + "is_active": True, + } + response = self.client.post(path=url, data=data, format="json",) + self.assertEqual(response.status_code, status.HTTP_409_CONFLICT) + def test_create_new_account_fails_with_poor_password(self): url = self.BASE_URL _account_id = self.faker.email() -- GitLab From 5266437ef223fe394349cd78c8c35f6f4754b44e Mon Sep 17 00:00:00 2001 From: "jonathan.christopher" Date: Wed, 29 Apr 2020 20:51:53 +0700 Subject: [PATCH 4/6] [GREEN] Implement handler for existing user on account creation --- apps/accounts/views.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/apps/accounts/views.py b/apps/accounts/views.py index 743e1be..7b6c0d7 100644 --- a/apps/accounts/views.py +++ b/apps/accounts/views.py @@ -51,13 +51,27 @@ class AccountViewSet(viewsets.ModelViewSet): return AccountRegisterSerializer return AccountSerializer - def perform_create(self, serializer): + def create(self, request): + serializer_class = self.get_serializer_class() + serializer = serializer_class(data=request.data) + serializer.is_valid(raise_exception=True) + username = serializer.validated_data.pop("username").lower() password = serializer.validated_data.pop("password") + if User.objects.filter(username=username).exists(): + return Response( + {"username" : "User with that username already exists"}, + status=status.HTTP_409_CONFLICT + ) + user = User.objects.create_user(username=username, password=password) Account.objects.create(user=user, **serializer.validated_data) + return Response( + serializer.data, status=status.HTTP_201_CREATED, + ) + def perform_destroy(self, instance): instance.delete(author=self.request.user.account) -- GitLab From e04cba42e334ddd06d950d60880c49d53de05c8d Mon Sep 17 00:00:00 2001 From: "jonathan.christopher" Date: Wed, 29 Apr 2020 21:12:47 +0700 Subject: [PATCH 5/6] [REFACTOR] Use array as duplicate account response --- apps/accounts/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/accounts/views.py b/apps/accounts/views.py index 7b6c0d7..e3db0be 100644 --- a/apps/accounts/views.py +++ b/apps/accounts/views.py @@ -61,7 +61,7 @@ class AccountViewSet(viewsets.ModelViewSet): if User.objects.filter(username=username).exists(): return Response( - {"username" : "User with that username already exists"}, + {"username" : ["User with that username already exists"]}, status=status.HTTP_409_CONFLICT ) -- GitLab From 75671e21f41c2444f426ee2b643f0ec10b20e220 Mon Sep 17 00:00:00 2001 From: "jonathan.christopher" Date: Wed, 29 Apr 2020 21:36:01 +0700 Subject: [PATCH 6/6] [REFACTOR] Fix copywriting --- apps/accounts/views.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/accounts/views.py b/apps/accounts/views.py index e3db0be..7971590 100644 --- a/apps/accounts/views.py +++ b/apps/accounts/views.py @@ -61,7 +61,7 @@ class AccountViewSet(viewsets.ModelViewSet): if User.objects.filter(username=username).exists(): return Response( - {"username" : ["User with that username already exists"]}, + {"username" : ["User with that username already exists."]}, status=status.HTTP_409_CONFLICT ) -- GitLab