beacon / backend /tests /test_references.py
kiyer's picture
feat: references parser + session v2 — corpus matching, citeIndex, new schema models
0a89d37
Raw
History Blame Contribute Delete
2.34 kB
import pytest
from astroparse_api.references import parse_references, _build_bibcode
# Fixtures: known reference formats from real papers
REF_APJL = (
"Carnall, A. C., McLure, R. J., Dunlop, J. S., & Davé, R. 2018, "
"ApJL, 873, L14. doi:10.3847/2041-8213/ab0a7e"
)
REF_MNRAS = (
"Schreiber, C., Glazebrook, K., & Nanayakkara, T. 2018, MNRAS, 489, 3023. "
"arXiv:1906.08978"
)
REF_ARXIV_ONLY = (
"Weibel, A., Oesch, P. A., Barrufet, L. et al. 2024, arXiv:2409.03829"
)
CORPUS_ARXIV = {"1906.08978", "2409.03829"}
CORPUS_BIBCODES = {"2018ApJ...873L..14C"}
def test_parse_references_extracts_year():
refs, _ = parse_references(REF_APJL + "\n\n" + REF_MNRAS, set(), set())
years = {r.year for r in refs}
assert 2018 in years
def test_parse_references_extracts_arxiv():
refs, _ = parse_references(REF_MNRAS, CORPUS_ARXIV, set())
assert refs[0].arxiv == "1906.08978"
def test_arxiv_match_sets_corpus_match():
refs, _ = parse_references(REF_MNRAS, CORPUS_ARXIV, set())
assert refs[0].corpus_match is True
def test_no_arxiv_no_bibcode_match_is_display_only():
refs, _ = parse_references(REF_APJL, set(), set())
assert refs[0].corpus_match is False
def test_bibcode_construction_apjl():
bc = _build_bibcode("2018", "ApJL", "873", "L14", "C")
assert bc == "2018ApJ...873L..14C"
def test_bibcode_construction_mnras():
bc = _build_bibcode("2018", "MNRAS", "489", "3023", "S")
assert bc == "2018MNRAS.489.3023S"
def test_cite_index_built():
_, idx = parse_references(REF_APJL + "\n\n" + REF_ARXIV_ONLY, set(), set())
keys = list(idx.keys())
assert any("carnall" in k for k in keys)
assert any("weibel" in k for k in keys)
def test_multiple_refs_same_author_year_both_indexed():
ref_a = "Smith, J. A. 2020, ApJ, 900, 1"
ref_b = "Smith, J. B. 2020, ApJ, 901, 5"
_, idx = parse_references(ref_a + "\n\n" + ref_b, set(), set())
keys = list(idx.keys())
assert any("smith" in k for k in keys)
def test_empty_raw_refs_returns_empty():
refs, idx = parse_references("", set(), set())
assert refs == []
assert idx == {}
def test_bibcode_match_sets_corpus_match():
refs, _ = parse_references(REF_APJL, set(), CORPUS_BIBCODES)
assert refs[0].corpus_match is True
assert refs[0].bibcode == "2018ApJ...873L..14C"