HR-ATS-Portal/backend/tests/test_cv_bank_serialize.py

101 lines
3.5 KiB
Python

"""CV Bank list payload — ATS fields, suggested jobs, scored job."""
from types import SimpleNamespace
from job.candidate.serializers import serialize_bank_candidate, serialize_bank_silver_medalist
def _speculative(**overrides):
row = SimpleNamespace(
id="11111111-1111-1111-1111-111111111111",
candidate_name="Ada Lovelace",
candidate_email="ada@example.com",
candidate_phone="",
file_name="ada.pdf",
file_path="https://s3/ada.pdf",
linkedin_url=None,
current_company="Acme",
current_position="Backend Engineer",
education="",
skills=["Python"],
years_experience=6,
bank_reason="speculative",
bank_expires_at=None,
user_id=None,
job_post_id=None,
created_at=None,
updated_at=None,
)
for key, value in overrides.items():
setattr(row, key, value)
return row
def test_speculative_leaves_ats_empty_for_the_list_join():
payload = serialize_bank_candidate(_speculative())
assert payload["bank_source"] == "speculative"
assert payload["ai_score"] is None
assert payload["suggested_job_post_ids"] == []
assert payload["suggested_jobs"] == []
assert payload["scored_job_post_id"] is None
assert payload["message_id"] is None
assert payload["current_position"] == "Backend Engineer"
assert payload["years_experience"] == 6
assert payload["city"] is None
def test_speculative_keeps_assigned_job_id():
job_id = "22222222-2222-2222-2222-222222222222"
payload = serialize_bank_candidate(_speculative(job_post_id=job_id))
assert payload["assigned_job_post_id"] == job_id
def test_silver_exposes_suggested_jobs_and_inbox_score_path():
payload = serialize_bank_silver_medalist({
"inbox_id": 42,
"message_id": "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb",
"name": "Grace Hopper",
"email": "grace@example.com",
"current_company": "Navy",
"current_title": "Rear Admiral",
"matched_keywords": ["COBOL"],
"years_experience": 20,
"ai_score": 88,
"recommendation": "Strong Match",
"assigned_job_post_id": "job-1",
"last_job_post_id": "job-1",
"last_job_title": "Principal Engineer",
"suggested_job_post_ids": ["job-1", "job-2"],
"user_id": "aaaaaaaa-aaaa-aaaa-aaaa-aaaaaaaaaaaa",
"created_at": "2026-08-01T10:00:00Z",
})
assert payload["bank_source"] == "silver_medalist"
assert payload["ai_score"] == 88
assert payload["message_id"] == "bbbbbbbb-bbbb-bbbb-bbbb-bbbbbbbbbbbb"
assert payload["assigned_job_post_id"] == "job-1"
assert payload["scored_job_post_id"] == "job-1"
assert payload["scored_job_title"] == "Principal Engineer"
assert payload["suggested_job_post_ids"] == ["job-1", "job-2"]
assert payload["suggested_jobs"] == []
def test_silver_without_suggestions_stays_empty():
payload = serialize_bank_silver_medalist({
"inbox_id": 7,
"name": "Sparse",
"email": "s@example.com",
"ai_score": 70,
})
assert payload["suggested_job_post_ids"] == []
assert payload["message_id"] is None
assert payload["assigned_job_post_id"] is None
def test_years_from_inbox_free_text():
from inbox.models import _years_from_text
assert _years_from_text("5+ years") == 5
assert _years_from_text("6") == 6
assert _years_from_text(8) == 8
assert _years_from_text(None) is None
assert _years_from_text("") is None