Files
PlantAI-rag/tests/test_qa_v1_1_73_citation_contract.py

81 lines
2.3 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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】"]