App: Peregrine Company: Circuit Forge LLC Source: github.com/pyr0ball/job-seeker (personal fork, not linked)
96 lines
4.1 KiB
Python
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 == {}
|