"""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