peregrine/tests/test_match.py
pyr0ball 81e8a2f467
Some checks failed
CI / Backend (Python) (push) Failing after 1m15s
CI / Frontend (Vue) (push) Successful in 20s
CI / Backend (Python) (pull_request) Failing after 1m15s
CI / Frontend (Vue) (pull_request) Successful in 20s
fix(lint): auto-fix 112 ruff F401/F541 errors in scripts and tests
2026-06-26 20:52:42 -07:00

46 lines
1.6 KiB
Python

from unittest.mock import patch, MagicMock
def test_extract_job_description_from_url():
"""extract_job_description fetches and returns visible text from a URL."""
from scripts.match import extract_job_description
with patch("scripts.match.requests.get") as mock_get:
mock_get.return_value.text = "<html><body><p>We need a CSM with Salesforce.</p></body></html>"
mock_get.return_value.raise_for_status = MagicMock()
result = extract_job_description("https://example.com/job/123")
assert "CSM" in result
assert "Salesforce" in result
def test_score_is_between_0_and_100():
"""match_score returns a float in [0, 100] and a list of keyword gaps."""
from scripts.match import match_score
score, gaps = match_score(
resume_text="Customer Success Manager with Salesforce experience",
job_text="Looking for a Customer Success Manager who knows Salesforce and Gainsight",
)
assert 0 <= score <= 100
assert isinstance(gaps, list)
def test_write_score_to_notion():
"""write_match_to_notion updates the Notion page with score and gaps."""
from scripts.match import write_match_to_notion
mock_notion = MagicMock()
SAMPLE_FM = {
"match_score": "Match Score",
"keyword_gaps": "Keyword Gaps",
}
write_match_to_notion(mock_notion, "page-id-abc", 85.5, ["Gainsight", "Churnzero"], SAMPLE_FM)
mock_notion.pages.update.assert_called_once()
call_kwargs = mock_notion.pages.update.call_args[1]
assert call_kwargs["page_id"] == "page-id-abc"
score_val = call_kwargs["properties"]["Match Score"]["number"]
assert score_val == 85.5