81 lines
2.3 KiB
Python
81 lines
2.3 KiB
Python
from src.rag.qa_v1_1_73.citation_contract import (
|
||
cited_pmids,
|
||
normalize_pmid,
|
||
public_citation,
|
||
validate_answer_citations,
|
||
validate_answer_pmids,
|
||
)
|
||
|
||
|
||
def test_normalize_pmid_accepts_only_explicit_pmid_values():
|
||
assert normalize_pmid("34573426") == "34573426"
|
||
assert normalize_pmid("PMID: 34573426") == "34573426"
|
||
assert normalize_pmid("PMC8466090") == ""
|
||
assert normalize_pmid("10.3390/genes12091444") == ""
|
||
assert normalize_pmid("paper 34573426 evidence") == ""
|
||
|
||
|
||
def test_public_citation_has_a_safe_identifier_fallback_order():
|
||
assert public_citation(
|
||
evidence_id="S1",
|
||
pmid="34573426",
|
||
pmcid="PMC8466090",
|
||
doi="10.3390/genes12091444",
|
||
) == "[PMID: 34573426]"
|
||
assert public_citation(
|
||
evidence_id="S2",
|
||
pmid="",
|
||
pmcid="PMC8466090",
|
||
doi="10.3390/genes12091444",
|
||
) == "[PMCID: PMC8466090]"
|
||
assert public_citation(
|
||
evidence_id="S3",
|
||
pmid="",
|
||
pmcid="",
|
||
doi="10.3390/genes12091444",
|
||
) == "[DOI: 10.3390/genes12091444]"
|
||
assert public_citation(
|
||
evidence_id="S4",
|
||
pmid="",
|
||
pmcid="",
|
||
doi="",
|
||
) == ""
|
||
|
||
|
||
def test_public_citation_rejects_invalid_doi_instead_of_using_source_fallback():
|
||
assert public_citation(
|
||
evidence_id="S4",
|
||
pmid="",
|
||
pmcid="",
|
||
doi="10.x/x",
|
||
) == ""
|
||
assert public_citation(
|
||
evidence_id="S5",
|
||
pmid="",
|
||
pmcid="",
|
||
doi="paper 10.3390/genes12091444 evidence",
|
||
) == ""
|
||
|
||
|
||
def test_cited_pmids_returns_unique_visible_identifiers():
|
||
answer = "A [PMID: 34573426], B [PMID:29282286], C [PMID: 34573426]."
|
||
assert cited_pmids(answer) == {"34573426", "29282286"}
|
||
|
||
|
||
def test_unknown_answer_pmid_is_rejected():
|
||
answer = "WRKY参与胁迫响应。[PMID: 99999999]"
|
||
audit = validate_answer_pmids(answer, {"34573426"})
|
||
assert audit["valid"] is False
|
||
assert audit["cited_pmids"] == ["99999999"]
|
||
assert audit["unknown_pmids"] == ["99999999"]
|
||
|
||
|
||
def test_full_width_public_citation_brackets_are_malformed() -> None:
|
||
audit = validate_answer_citations(
|
||
"结论。【PMID: 34573426】", {"[PMID: 34573426]"}
|
||
)
|
||
|
||
assert audit["valid"] is False
|
||
assert audit["cited_pmids"] == []
|
||
assert audit["malformed_citation_labels"] == ["【PMID: 34573426】"]
|