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 24, 2024
1 parent 62ab424 commit 53c2fe8
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 3 deletions.
6 changes: 3 additions & 3 deletions itou/job_applications/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -232,12 +232,12 @@ def with_accepted_at(self):
def with_jobseeker_eligibility_diagnosis(self):
"""
Gives the "eligibility_diagnosis" linked to the job application or if none is found
the last eligibility diagnosis for jobseeker
the last valid eligibility diagnosis for this job seeker and this SIAE
"""
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 @@ -45,18 +46,30 @@ class Params:
)


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(2, 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)
48 changes: 48 additions & 0 deletions tests/job_applications/tests.py
Original file line number Diff line number Diff line change
Expand Up @@ -342,6 +342,7 @@ def test_can_change_prior_actions():
)


@pytest.mark.usefixtures("unittest_compatibility")
class JobApplicationQuerySetTest(TestCase):
def test_created_in_past(self):
now = timezone.now()
Expand Down Expand Up @@ -398,6 +399,53 @@ def test_with_jobseeker_eligibility_diagnosis(self):
qs = JobApplication.objects.with_jobseeker_eligibility_diagnosis().get(pk=job_app.pk)
assert qs.jobseeker_eligibility_diagnosis == diagnosis.pk

def test_with_jobseeker_eligibility_diagnosis_with_a_denormalized_diagnosis_from_prescriber(self):
job_application = JobApplicationFactory(
sent_by_authorized_prescriber_organisation=True,
to_company__subject_to_eligibility=True,
eligibility_diagnosis=None,
)
eligibility_diagnosis = IAEEligibilityDiagnosisFactory(
from_prescriber=True,
with_criteria=True,
job_seeker=job_application.job_seeker,
)

qs = JobApplication.objects.with_jobseeker_eligibility_diagnosis()
assert list(qs) == [job_application]
assert qs.first().jobseeker_eligibility_diagnosis == eligibility_diagnosis.pk

def test_with_jobseeker_eligibility_diagnosis_with_a_denormalized_diagnosis_from_current_employer(self):
job_application = JobApplicationSentByCompanyFactory(
to_company__subject_to_eligibility=True,
eligibility_diagnosis=None,
)
eligibility_diagnosis = IAEEligibilityDiagnosisFactory(
from_employer=True,
author_siae=job_application.sender_company,
with_criteria=True,
job_seeker=job_application.job_seeker,
)

qs = JobApplication.objects.with_jobseeker_eligibility_diagnosis()
assert list(qs) == [job_application]
assert qs.first().jobseeker_eligibility_diagnosis == eligibility_diagnosis.pk

def test_with_jobseeker_eligibility_diagnosis_with_a_denormalized_diagnosis_from_another_employer(self):
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,
)

qs = JobApplication.objects.with_jobseeker_eligibility_diagnosis()
assert list(qs) == [job_application]
assert qs.first().jobseeker_eligibility_diagnosis is None

def test_with_eligibility_diagnosis_criterion(self):
diagnosis = EligibilityDiagnosisFactory(created_at=timezone.now())
job_app = JobApplicationFactory(
Expand Down

0 comments on commit 53c2fe8

Please sign in to comment.