generated from kgod/ai-review-template
72 lines
2.0 KiB
Python
72 lines
2.0 KiB
Python
"""Entry-level gap report persistence and staleness detection."""
|
|
|
|
from app.resume_document_core import (
|
|
attach_gap_report_staleness,
|
|
entry_fingerprint,
|
|
find_entry,
|
|
gap_report_is_stale,
|
|
)
|
|
from app.resume_document_mutations import set_entry_gap_report
|
|
|
|
|
|
def _content() -> dict:
|
|
return {
|
|
"sections": [
|
|
{
|
|
"id": "sec1",
|
|
"kind": "project_experience",
|
|
"items": [{"id": "e1", "project_name": "项目 A", "description": "完成了开发。"}],
|
|
}
|
|
]
|
|
}
|
|
|
|
|
|
GAPS = [
|
|
{
|
|
"dimension": "quantified_outcome",
|
|
"severity": 4,
|
|
"askability": 0.5,
|
|
"job_weight": 3,
|
|
"evidence": "缺少量化成果。",
|
|
"value": 6.0,
|
|
}
|
|
]
|
|
|
|
|
|
def test_set_entry_gap_report_does_not_change_fingerprint() -> None:
|
|
content = _content()
|
|
before = entry_fingerprint(find_entry(content, "e1")[1])
|
|
|
|
content = set_entry_gap_report(content, "e1", GAPS)
|
|
|
|
entry = find_entry(content, "e1")[1]
|
|
assert entry["gap_report"]["gaps"] == GAPS
|
|
assert entry["gap_report"]["based_on"] == before
|
|
assert entry_fingerprint(entry) == before
|
|
assert gap_report_is_stale(entry) is False
|
|
|
|
|
|
def test_gap_report_stale_after_entry_edit() -> None:
|
|
content = set_entry_gap_report(_content(), "e1", GAPS)
|
|
entry = find_entry(content, "e1")[1]
|
|
|
|
entry["description"] = "手动编辑后的描述。"
|
|
|
|
assert gap_report_is_stale(entry) is True
|
|
|
|
|
|
def test_gap_report_missing_is_not_stale() -> None:
|
|
entry = find_entry(_content(), "e1")[1]
|
|
|
|
assert gap_report_is_stale(entry) is False
|
|
|
|
|
|
def test_attach_gap_report_staleness_returns_a_presentation_copy() -> None:
|
|
content = set_entry_gap_report(_content(), "e1", GAPS)
|
|
entry = find_entry(content, "e1")[1]
|
|
entry["description"] = "已编辑。"
|
|
|
|
presentation = attach_gap_report_staleness(content)
|
|
|
|
assert find_entry(presentation, "e1")[1]["gap_report"]["stale"] is True
|
|
assert "stale" not in find_entry(content, "e1")[1]["gap_report"] |