mirror of
https://github.com/calibrain/shelfmark.git
synced 2026-10-02 18:25:46 +01:00
- 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
204 lines
6.3 KiB
Python
204 lines
6.3 KiB
Python
from unittest.mock import MagicMock
|
|
|
|
|
|
def test_mirror_settings_use_canonical_tag_lists_for_all_non_base_mirror_sets():
|
|
import shelfmark.config.settings # noqa: F401
|
|
from shelfmark.core.settings_registry import TagListField, get_settings_tab
|
|
|
|
tab = get_settings_tab("mirrors")
|
|
|
|
assert tab is not None
|
|
fields = {field.key: field for field in tab.fields if hasattr(field, "key")}
|
|
|
|
assert isinstance(fields["AA_MIRROR_URLS"], TagListField)
|
|
assert isinstance(fields["LIBGEN_MIRROR_URLS"], TagListField)
|
|
assert isinstance(fields["ZLIB_MIRROR_URLS"], TagListField)
|
|
assert isinstance(fields["WELIB_MIRROR_URLS"], TagListField)
|
|
|
|
|
|
def test_migrate_mirror_settings_does_not_seed_defaults_on_fresh_install(monkeypatch):
|
|
import shelfmark.core.settings_registry as registry
|
|
|
|
saves = MagicMock(return_value=True)
|
|
|
|
monkeypatch.setattr(
|
|
registry, "load_config_file", lambda tab_name: {} if tab_name == "mirrors" else {}
|
|
)
|
|
monkeypatch.setattr(registry, "save_config_file", saves)
|
|
|
|
registry.migrate_mirror_settings()
|
|
|
|
saves.assert_not_called()
|
|
|
|
|
|
def test_migrate_mirror_settings_converts_legacy_additional_urls_to_list(monkeypatch):
|
|
import shelfmark.core.settings_registry as registry
|
|
|
|
saves = MagicMock(return_value=True)
|
|
|
|
monkeypatch.setattr(
|
|
registry,
|
|
"load_config_file",
|
|
lambda tab_name: (
|
|
{"AA_ADDITIONAL_URLS": "aa.one, https://aa.two/"} if tab_name == "mirrors" else {}
|
|
),
|
|
)
|
|
monkeypatch.setattr(registry, "save_config_file", saves)
|
|
|
|
registry.migrate_mirror_settings()
|
|
|
|
saves.assert_called_once_with(
|
|
"mirrors",
|
|
{
|
|
"AA_MIRROR_URLS": ["https://aa.one", "https://aa.two"],
|
|
},
|
|
)
|
|
|
|
|
|
def test_migrate_mirror_settings_preserves_existing_list_without_reseeding(monkeypatch):
|
|
import shelfmark.core.settings_registry as registry
|
|
|
|
saves = MagicMock(return_value=True)
|
|
|
|
monkeypatch.setattr(
|
|
registry,
|
|
"load_config_file",
|
|
lambda tab_name: (
|
|
{
|
|
"AA_MIRROR_URLS": ["https://annas-archive.existing"],
|
|
"_AA_MIRRORS_DEFAULTS_HASH": "old-hash",
|
|
}
|
|
if tab_name == "mirrors"
|
|
else {}
|
|
),
|
|
)
|
|
monkeypatch.setattr(registry, "save_config_file", saves)
|
|
|
|
registry.migrate_mirror_settings()
|
|
|
|
saves.assert_not_called()
|
|
|
|
|
|
def test_migrate_mirror_settings_converts_legacy_split_fields_to_canonical_lists(monkeypatch):
|
|
import shelfmark.core.settings_registry as registry
|
|
|
|
saves = MagicMock(return_value=True)
|
|
|
|
monkeypatch.setattr(
|
|
registry,
|
|
"load_config_file",
|
|
lambda tab_name: (
|
|
{
|
|
"LIBGEN_ADDITIONAL_URLS": "libgen.one, https://libgen.two/",
|
|
"ZLIB_PRIMARY_URL": "zlib.primary",
|
|
"ZLIB_ADDITIONAL_URLS": "https://zlib.primary, zlib.backup",
|
|
"WELIB_PRIMARY_URL": "welib.primary",
|
|
"WELIB_ADDITIONAL_URLS": "https://welib.backup",
|
|
}
|
|
if tab_name == "mirrors"
|
|
else {}
|
|
),
|
|
)
|
|
monkeypatch.setattr(registry, "save_config_file", saves)
|
|
|
|
registry.migrate_mirror_settings()
|
|
|
|
saves.assert_called_once_with(
|
|
"mirrors",
|
|
{
|
|
"LIBGEN_MIRROR_URLS": ["https://libgen.one", "https://libgen.two"],
|
|
"ZLIB_MIRROR_URLS": ["https://zlib.primary", "https://zlib.backup"],
|
|
"WELIB_MIRROR_URLS": ["https://welib.primary", "https://welib.backup"],
|
|
},
|
|
)
|
|
|
|
|
|
def test_canonical_mirror_fields_accept_legacy_env_vars(monkeypatch):
|
|
import shelfmark.config.settings # noqa: F401
|
|
from shelfmark.core.settings_registry import (
|
|
get_setting_value,
|
|
get_settings_tab,
|
|
is_value_from_env,
|
|
)
|
|
|
|
monkeypatch.setenv("ZLIB_PRIMARY_URL", "zlib.primary")
|
|
monkeypatch.setenv("ZLIB_ADDITIONAL_URLS", "https://zlib.primary, zlib.backup")
|
|
|
|
tab = get_settings_tab("mirrors")
|
|
|
|
assert tab is not None
|
|
fields = {field.key: field for field in tab.fields if hasattr(field, "key")}
|
|
zlib_field = fields["ZLIB_MIRROR_URLS"]
|
|
|
|
assert is_value_from_env(zlib_field) is True
|
|
assert get_setting_value(zlib_field, "mirrors") == [
|
|
"https://zlib.primary",
|
|
"https://zlib.backup",
|
|
]
|
|
|
|
|
|
def test_migrate_direct_download_upgrade_enables_direct_download_without_seeding_mirrors(
|
|
monkeypatch,
|
|
):
|
|
import shelfmark.core.settings_registry as registry
|
|
|
|
saves = MagicMock(return_value=True)
|
|
|
|
monkeypatch.setattr(registry, "load_config_file", lambda tab_name: {})
|
|
monkeypatch.setattr(registry, "save_config_file", saves)
|
|
|
|
registry.migrate_direct_download_upgrade(existing_install=True)
|
|
|
|
saves.assert_called_once_with("download_sources", {"DIRECT_DOWNLOAD_ENABLED": True})
|
|
|
|
|
|
def test_migrate_direct_download_upgrade_skips_fresh_install(monkeypatch):
|
|
import shelfmark.core.settings_registry as registry
|
|
|
|
saves = MagicMock(return_value=True)
|
|
|
|
monkeypatch.setattr(registry, "save_config_file", saves)
|
|
|
|
registry.migrate_direct_download_upgrade(existing_install=False)
|
|
|
|
saves.assert_not_called()
|
|
|
|
|
|
def test_migrate_search_page_title_preserves_legacy_title_for_existing_installs(monkeypatch):
|
|
import shelfmark.core.settings_registry as registry
|
|
|
|
saves = MagicMock(return_value=True)
|
|
|
|
monkeypatch.delenv("SEARCH_PAGE_TITLE", raising=False)
|
|
monkeypatch.setattr(registry, "save_config_file", saves)
|
|
|
|
registry.migrate_search_page_title(existing_install=True, had_existing_value=False)
|
|
|
|
saves.assert_called_once_with("general", {"SEARCH_PAGE_TITLE": "Book Search & Download"})
|
|
|
|
|
|
def test_migrate_search_page_title_skips_when_value_already_exists(monkeypatch):
|
|
import shelfmark.core.settings_registry as registry
|
|
|
|
saves = MagicMock(return_value=True)
|
|
|
|
monkeypatch.delenv("SEARCH_PAGE_TITLE", raising=False)
|
|
monkeypatch.setattr(registry, "save_config_file", saves)
|
|
|
|
registry.migrate_search_page_title(existing_install=True, had_existing_value=True)
|
|
|
|
saves.assert_not_called()
|
|
|
|
|
|
def test_migrate_search_page_title_skips_when_env_var_is_set(monkeypatch):
|
|
import shelfmark.core.settings_registry as registry
|
|
|
|
saves = MagicMock(return_value=True)
|
|
|
|
monkeypatch.setenv("SEARCH_PAGE_TITLE", "Shelfmark")
|
|
monkeypatch.setattr(registry, "save_config_file", saves)
|
|
|
|
registry.migrate_search_page_title(existing_install=True, had_existing_value=False)
|
|
|
|
saves.assert_not_called()
|