Skip to content

Commit 13e6923

Browse files
authored
Merge pull request #171 from PROCOLLAB-github/feature/name-validation
Валидация имен пользователей
2 parents d210fc2 + 6790e7f commit 13e6923

4 files changed

Lines changed: 28 additions & 8 deletions

File tree

tests/constants.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
USER_CREATE_DATA = {
22
"email": "only_for_test@test.test",
33
"password": "very_strong_password",
4-
"first_name": "Test",
5-
"last_name": "Test",
4+
"first_name": "Иван",
5+
"last_name": "Иванович",
66
"birthday": "2000-01-01",
77
}

users/models.py

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
UserAchievementManager,
1717
LikesOnProjectManager,
1818
)
19-
from users.validators import user_birthday_validator
19+
from users.validators import user_birthday_validator, user_name_validator
2020

2121

2222
def get_default_user_type():
@@ -58,8 +58,8 @@ class CustomUser(AbstractUser):
5858

5959
username = None
6060
email = models.EmailField(unique=True)
61-
first_name = models.CharField(max_length=255)
62-
last_name = models.CharField(max_length=255)
61+
first_name = models.CharField(max_length=255, validators=[user_name_validator])
62+
last_name = models.CharField(max_length=255, validators=[user_name_validator])
6363
password = models.CharField(max_length=255)
6464
is_active = models.BooleanField(default=False, editable=False)
6565
user_type = models.PositiveSmallIntegerField(
@@ -71,7 +71,9 @@ class CustomUser(AbstractUser):
7171
default=0,
7272
editable=False,
7373
)
74-
patronymic = models.CharField(max_length=255, null=True, blank=True)
74+
patronymic = models.CharField(
75+
max_length=255, validators=[user_name_validator], null=True, blank=True
76+
)
7577
key_skills = models.CharField(max_length=512, null=True, blank=True)
7678
avatar = models.URLField(null=True, blank=True)
7779
birthday = models.DateField(

users/tests.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,8 +53,8 @@ def test_user_update(self):
5353
response = self.user_detail_view(request, pk=user.pk)
5454
self.assertEqual(response.status_code, 200)
5555

56-
request = self.factory.patch(f"auth/users/{user.pk}/", {"first_name": "Test2"})
56+
request = self.factory.patch(f"auth/users/{user.pk}/", {"first_name": "Сергей"})
5757
force_authenticate(request, user=user)
5858
response = self.user_detail_view(request, pk=user.pk)
5959
self.assertEqual(response.status_code, 200)
60-
self.assertEqual(response.data["first_name"], "Test2")
60+
self.assertEqual(response.data["first_name"], "Сергей")

users/validators.py

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,22 @@ def user_birthday_validator(birthday):
66
"""returns true if person > 14 years old"""
77
if (timezone.now().date() - birthday).days >= 14 * 365:
88
return True
9+
# check if person is > 100 years old
10+
if (timezone.now().date() - birthday).days >= 100 * 365:
11+
raise ValidationError("Человек старше 100 лет")
912
raise ValidationError("Человек младше 14 лет")
13+
14+
15+
def user_name_validator(name):
16+
"""returns true if name is valid"""
17+
# TODO: add check for vulgar words
18+
19+
valid_name_chars = "АБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
20+
for letter in name:
21+
if letter.upper() not in valid_name_chars:
22+
raise ValidationError(
23+
"Имя содержит недопустимые символы. Могут быть только символы киррилического алфавита."
24+
)
25+
if len(name) < 2:
26+
raise ValidationError("Имя слишком короткое")
27+
return True

0 commit comments

Comments
 (0)