Skip to content

Commit e99ac97

Browse files
authored
Merge pull request #647 from PROCOLLAB-github/refactor/modules
fix: исправлены выявленные прорблемы после рефакторинга
2 parents c4c6ce8 + ded499a commit e99ac97

5 files changed

Lines changed: 69 additions & 4 deletions

File tree

deploy/nginx/host/dev/dev.procollab.ru

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ server {
22
listen 80;
33
server_name dev.procollab.ru;
44
server_tokens off;
5+
client_max_body_size 100M;
56

67
location ^~ /.well-known/acme-challenge/ {
78
root /var/www/certbot;
@@ -24,6 +25,8 @@ server {
2425
ssl_certificate /etc/letsencrypt/live/dev.procollab.ru-0001/fullchain.pem;
2526
ssl_certificate_key /etc/letsencrypt/live/dev.procollab.ru-0001/privkey.pem;
2627

28+
client_max_body_size 100M;
29+
2730
location ~ ^/(admin|api-auth|files|industries|news|projects|vacancies|core|invites|auth|chats|events|programs|courses|rate-project|feed|api|anymail|ws)(/|$) {
2831
include /etc/nginx/procollab/includes/proxy_app.inc;
2932
}

invites/filters.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
from rest_framework.exceptions import PermissionDenied
33

44
from invites.models import Invite
5-
from vacancy.filters import project_id_filter
65

76

87
def _first_filter_value(value):
@@ -40,6 +39,12 @@ def __init__(self, *args, **kwargs):
4039
if user_value is None and project_value in (None, ""):
4140
self.data["user"] = request.user.id
4241

42+
def filter_project(self, queryset, name, value):
43+
value = _first_filter_value(value)
44+
if value in (None, ""):
45+
return queryset
46+
return queryset.filter(project_id=value)
47+
4348
def filter_user(self, queryset, name, value):
4449
value = _first_filter_value(value)
4550
if value == "any":
@@ -51,7 +56,7 @@ def filter_user(self, queryset, name, value):
5156
return queryset
5257
return queryset.filter(user_id=value)
5358

54-
project = filters.Filter(method=project_id_filter)
59+
project = filters.Filter(method="filter_project")
5560
user = filters.Filter(method="filter_user")
5661

5762
class Meta:

invites/tests/test_invite_api.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,10 @@
1+
from types import SimpleNamespace
2+
13
from django.test import TestCase
24
from rest_framework import status
35
from rest_framework.test import APIClient
46

7+
from invites.filters import InviteFilter
58
from invites.models import Invite
69
from invites.tests.helpers import (
710
add_collaborator,
@@ -224,6 +227,40 @@ def test_project_leader_can_list_project_invites_by_project_filter(self):
224227
{first_invite.id, second_invite.id},
225228
)
226229

230+
def test_project_leader_can_list_invite_after_creating_via_api(self):
231+
leader = create_user(prefix="leader")
232+
recipient = create_user(prefix="recipient")
233+
project = create_project(leader=leader)
234+
self.client.force_authenticate(leader)
235+
236+
create_response = self.client.post(
237+
"/invites/",
238+
invite_payload(project, recipient),
239+
format="json",
240+
)
241+
list_response = self.client.get("/invites/", {"project": project.id})
242+
243+
self.assertEqual(create_response.status_code, status.HTTP_201_CREATED)
244+
self.assertEqual(list_response.status_code, status.HTTP_200_OK)
245+
self.assertEqual(
246+
[item["id"] for item in list_response.data],
247+
[create_response.data["id"]],
248+
)
249+
250+
def test_project_filter_handles_scalar_multi_digit_project_id(self):
251+
leader = create_user(prefix="leader")
252+
projects = [create_project(leader=leader) for _ in range(12)]
253+
target_project = projects[-1]
254+
invite = create_invite(project=target_project)
255+
256+
filtered = InviteFilter(
257+
data={"project": str(target_project.id)},
258+
queryset=Invite.objects.all(),
259+
request=SimpleNamespace(user=leader),
260+
).qs
261+
262+
self.assertEqual(list(filtered), [invite])
263+
227264
def test_project_leader_cannot_use_user_any_filter(self):
228265
leader = create_user(prefix="leader")
229266
project = create_project(leader=leader)
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# Generated by Django 4.2.11 on 2026-06-10
2+
3+
from django.db import migrations
4+
5+
6+
class Migration(migrations.Migration):
7+
8+
dependencies = [
9+
("partner_programs", "0016_partnerprogram_is_distributed_evaluation"),
10+
]
11+
12+
operations = [
13+
migrations.AlterModelOptions(
14+
name="partnerprogramproject",
15+
options={
16+
"verbose_name": "Проект",
17+
"verbose_name_plural": "Проекты",
18+
},
19+
),
20+
]

partner_programs/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -307,8 +307,8 @@ def can_edit(self, user: User) -> bool:
307307

308308
class Meta:
309309
unique_together = ("partner_program", "project")
310-
verbose_name = "Проект участующий в программе"
311-
verbose_name_plural = "Проекеты участвующие в программах"
310+
verbose_name = "Проект"
311+
verbose_name_plural = "Проекты"
312312

313313
def __str__(self):
314314
return f"{self.project} в программе {self.partner_program}"

0 commit comments

Comments
 (0)