Files
shelfmark/tests/direct_download/test_source_availability.py
Alex e35b4c47a7 Direct source refactor (#895)
- Updated mirror selection
- Removed built-in mirror options, users must provide their own
configurations
- Set Universal search to default, added ability to disable direct
source
- Updated documentation
- Updated makefile
2026-04-15 18:50:13 +01:00

98 lines
3.5 KiB
Python

from types import SimpleNamespace
import pytest
from shelfmark.release_sources.direct_download import DirectDownloadSource, SearchUnavailableError
def _fake_config_get(values: dict[str, object]):
def _get(key: str, default=None, user_id=None):
del user_id
return values.get(key, default)
return _get
def test_direct_download_source_is_unavailable_when_disabled(monkeypatch):
import shelfmark.release_sources.direct_download as dd
monkeypatch.setattr(dd.config, "get", _fake_config_get({"DIRECT_DOWNLOAD_ENABLED": False}))
monkeypatch.setattr("shelfmark.core.mirrors.has_aa_mirror_configuration", lambda: True)
source = DirectDownloadSource()
assert source.is_available() is False
with pytest.raises(SearchUnavailableError, match="Direct Download is disabled"):
source.search(SimpleNamespace(), SimpleNamespace())
def test_direct_download_source_is_unavailable_without_aa_mirrors(monkeypatch):
import shelfmark.release_sources.direct_download as dd
monkeypatch.setattr(dd.config, "get", _fake_config_get({"DIRECT_DOWNLOAD_ENABLED": True}))
monkeypatch.setattr("shelfmark.core.mirrors.has_aa_mirror_configuration", lambda: False)
source = DirectDownloadSource()
assert source.is_available() is False
with pytest.raises(SearchUnavailableError, match="not configured"):
source.get_record("md5-abc")
def test_direct_download_source_is_available_when_enabled_and_configured(monkeypatch):
import shelfmark.release_sources.direct_download as dd
monkeypatch.setattr(dd.config, "get", _fake_config_get({"DIRECT_DOWNLOAD_ENABLED": True}))
monkeypatch.setattr("shelfmark.core.mirrors.has_aa_mirror_configuration", lambda: True)
source = DirectDownloadSource()
assert source.is_available() is True
def test_get_source_priority_disables_entries_without_required_mirrors(monkeypatch):
import shelfmark.release_sources.direct_download as dd
monkeypatch.setattr(
dd.config,
"get",
_fake_config_get(
{
"AA_DONATOR_KEY": "donator-key",
"FAST_SOURCES_DISPLAY": [
{"id": "aa-fast", "enabled": True},
{"id": "libgen", "enabled": True},
],
"SOURCE_PRIORITY": [
{"id": "welib", "enabled": True},
{"id": "zlib", "enabled": True},
],
}
),
)
monkeypatch.setattr("shelfmark.core.mirrors.has_aa_mirror_configuration", lambda: False)
monkeypatch.setattr("shelfmark.core.mirrors.has_libgen_mirror_configuration", lambda: True)
monkeypatch.setattr("shelfmark.core.mirrors.has_welib_mirror_configuration", lambda: False)
monkeypatch.setattr("shelfmark.core.mirrors.has_zlib_mirror_configuration", lambda: True)
priority = {item["id"]: item["enabled"] for item in dd._get_source_priority()}
assert priority["aa-fast"] is False
assert priority["libgen"] is True
assert priority["welib"] is False
assert priority["zlib"] is True
def test_is_configured_zlib_link_uses_configured_mirror_domains(monkeypatch):
import shelfmark.release_sources.direct_download as dd
monkeypatch.setattr(
"shelfmark.core.mirrors.get_zlib_cookie_domains",
lambda: {"custom-zlib.example"},
)
assert dd._is_configured_zlib_link("https://custom-zlib.example/books/example") is True
assert dd._is_configured_zlib_link("https://other-zlib.example/books/example") is False