merge: R-B (Crossref references as third citation fallback)
This commit is contained in:
@@ -5,6 +5,7 @@ from __future__ import annotations
|
||||
import httpx
|
||||
import pytest
|
||||
|
||||
from codex.models import Citation
|
||||
from codex.sources import crossref
|
||||
|
||||
|
||||
@@ -48,3 +49,56 @@ def test_fetch_abstract_404_returns_none(monkeypatch: pytest.MonkeyPatch) -> Non
|
||||
|
||||
monkeypatch.setattr(crossref, "_get", mock_get)
|
||||
assert crossref.fetch_abstract("10.0000/nonexistent") is None
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# fetch_references (roadmap R-B)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
|
||||
def test_fetch_references_returns_doi_edges(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
"""Only references carrying a DOI become Citations; citing_id is the queried DOI."""
|
||||
body = {
|
||||
"message": {
|
||||
"reference": [
|
||||
{"key": "ref1", "DOI": "10.1090/s0002-9947-04-03545-7"},
|
||||
{"key": "ref2", "unstructured": "A book with no DOI, 1992."}, # skipped
|
||||
{"key": "ref3", "DOI": "10.1007/bf02392449", "article-title": "X"},
|
||||
]
|
||||
}
|
||||
}
|
||||
|
||||
def mock_get(url: str, params: dict[str, object] | None = None) -> httpx.Response:
|
||||
return httpx.Response(200, json=body)
|
||||
|
||||
monkeypatch.setattr(crossref, "_get", mock_get)
|
||||
refs = crossref.fetch_references("10.1007/s00454-019-00132-8")
|
||||
|
||||
assert refs == [
|
||||
Citation(citing_id="10.1007/s00454-019-00132-8", cited_id="10.1090/s0002-9947-04-03545-7"),
|
||||
Citation(citing_id="10.1007/s00454-019-00132-8", cited_id="10.1007/bf02392449"),
|
||||
]
|
||||
|
||||
|
||||
def test_fetch_references_no_reference_key_returns_empty(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
"""A work with no deposited reference list returns []."""
|
||||
|
||||
def mock_get(url: str, params: dict[str, object] | None = None) -> httpx.Response:
|
||||
return httpx.Response(200, json={"message": {"title": ["No refs deposited"]}})
|
||||
|
||||
monkeypatch.setattr(crossref, "_get", mock_get)
|
||||
assert crossref.fetch_references("10.1007/978-3-642-17413-1_7") == []
|
||||
|
||||
|
||||
def test_fetch_references_404_returns_empty(monkeypatch: pytest.MonkeyPatch) -> None:
|
||||
"""A 404 returns [] rather than raising."""
|
||||
|
||||
def mock_get(url: str, params: dict[str, object] | None = None) -> httpx.Response:
|
||||
raise httpx.HTTPStatusError(
|
||||
"404",
|
||||
request=httpx.Request("GET", url),
|
||||
response=httpx.Response(404, request=httpx.Request("GET", url)),
|
||||
)
|
||||
|
||||
monkeypatch.setattr(crossref, "_get", mock_get)
|
||||
assert crossref.fetch_references("10.0000/nonexistent") == []
|
||||
|
||||
Reference in New Issue
Block a user