Skip to content

Commit 46ce3f4

Browse files
authored
Merge pull request #89 from PROCOLLAB-github/dev
Dev
2 parents 0de500f + 67cf9b0 commit 46ce3f4

11 files changed

Lines changed: 109 additions & 62 deletions

File tree

industries/tests.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.test import TestCase
22
from rest_framework.test import APIRequestFactory, force_authenticate
3+
from tests.constants import USER_CREATE_DATA
34
from users.models import CustomUser
45
from users.views import UserList
56

@@ -90,15 +91,7 @@ def test_industry_update_with_wrong_data(self):
9091
self.assertEqual(response.status_code, 400)
9192

9293
def _user_create(self):
93-
request = self.factory.post(
94-
"auth/users/",
95-
{
96-
"email": "only_for_test@test.test",
97-
"password": "test_password",
98-
"first_name": "Test_first_name",
99-
"last_name": "Test_last_name",
100-
},
101-
)
94+
request = self.factory.post("auth/users/", USER_CREATE_DATA)
10295
response = self.user_list_view(request)
10396
user_id = response.data["id"]
10497
user = CustomUser.objects.get(id=user_id)

news/tests.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.test import TestCase
22
from rest_framework.test import APIRequestFactory, force_authenticate
3+
from tests.constants import USER_CREATE_DATA
34
from users.models import CustomUser
45
from users.views import UserList
56

@@ -118,15 +119,7 @@ def test_news_update_with_wrong_data(self):
118119
self.assertEqual(response.status_code, 400)
119120

120121
def _user_create(self, is_staff=False):
121-
request = self.factory.post(
122-
"auth/users/",
123-
{
124-
"email": "only_for_test@test.test",
125-
"password": "test_password",
126-
"first_name": "Test_first_name",
127-
"last_name": "Test_last_name",
128-
},
129-
)
122+
request = self.factory.post("auth/users/", USER_CREATE_DATA)
130123
response = self.user_list_view(request)
131124
user_id = response.data["id"]
132125
user = CustomUser.objects.get(id=user_id)

projects/filters.py

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,16 @@ class ProjectFilter(filters.FilterSet):
2727
"""
2828

2929
@classmethod
30-
def filter_collaborator_count_lt(cls, queryset, name, value):
31-
return queryset.alias(Count("collaborator")).filter(collaborator__count__lt=value)
30+
def filter_collaborator_count_lte(cls, queryset, name, value):
31+
return queryset.alias(Count("collaborator")).filter(
32+
collaborator__count__lte=value
33+
)
3234

3335
@classmethod
34-
def filter_collaborator_count_gt(cls, queryset, name, value):
35-
return queryset.alias(Count("collaborator")).filter(collaborator__count__gt=value)
36+
def filter_collaborator_count_gte(cls, queryset, name, value):
37+
return queryset.alias(Count("collaborator")).filter(
38+
collaborator__count__gte=value
39+
)
3640

3741
name__contains = filters.Filter(field_name="name", lookup_expr="contains")
3842
description__contains = filters.Filter(
@@ -50,10 +54,10 @@ def filter_collaborator_count_gt(cls, queryset, name, value):
5054
field_name="vacancies", lookup_expr="isnull", exclude=True
5155
)
5256
collaborator__count__gt = filters.NumberFilter(
53-
field_name="collaborator", method="filter_collaborator_count_gt"
57+
field_name="collaborator", method="filter_collaborator_count_gte"
5458
)
55-
collaborator__count__lt = filters.NumberFilter(
56-
field_name="collaborator", method="filter_collaborator_count_lt"
59+
collaborator__count__lte = filters.NumberFilter(
60+
field_name="collaborator", method="filter_collaborator_count_lte"
5761
)
5862
step = filters.NumberFilter(field_name="step")
5963

projects/tests.py

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from industries.models import Industry
55
from projects.models import Project
66
from projects.views import ProjectList, ProjectDetail
7+
from tests.constants import USER_CREATE_DATA
78
from users.models import CustomUser
89
from users.views import UserList
910

@@ -63,15 +64,7 @@ def test_project_update(self):
6364
self.assertEqual(response.data["name"], "Test2")
6465

6566
def user_create(self):
66-
request = self.factory.post(
67-
"auth/users/",
68-
{
69-
"email": "only_for_test@test.test",
70-
"password": "very_strong_password",
71-
"first_name": "Test",
72-
"last_name": "Test",
73-
},
74-
)
67+
request = self.factory.post("auth/users/", USER_CREATE_DATA)
7568
response = self.user_list_view(request)
7669
user_id = response.data["id"]
7770
user = CustomUser.objects.get(id=user_id)

tests/constants.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
USER_CREATE_DATA = {
2+
"email": "only_for_test@test.test",
3+
"password": "very_strong_password",
4+
"first_name": "Test",
5+
"last_name": "Test",
6+
"birthday": "2000-01-01",
7+
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
# Generated by Django 4.1.3 on 2022-12-11 14:17
2+
3+
import datetime
4+
from django.db import migrations, models
5+
import django.db.models.expressions
6+
7+
8+
def set_birthday_defaults(apps, schema_editor):
9+
CustomUser = apps.get_model("users", "CustomUser")
10+
for user in CustomUser.objects.all():
11+
if not user.birthday:
12+
user.birthday = "2000-01-01"
13+
user.save()
14+
15+
16+
def rev(apps, schema_editor):
17+
pass
18+
19+
20+
class Migration(migrations.Migration):
21+
22+
dependencies = [
23+
("users", "0022_alter_customuser_user_type_and_more"),
24+
]
25+
26+
operations = [
27+
migrations.RunPython(set_birthday_defaults, rev),
28+
migrations.AlterModelOptions(
29+
name="customuser",
30+
options={
31+
"verbose_name": "Пользователь",
32+
"verbose_name_plural": "Пользователи",
33+
},
34+
),
35+
migrations.AlterField(
36+
model_name="customuser",
37+
name="birthday",
38+
field=models.DateField(null=False, default="2000-01-01"),
39+
),
40+
]
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
# Generated by Django 4.1.3 on 2022-12-11 20:54
2+
3+
from django.db import migrations, models
4+
import users.validators
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
("users", "0023_alter_customuser_options_alter_customuser_birthday_and_more"),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name="customuser",
16+
name="birthday",
17+
field=models.DateField(validators=[users.validators.user_birthday_validator]),
18+
),
19+
]

users/models.py

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
VERBOSE_USER_TYPES,
1515
)
1616
from users.managers import CustomUserManager, UserAchievementManager
17+
from users.validators import user_birthday_validator
1718

1819

1920
def get_default_user_type():
@@ -67,7 +68,11 @@ class CustomUser(AbstractUser):
6768
patronymic = models.CharField(max_length=255, null=True, blank=True)
6869
key_skills = models.CharField(max_length=512, null=True, blank=True)
6970
avatar = models.URLField(null=True, blank=True)
70-
birthday = models.DateField(null=True, blank=True)
71+
birthday = models.DateField(
72+
null=False,
73+
blank=False,
74+
validators=[user_birthday_validator],
75+
)
7176
about_me = models.TextField(null=True, blank=True)
7277
status = models.CharField(max_length=255, null=True, blank=True)
7378
region = models.CharField(max_length=255, null=True, blank=True)
@@ -88,6 +93,10 @@ def get_key_skills(self) -> list[str]:
8893
def __str__(self):
8994
return f"User<{self.id}> - {self.first_name} {self.last_name}"
9095

96+
class Meta:
97+
verbose_name = "Пользователь"
98+
verbose_name_plural = "Пользователи"
99+
91100

92101
class UserAchievement(models.Model):
93102
"""

