"""Tests for codex.sources.crossref.""" from __future__ import annotations import httpx import pytest from codex.sources import crossref def test_fetch_abstract_strips_jats(monkeypatch: pytest.MonkeyPatch) -> None: """A JATS-tagged abstract is returned as plain text with tags removed.""" body = { "message": { "abstract": "We prove a theorem about " "polyhedra." } } 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) result = crossref.fetch_abstract("10.1007/s00454-019-00132-8") assert result == "We prove a theorem about polyhedra." def test_fetch_abstract_absent_returns_none(monkeypatch: pytest.MonkeyPatch) -> None: """A work with no abstract field (e.g. a book chapter) returns None.""" def mock_get(url: str, params: dict[str, object] | None = None) -> httpx.Response: return httpx.Response(200, json={"message": {"title": ["Some Chapter"]}}) monkeypatch.setattr(crossref, "_get", mock_get) assert crossref.fetch_abstract("10.1007/978-3-642-17413-1_7") is None def test_fetch_abstract_404_returns_none(monkeypatch: pytest.MonkeyPatch) -> None: """A 404 returns None 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_abstract("10.0000/nonexistent") is None