diff --git a/apps/accounts/models.py b/apps/accounts/models.py index 00e8f2d8444783c9a1c7005fec71484a10ff7e5d..aef52969a9ce45c33c6da0431fa730fee3bf6a59 100644 --- a/apps/accounts/models.py +++ b/apps/accounts/models.py @@ -1,6 +1,7 @@ import uuid from django.contrib.auth.models import User from django.db import models +from django.core.validators import RegexValidator from apps.commons.managers import SoftDeleteManager from apps.commons.models import HistoryEnabledModel, HistoryModel @@ -32,7 +33,15 @@ class Account(HistoryEnabledModel): user = models.OneToOneField(User, on_delete=models.CASCADE) name = models.CharField(max_length=128) email = models.EmailField(max_length=128) - phone_number = models.CharField(max_length=64) + phone_number = models.CharField( + max_length=64, + validators=[ + RegexValidator( + regex=r'^\+?\d{9,15}$', + message=('Phone number has 9-15 digits, allowed to have + prefix'), + ), + ] + ) area = models.CharField(max_length=128) is_admin = models.BooleanField(default=False) is_verified = models.BooleanField(default=False) diff --git a/apps/accounts/tests/factories/accounts.py b/apps/accounts/tests/factories/accounts.py index b5db3642db09074c62b079e15791b7a85da1e1d6..99979307c1888d48b7c8e46e4eaa9ef167b22cb9 100644 --- a/apps/accounts/tests/factories/accounts.py +++ b/apps/accounts/tests/factories/accounts.py @@ -25,7 +25,7 @@ class AccountFactory(factory.DjangoModelFactory): user = factory.SubFactory(UserFactory) name = faker.name() email = faker.email() - phone_number = faker.phone_number() + phone_number = "+999999999999" area = faker.city() is_active = True is_verified = True diff --git a/apps/accounts/tests/test_units/test_accounts.py b/apps/accounts/tests/test_units/test_accounts.py index 87afaaa4eefa9eead5044e95e4e944acc44df3ff..d0784e11891b7d1f4b78747feab1e7be36c51926 100644 --- a/apps/accounts/tests/test_units/test_accounts.py +++ b/apps/accounts/tests/test_units/test_accounts.py @@ -88,7 +88,7 @@ class AccountViewTest(APITestCase): "username": _account_id, "password": "justpass", "email": _account_id, - "phone_number": self.faker.phone_number(), + "phone_number": "+999999999999", "area": self.faker.city(), "is_admin": True, } @@ -110,7 +110,7 @@ class AccountViewTest(APITestCase): "username": _account_id, "password": "justpass", "email": _account_id, - "phone_number": self.faker.phone_number(), + "phone_number": "+999999999999", "area": self.faker.city(), "is_admin": False, "is_verified": True, @@ -145,7 +145,7 @@ class AccountViewTest(APITestCase): "username": "user_1", "password": "justpass", "email": self.faker.email(), - "phone_number": self.faker.phone_number(), + "phone_number": "+999999999999", "area": self.faker.city(), "is_admin": False, "is_verified": True, @@ -163,21 +163,21 @@ class AccountViewTest(APITestCase): "email": _account_id, "username": _account_id, "password": "12345678", - "phone_number": self.faker.phone_number(), + "phone_number": "+999999999999", "area": self.faker.city(), "is_admin": False, } response = self.client.post(path=url, data=data, format="json",) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) - def test_edit_account_success_by(self): + def test_edit_account_success(self): url = self.BASE_URL + str(self.officer.id) + "/" data = { "id": str(self.officer.id), "name": self.faker.name(), "email": self.faker.email(), - "phone_number": self.faker.phone_number(), + "phone_number": "+999999999999", "area": self.faker.city(), "is_admin": False, "is_verified": True, @@ -213,13 +213,43 @@ class AccountViewTest(APITestCase): data = { "id": str(self.officer.id), - "phone_number": self.faker.phone_number(), + "phone_number": "+999999999999", "area": self.faker.city(), } response = self.client.put(path=url, data=data, format="json",) self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + def test_edit_account_fail_with_wrong_email_or_phone_format(self): + url = self.BASE_URL + str(self.officer.id) + "/" + + data = { + "id": str(self.officer.id), + "name": self.faker.name(), + "email": self.faker.email(), + "phone_number": "+999aaa999", + "area": self.faker.city(), + "is_admin": False, + "is_verified": True, + "is_active": True, + } + + response = self.client.put(path=url, data=data, format="json",) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + data = { + "id": str(self.officer.id), + "name": self.faker.name(), + "email": "email", + "phone_number": "+999999999999", + "area": self.faker.city(), + "is_admin": False, + "is_verified": True, + "is_active": True, + } + + response = self.client.put(path=url, data=data, format="json",) + self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST) + def test_delete_success(self): url = self.BASE_URL + str(self.officer.id) + "/"