Skip to content

Commit

Permalink
Admin: Prevent duplicates in Approvals assigned_to
Browse files Browse the repository at this point in the history
  • Loading branch information
francoisfreitag committed May 8, 2024
1 parent 4c880e8 commit ff5a016
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 1 deletion.
4 changes: 3 additions & 1 deletion itou/approvals/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -230,8 +230,10 @@ def with_assigned_company(self):
)

def is_assigned_to(self, company_id):
from itou.job_applications.models import JobApplication

return (
self.filter(user__job_applications__to_company=company_id)
self.filter(pk__in=JobApplication.objects.filter(to_company=company_id).values_list("approval"))
.with_assigned_company()
.filter(assigned_company=company_id)
)
Expand Down
29 changes: 29 additions & 0 deletions tests/approvals/test_admin.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,10 @@

from itou.approvals.enums import ProlongationReason
from itou.files.models import File
from itou.job_applications.enums import JobApplicationState
from itou.utils.admin import get_admin_view_link
from tests.approvals.factories import ApprovalFactory, CancelledApprovalFactory, ProlongationFactory, SuspensionFactory
from tests.companies.factories import CompanyFactory
from tests.job_applications.factories import JobApplicationFactory
from tests.users.factories import ItouStaffFactory, JobSeekerFactory
from tests.utils.test import parse_response_to_soup
Expand Down Expand Up @@ -82,6 +84,33 @@ def test_assigned_company(admin_client):
assertContains(response, get_admin_view_link(siae, content=siae.display_name), count=2)


def test_filter_assigned_company(admin_client):
company = CompanyFactory()
job_seeker = JobSeekerFactory()
JobApplicationFactory(to_company=company, job_seeker=job_seeker)
approval = ApprovalFactory(user=job_seeker)
JobApplicationFactory(
approval=approval,
to_company=company,
job_seeker=job_seeker,
state=JobApplicationState.ACCEPTED,
)
response = admin_client.get(reverse("admin:approvals_approval_changelist"), {"assigned_company": company.pk})
assertContains(response, "1 PASS IAE")
assertContains(
response,
f"""
<th class="field-pk">
<a href="/admin/approvals/approval/{approval.pk}/change/?_changelist_filters=assigned_company%3D{company.pk}">
{approval.pk}
</a>
</th>
""",
html=True,
count=1,
)


def test_send_approvals_to_pe_stats(admin_client):
ApprovalFactory(pe_notification_status="notification_error")
CancelledApprovalFactory(pe_notification_status="notification_should_retry")
Expand Down

0 comments on commit ff5a016

Please sign in to comment.