peregrine/tests/test_enrich_descriptions.py
pyr0ball c368c7a977 chore: seed Peregrine from personal job-seeker (pre-generalization)
App: Peregrine
Company: Circuit Forge LLC
Source: github.com/pyr0ball/job-seeker (personal fork, not linked)
2026-02-24 18:25:39 -08:00

96 lines
4.1 KiB
Python

# tests/test_enrich_descriptions.py
"""Tests for scripts/enrich_descriptions.py — enrich_craigslist_fields()."""
from unittest.mock import patch, MagicMock
import sqlite3
def test_enrich_craigslist_fields_skips_non_craigslist(tmp_path):
"""Non-craigslist source → returns {} without calling LLM."""
from scripts.db import init_db, insert_job
from scripts.enrich_descriptions import enrich_craigslist_fields
db = tmp_path / "test.db"
init_db(db)
job_id = insert_job(db, {
"title": "CSM", "company": "", "url": "https://example.com/1",
"source": "linkedin", "location": "", "description": "Some company here.",
"date_found": "2026-02-24",
})
with patch("scripts.llm_router.LLMRouter") as mock_llm:
result = enrich_craigslist_fields(db, job_id)
assert result == {}
mock_llm.assert_not_called()
def test_enrich_craigslist_fields_skips_populated_company(tmp_path):
"""Company already set → returns {} without calling LLM."""
from scripts.db import init_db, insert_job
from scripts.enrich_descriptions import enrich_craigslist_fields
db = tmp_path / "test.db"
init_db(db)
job_id = insert_job(db, {
"title": "CSM", "company": "Acme Corp", "url": "https://sfbay.craigslist.org/jjj/d/1.html",
"source": "craigslist", "location": "", "description": "Join Acme Corp today.",
"date_found": "2026-02-24",
})
with patch("scripts.llm_router.LLMRouter") as mock_llm:
result = enrich_craigslist_fields(db, job_id)
assert result == {}
mock_llm.assert_not_called()
def test_enrich_craigslist_fields_skips_empty_description(tmp_path):
"""Empty description → returns {} without calling LLM."""
from scripts.db import init_db, insert_job
from scripts.enrich_descriptions import enrich_craigslist_fields
db = tmp_path / "test.db"
init_db(db)
job_id = insert_job(db, {
"title": "CSM", "company": "", "url": "https://sfbay.craigslist.org/jjj/d/2.html",
"source": "craigslist", "location": "", "description": "",
"date_found": "2026-02-24",
})
with patch("scripts.llm_router.LLMRouter") as mock_llm:
result = enrich_craigslist_fields(db, job_id)
assert result == {}
mock_llm.assert_not_called()
def test_enrich_craigslist_fields_extracts_and_updates(tmp_path):
"""Valid LLM response → updates company/salary in DB, returns extracted dict."""
from scripts.db import init_db, insert_job
from scripts.enrich_descriptions import enrich_craigslist_fields
db = tmp_path / "test.db"
init_db(db)
job_id = insert_job(db, {
"title": "CSM", "company": "", "url": "https://sfbay.craigslist.org/jjj/d/3.html",
"source": "craigslist", "location": "", "description": "Join Acme Corp. Pay: $120k/yr.",
"date_found": "2026-02-24",
})
mock_router = MagicMock()
mock_router.complete.return_value = '{"company": "Acme Corp", "salary": "$120k/yr"}'
with patch("scripts.llm_router.LLMRouter", return_value=mock_router):
result = enrich_craigslist_fields(db, job_id)
assert result == {"company": "Acme Corp", "salary": "$120k/yr"}
conn = sqlite3.connect(db)
row = conn.execute("SELECT company, salary FROM jobs WHERE id=?", (job_id,)).fetchone()
conn.close()
assert row[0] == "Acme Corp"
assert row[1] == "$120k/yr"
def test_enrich_craigslist_fields_handles_bad_llm_json(tmp_path):
"""Unparseable LLM response → returns {} without raising."""
from scripts.db import init_db, insert_job
from scripts.enrich_descriptions import enrich_craigslist_fields
db = tmp_path / "test.db"
init_db(db)
job_id = insert_job(db, {
"title": "CSM", "company": "", "url": "https://sfbay.craigslist.org/jjj/d/4.html",
"source": "craigslist", "location": "", "description": "Great opportunity.",
"date_found": "2026-02-24",
})
mock_router = MagicMock()
mock_router.complete.return_value = "Sorry, I cannot extract that."
with patch("scripts.llm_router.LLMRouter", return_value=mock_router):
result = enrich_craigslist_fields(db, job_id)
assert result == {}