users/tests.py

Lines changed: 4 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from django.test import TestCase
22
from rest_framework.test import APIRequestFactory, force_authenticate
3+
from tests.constants import USER_CREATE_DATA
34

45
from users.models import CustomUser
56
from users.views import UserList, UserDetail
@@ -10,15 +11,9 @@ def setUp(self):
1011
self.factory = APIRequestFactory()
1112
self.user_list_view = UserList.as_view()
1213
self.user_detail_view = UserDetail.as_view()
13-
self.user_create_data = {
14-
"email": "only_for_test@test.test",
15-
"password": "very_strong_password",
16-
"first_name": "Test",
17-
"last_name": "Test",
18-
}
1914

2015
def test_user_creation(self):
21-
request = self.factory.post("auth/users/", self.user_create_data)
16+
request = self.factory.post("auth/users/", USER_CREATE_DATA)
2217
response = self.user_list_view(request)
2318
self.assertEqual(response.status_code, 201)
2419
self.assertEqual(response.data["email"], "only_for_test@test.test")
@@ -38,14 +33,14 @@ def test_user_creation_with_wrong_data(self):
3833
self.assertEqual(response.status_code, 400)
3934

4035
def test_user_creation_with_existing_email(self):
41-
request = self.factory.post("auth/users/", self.user_create_data)
36+
request = self.factory.post("auth/users/", USER_CREATE_DATA)
4237
response = self.user_list_view(request)
4338
self.assertEqual(response.status_code, 201)
4439
response = self.user_list_view(request)
4540
self.assertEqual(response.status_code, 400)
4641

4742
def test_user_update(self):
48-
request = self.factory.post("auth/users/", self.user_create_data)
43+
request = self.factory.post("auth/users/", USER_CREATE_DATA)
4944
response = self.user_list_view(request)
5045
user_id = response.data["id"]
5146
user = CustomUser.objects.get(id=user_id)

users/validators.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
from django.utils import timezone
2+
from django.core.exceptions import ValidationError
3+
4+
5+
def user_birthday_validator(birthday):
6+
"""returns true if person > 14 years old"""
7+
if (timezone.now().date() - birthday).days >= 14 * 365:
8+
return True
9+
raise ValidationError("Человек младше 14 лет")

0 commit comments

Comments
 (0)