Skip to content

Commit

Permalink
job_applications.models: Only use valid eligibility diagnosis
Browse files Browse the repository at this point in the history
  • Loading branch information
rsebille committed Jun 14, 2024
1 parent 6a3d71a commit a916514
Show file tree
Hide file tree
Showing 4 changed files with 135 additions and 2 deletions.
4 changes: 2 additions & 2 deletions itou/job_applications/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -223,8 +223,8 @@ def with_jobseeker_eligibility_diagnosis(self):
"""
sub_query = Subquery(
(
EligibilityDiagnosis.objects.filter(job_seeker=OuterRef("job_seeker"))
.order_by("-created_at")
EligibilityDiagnosis.objects.valid()
.for_job_seeker_and_siae(job_seeker=OuterRef("job_seeker"), siae=OuterRef("to_company"))
.values("id")[:1]
),
output_field=models.IntegerField(),
Expand Down
13 changes: 13 additions & 0 deletions tests/eligibility/factories.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import functools
import random

import factory
from django.utils import timezone
Expand Down Expand Up @@ -46,18 +47,30 @@ class Params:
with_prescriber = factory.Trait(from_prescriber=True)


def _get_iae_administrative_criteria(self, create, extracted, **kwargs):
if not create:
# Simple build, do nothing.
return

# Pick random results.
criteria = models.AdministrativeCriteria.objects.order_by("?")[: random.randint(1, 5)]
self.administrative_criteria.add(*criteria)


class IAEEligibilityDiagnosisFactory(AbstractEligibilityDiagnosisModelFactory):
"""Generate an EligibilityDiagnosis() object whose author is an authorized prescriber organization."""

class Meta:
model = models.EligibilityDiagnosis
skip_postgeneration_save = True

class Params:
from_employer = factory.Trait(
author_kind=AuthorKind.EMPLOYER,
author_siae=factory.SubFactory(CompanyFactory, subject_to_eligibility=True, with_membership=True),
author=factory.LazyAttribute(lambda obj: obj.author_siae.members.first()),
)
with_criteria = factory.Trait(romes=factory.PostGeneration(_get_iae_administrative_criteria))


EligibilityDiagnosisFactory = functools.partial(IAEEligibilityDiagnosisFactory, from_prescriber=True)
51 changes: 51 additions & 0 deletions tests/www/apply/test_list_for_siae.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
from tests.eligibility.factories import EligibilityDiagnosisFactory, IAEEligibilityDiagnosisFactory
from tests.job_applications.factories import (
JobApplicationFactory,
JobApplicationSentByCompanyFactory,
JobApplicationSentByJobSeekerFactory,
JobApplicationSentByPrescriberFactory,
)
Expand Down Expand Up @@ -762,3 +763,53 @@ def test_list_for_siae_exports_download_by_month(client):
)
assert 200 == response.status_code
assert "spreadsheetml" in response.get("Content-Type")


def test_list_for_siae_display_eligibility_diagnosis_of_prescriber(client):
job_application = JobApplicationFactory(
sent_by_authorized_prescriber_organisation=True,
to_company__subject_to_eligibility=True,
eligibility_diagnosis=None,
)
IAEEligibilityDiagnosisFactory(
from_prescriber=True,
with_criteria=True,
job_seeker=job_application.job_seeker,
)
client.force_login(job_application.to_company.members.first())

response = client.get(reverse("apply:list_for_siae"))
assertContains(response, "Critères administratifs IAE", count=1)


def test_list_for_siae_display_eligibility_diagnosis_of_current_siae_member(client):
job_application = JobApplicationSentByCompanyFactory(
to_company__subject_to_eligibility=True,
eligibility_diagnosis=None,
)
IAEEligibilityDiagnosisFactory(
from_employer=True,
author_siae=job_application.sender_company,
with_criteria=True,
job_seeker=job_application.job_seeker,
)
client.force_login(job_application.to_company.members.first())

response = client.get(reverse("apply:list_for_siae"))
assertContains(response, "Critères administratifs IAE", count=1)


def test_list_for_siae_display_eligibility_diagnosis_of_another_siae_member(client):
job_application = JobApplicationSentByCompanyFactory(
to_company__subject_to_eligibility=True,
eligibility_diagnosis=None,
)
IAEEligibilityDiagnosisFactory(
from_employer=True,
with_criteria=True,
job_seeker=job_application.job_seeker,
)
client.force_login(job_application.to_company.members.first())

response = client.get(reverse("apply:list_for_siae"))
assertNotContains(response, "Critères administratifs IAE")
69 changes: 69 additions & 0 deletions tests/www/apply/test_list_prescriptions.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@
from itou.job_applications.models import JobApplicationWorkflow
from itou.prescribers.enums import PrescriberOrganizationKind
from itou.utils.urls import add_url_params
from tests.eligibility.factories import IAEEligibilityDiagnosisFactory
from tests.job_applications.factories import JobApplicationFactory
from tests.prescribers.factories import (
PrescriberOrganizationWith2MembershipFactory,
Expand Down Expand Up @@ -264,3 +265,71 @@ def test_list_prescriptions_exports_download_by_month(client):
)
assert 200 == response.status_code
assert "spreadsheetml" in response.get("Content-Type")


def test_list_prescriptions_display_eligibility_diagnosis_of_current_prescriber(client):
job_application = JobApplicationFactory(
sent_by_authorized_prescriber_organisation=True,
to_company__subject_to_eligibility=True,
eligibility_diagnosis=None,
)
IAEEligibilityDiagnosisFactory(
from_prescriber=True,
author_prescriber_organization=job_application.sender_prescriber_organization,
with_criteria=True,
job_seeker=job_application.job_seeker,
)
client.force_login(job_application.sender)

response = client.get(reverse("apply:list_prescriptions"))
assertContains(response, "Critères administratifs IAE", count=1)


def test_list_prescriptions_display_eligibility_diagnosis_of_another_prescriber(client):
job_application = JobApplicationFactory(
sent_by_authorized_prescriber_organisation=True,
to_company__subject_to_eligibility=True,
eligibility_diagnosis=None,
)
IAEEligibilityDiagnosisFactory(
from_prescriber=True,
with_criteria=True,
job_seeker=job_application.job_seeker,
)
client.force_login(job_application.sender)

response = client.get(reverse("apply:list_prescriptions"))
assertContains(response, "Critères administratifs IAE", count=1)


def test_list_prescriptions_display_eligibility_diagnosis_of_current_siae_member(client):
eligibility_diagnosis = IAEEligibilityDiagnosisFactory(
from_employer=True,
with_criteria=True,
)
job_application = JobApplicationFactory(
sent_by_authorized_prescriber_organisation=True,
eligibility_diagnosis=None,
to_company=eligibility_diagnosis.author_siae,
job_seeker=eligibility_diagnosis.job_seeker,
)
client.force_login(job_application.sender)

response = client.get(reverse("apply:list_prescriptions"))
assertContains(response, "Critères administratifs IAE", count=1)


def test_list_prescriptions_siae_display_eligibility_diagnosis_of_another_siae_member(client):
eligibility_diagnosis = IAEEligibilityDiagnosisFactory(
from_employer=True,
with_criteria=True,
)
job_application = JobApplicationFactory(
sent_by_authorized_prescriber_organisation=True,
eligibility_diagnosis=None,
job_seeker=eligibility_diagnosis.job_seeker,
)
client.force_login(job_application.sender)

response = client.get(reverse("apply:list_prescriptions"))
assertNotContains(response, "Critères administratifs IAE")

0 comments on commit a916514

Please sign in to comment.