research-link-ai / tests /test_paper_module.py
MHamdan's picture
Deploy Research-Link-AI (Docker Space, offline demo)
a753e74 verified
Raw
History Blame Contribute Delete
2.32 kB
"""Tests for spec paper-module builders and filename mapping."""
from researchlink.schemas.paper import PaperExtraction, PaperMetadata
from researchlink.schemas.provenance import FieldStatus, SourceRecord
from researchlink.services import paper_module as pm
from researchlink.services.metadata_resolver import build_provenance
def test_spec_rename_maps_and_passes_through():
assert pm.spec_filename("digest.md") == "summary.md"
assert pm.spec_filename("reproducibility.md") == "reproduction.md"
assert pm.spec_filename("README.md") == "README.md" # unmapped → identity
assert pm.spec_filename("labs/01.py") == "labs/01.py"
def test_paper_markdown_grounded():
meta = PaperMetadata(title="T", year=2024, authors_provisional=["A"])
ext = PaperExtraction(abstract="An abstract.", section_headings=["Intro", "Method"],
full_text="Body text here.", page_count=3)
md = pm.paper_markdown(meta, ext)
assert md.startswith("# T")
assert "An abstract." in md
assert "- Intro" in md and "- Method" in md
assert "Body text here." in md
assert "Machine-extracted" in md
def test_paper_markdown_marks_missing():
md = pm.paper_markdown(PaperMetadata(title="X"), PaperExtraction())
assert "[needs-verification]" in md
def test_build_metadata_json_splits_sources_and_conflicts():
records = [
SourceRecord(name="arxiv", fields={"title": "T", "year": 2017}),
SourceRecord(name="crossref", fields={"title": "T", "year": 2018}),
]
prov = build_provenance(records)
meta = PaperMetadata(title="T", slug="2017-t")
payload, sources = pm.build_metadata_json(prov, meta, model_slug="m")
assert payload["schema_version"] == "0.1"
assert payload["slug"] == "2017-t"
assert payload["generated_by_model"] == "m"
assert "year" in payload["conflicts"] # conflict surfaced
assert payload["fields"]["title"]["status"] == FieldStatus.verified.value
assert payload["fields"]["title"]["confidence_label"] in ("high", "medium", "low")
assert "sources" not in payload["fields"] # sources split out
assert sources["schema_version"] == "0.1"
assert len(sources["sources"]) == 2
assert sources["sources"][0]["type"] == "arxiv"
assert sources["sources"][0]["status"] == "ok"