61 lines
1.8 KiB
Python
61 lines
1.8 KiB
Python
from __future__ import annotations
|
|
|
|
from citegeist.sources import CrossRefSource, OpenCitationsSource, SourceRegistry, list_source_catalog, prioritized_source_keys
|
|
|
|
|
|
def test_catalog_prioritizes_existing_core_sources() -> None:
|
|
keys = prioritized_source_keys()
|
|
assert keys[:6] == ["crossref", "datacite", "europe_pmc", "openalex", "open_citations", "pubmed"]
|
|
|
|
|
|
def test_catalog_includes_open_citation_and_access_sources() -> None:
|
|
catalog = {entry.key: entry for entry in list_source_catalog()}
|
|
assert "open_citations" in catalog
|
|
assert "unpaywall" in catalog
|
|
assert catalog["open_citations"].priority == "now"
|
|
assert "doi_citations" in catalog["open_citations"].capabilities
|
|
|
|
|
|
def test_registry_loads_known_source_from_config() -> None:
|
|
registry = SourceRegistry()
|
|
registry.from_config_dict(
|
|
{
|
|
"sources": {
|
|
"crossref": {
|
|
"source_type": "crossref",
|
|
"enabled": True,
|
|
}
|
|
}
|
|
}
|
|
)
|
|
|
|
source = registry.get("crossref")
|
|
assert isinstance(source, CrossRefSource)
|
|
|
|
|
|
def test_registry_rejects_unknown_source_type() -> None:
|
|
registry = SourceRegistry()
|
|
try:
|
|
registry.from_config_dict({"sources": {"mystery": {"source_type": "mystery"}}})
|
|
except ValueError as exc:
|
|
assert "Unknown source type" in str(exc)
|
|
else:
|
|
raise AssertionError("expected ValueError for unknown source type")
|
|
|
|
|
|
def test_registry_loads_opencitations_from_config() -> None:
|
|
registry = SourceRegistry()
|
|
registry.from_config_dict(
|
|
{
|
|
"sources": {
|
|
"opencitations": {
|
|
"source_type": "opencitations",
|
|
"enabled": True,
|
|
}
|
|
}
|
|
}
|
|
)
|
|
|
|
source = registry.get("opencitations")
|
|
assert isinstance(source, OpenCitationsSource)
|