research-link-ai / tests /test_module_io.py
MHamdan's picture
Deploy Research-Link-AI (Docker Space, offline demo)
a753e74 verified
Raw
History Blame Contribute Delete
3.2 kB
"""Tests for reloading a persisted paper module."""
import json
from researchlink.schemas.paper import PaperExtraction, PaperMetadata
from researchlink.schemas.provenance import SourceRecord
from researchlink.services import module_io, paper_module
from researchlink.services.metadata_resolver import build_provenance
def _write_module(tmp_path):
mod = tmp_path / "2017-attention"
mod.mkdir()
meta = PaperMetadata(title="Attention Is All You Need", year=2017, doi="10.1/x",
arxiv_id="1706.03762", venue="NeurIPS",
authors_provisional=["Vaswani", "Shazeer"], slug="2017-attention")
ext = PaperExtraction(abstract="We propose the Transformer.",
section_headings=["Introduction", "Method"],
full_text="We propose the Transformer. It relies on attention.")
(mod / "paper.md").write_text(paper_module.paper_markdown(meta, ext), encoding="utf-8")
prov = build_provenance([SourceRecord(name="user", fields={
"title": meta.title, "year": 2017, "doi": "10.1/x", "arxiv_id": "1706.03762",
"venue": "NeurIPS", "authors": meta.authors_provisional, "url": "https://arxiv.org/abs/1706.03762",
})])
payload, sources = paper_module.build_metadata_json(prov, meta)
(mod / "metadata.json").write_text(json.dumps(payload), encoding="utf-8")
(mod / "sources.json").write_text(json.dumps(sources), encoding="utf-8")
(mod / "references.md").write_text(
"# References\n1. Bahdanau et al. Neural MT. 2015. ⚠️ `needs-verification`\n"
"2. Sutskever et al. Seq2Seq. 2014.\n", encoding="utf-8")
return mod
def test_load_metadata_roundtrip(tmp_path):
mod = _write_module(tmp_path)
meta = module_io.load_metadata(mod)
assert meta.title == "Attention Is All You Need"
assert meta.year == 2017
assert meta.doi == "10.1/x"
assert meta.arxiv_id == "1706.03762"
assert meta.venue == "NeurIPS"
assert meta.authors_provisional == ["Vaswani", "Shazeer"]
assert meta.slug == "2017-attention"
def test_load_extraction_roundtrip(tmp_path):
mod = _write_module(tmp_path)
ext = module_io.load_extraction(mod)
assert ext.abstract == "We propose the Transformer."
assert ext.section_headings == ["Introduction", "Method"]
assert "relies on attention" in (ext.full_text or "")
assert len(ext.references_raw) == 2
def test_load_references_strips_markers(tmp_path):
mod = _write_module(tmp_path)
refs = module_io.load_references(mod)
assert refs[0] == "Bahdanau et al. Neural MT. 2015." # status marker stripped
assert "Sutskever" in refs[1]
def test_load_missing_files_tolerant(tmp_path):
empty = tmp_path / "empty"
empty.mkdir()
assert module_io.load_metadata(empty).title == "Unknown Title"
assert module_io.load_extraction(empty).references_raw == []
def test_write_module_file_maps_spec_name(tmp_path):
mod = tmp_path / "m"
mod.mkdir()
dest = module_io.write_module_file(mod, "teaching-path.md", "# Study\n")
assert dest.name == "study_notes.md" # internal key mapped to spec name
assert dest.read_text() == "# Study\n"