Skip to content
This repository was archived by the owner on May 27, 2023. It is now read-only.

Commit a29a68d

Browse files
authored
Merge pull request #1433 from devind-team/1432-отобразить-кураторов-в-списке-пользователей-периода
Кураторы отображены в списке пользователей периода
2 parents 498099d + f0c32a5 commit a29a68d

4 files changed

Lines changed: 72 additions & 4 deletions

File tree

server/apps/dcis/services/period_services.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -113,9 +113,9 @@ def get_period_users(period: Period | int | str) -> QuerySet[User]:
113113
Q(project__period__id=period.id) |
114114
Q(period__id=period.id) |
115115
Q(periodgroup__period__id=period.id) |
116-
Q(pk__in=[*divisions.values_list('user_id', flat=True), *divisions.values_list('users__id', flat=True)]) |
117-
Q(periodgroup__period__id=period.id) |
118-
Q(periodprivilege__period__id=period.id)
116+
Q(id__in=[*divisions.values_list('user_id', flat=True), *divisions.values_list('users__id', flat=True)]) |
117+
Q(periodprivilege__period__id=period.id) |
118+
Q(curatorgroup__organization__id__in=divisions.values_list('id', flat=True))
119119
).distinct()
120120

121121

server/apps/dcis/tests/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
PeriodOrganizationsWithoutDocumentTestCase,
3636
PeriodTestCase,
3737
PeriodUserTestCase,
38+
PeriodUsersTestCase,
3839
PrivilegeTestCase,
3940
ProjectTestCase,
4041
RecalculateAllCellsTestCase,

server/apps/dcis/tests/services/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@
1414
PeriodGroupTestCase,
1515
PeriodTestCase,
1616
PeriodUserTestCase,
17+
PeriodUsersTestCase,
1718
)
1819
from .period_unload_services import UnloadPeriodTestCase
1920
from .privilege_services import PrivilegeTestCase

server/apps/dcis/tests/services/period_services.py

Lines changed: 67 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
delete_divisions_period,
3131
delete_period,
3232
delete_period_groups,
33+
get_period_users,
3334
get_user_curator_periods,
3435
get_user_divisions_periods,
3536
get_user_participant_periods,
@@ -158,7 +159,7 @@ def test_user_periods_without_perm(self) -> None:
158159
)
159160

160161
def _create_curator_periods(self, project: Project) -> list[Period]:
161-
"""Создание периодов для проекта c кураторской группой."""
162+
"""Создание периодов для проекта с кураторской группой."""
162163
periods: list[Period] = []
163164
for _ in range(3):
164165
organization = Organization.objects.create(attributes='')
@@ -171,6 +172,71 @@ def _create_curator_periods(self, project: Project) -> list[Period]:
171172
return periods
172173

173174

175+
class PeriodUsersTestCase(TestCase):
176+
"""Тестирование получения пользователей периода."""
177+
178+
def setUp(self) -> None:
179+
"""Создание данных для тестирования."""
180+
self.organization_content_type = ContentType.objects.get_for_model(Organization)
181+
182+
self.project_creator = User.objects.create(username='project_creator', email='project_creator@gmail.com')
183+
self.period_creator = User.objects.create(username='period_creator', email='period_creator@gmail.com')
184+
self.period_group_users = [User.objects.create(
185+
username=f'period_group_user{i}',
186+
email=f'period_group_user{i}@gmail.com',
187+
) for i in range(1, 4)]
188+
self.organization_head = User.objects.create(username='organization_head', email='organization_head@gmail.com')
189+
self.organization_users = [User.objects.create(
190+
username=f'organization_user{i}',
191+
email=f'organization_user{i}@gmail.com',
192+
) for i in range(1, 4)]
193+
self.privilege_users = [User.objects.create(
194+
username=f'privilege_user{i}',
195+
email=f'privilege_user{i}@gmail.com',
196+
) for i in range(1, 4)]
197+
self.curators = [User.objects.create(
198+
username=f'curator{i}',
199+
email=f'curator{i}@gmail.com',
200+
) for i in range(1, 4)]
201+
self.extra_users = [User.objects.create(
202+
username=f'extra_user{i}',
203+
email=f'extra_user{i}@gmail.com',
204+
) for i in range(1, 4)]
205+
206+
self.project = Project.objects.create(user=self.project_creator, content_type=self.organization_content_type)
207+
self.period = Period.objects.create(project=self.project, user=self.period_creator)
208+
self.period_group = PeriodGroup.objects.create(name='Группа периода', period=self.period)
209+
self.period_group.users.set(self.period_group_users)
210+
self.organization = Organization.objects.create(
211+
name='Организация периода',
212+
attributes='',
213+
user=self.organization_head,
214+
)
215+
self.period.division_set.create(object_id=self.organization.id)
216+
self.organization.users.set(self.organization_users)
217+
self.privilege = Privilege.objects.create(name='Привилегия', key='privilege')
218+
self.period_privileges = [PeriodPrivilege.objects.create(
219+
period=self.period,
220+
privilege=self.privilege,
221+
user=user,
222+
) for user in self.privilege_users]
223+
self.curator_group = CuratorGroup.objects.create(name='Кураторская группа')
224+
self.curator_group.organization.add(self.organization)
225+
self.curator_group.users.set(self.curators)
226+
227+
def test_get_period_users(self) -> None:
228+
"""Тестирование получения пользователей периода."""
229+
self.assertEqual({
230+
self.project_creator,
231+
self.period_creator,
232+
*self.period_group_users,
233+
self.organization_head,
234+
*self.organization_users,
235+
*self.privilege_users,
236+
*self.curators,
237+
}, set(get_period_users(self.period)))
238+
239+
174240
class PeriodTestCase(TestCase):
175241
"""Тестирование основных действий с периодом."""
176242

0 commit comments

Comments
 (0)