mirror of
https://github.com/calibrain/shelfmark.git
synced 2026-09-24 22:05:20 +01:00
- Moved backend OIDC functionality to external library Authlib to help maintainability - Separated User settings UI into individual components, allowing for standard settings UI decorator components to be used. - Added full support for reverse proxy and CWA users alongside local and OIDC - Added mapping and syncing functionality for OIDC, CWA and reverse proxy users - Added per-user settings into the app-wide config system. Each config can be declared as user-overrideable, and app-wide functionality can now receive user-specific options via standard config calls. - Added per-user audiobook destination config - Updated login modal UI for simplified login, plus custom labels for OIDC login - Added user visibility in header dropdown - Unified "restrict settings to admin" to use app-wide user roles.
76 lines
3.0 KiB
Python
76 lines
3.0 KiB
Python
"""Tests for per-user BookLore library/path support."""
|
|
|
|
from shelfmark.download.outputs.booklore import build_booklore_config
|
|
|
|
|
|
class TestBuildBookloreConfigWithOverrides:
|
|
"""build_booklore_config should resolve per-user library/path via config."""
|
|
|
|
BASE_SETTINGS = {
|
|
"BOOKLORE_HOST": "http://booklore:6060",
|
|
"BOOKLORE_USERNAME": "admin",
|
|
"BOOKLORE_PASSWORD": "secret",
|
|
"BOOKLORE_LIBRARY_ID": 1,
|
|
"BOOKLORE_PATH_ID": 10,
|
|
}
|
|
|
|
def test_global_config_without_user_context(self):
|
|
config = build_booklore_config(self.BASE_SETTINGS)
|
|
assert config.library_id == 1
|
|
assert config.path_id == 10
|
|
|
|
def test_override_library_and_path_with_user_context(self, monkeypatch):
|
|
def fake_get(key, default=None, user_id=None):
|
|
if user_id == 7 and key == "BOOKLORE_LIBRARY_ID":
|
|
return 2
|
|
if user_id == 7 and key == "BOOKLORE_PATH_ID":
|
|
return 20
|
|
return default
|
|
|
|
monkeypatch.setattr("shelfmark.download.outputs.booklore.core_config.config.get", fake_get)
|
|
config = build_booklore_config(self.BASE_SETTINGS, user_id=7)
|
|
assert config.library_id == 2
|
|
assert config.path_id == 20
|
|
|
|
def test_override_library_only(self, monkeypatch):
|
|
def fake_get(key, default=None, user_id=None):
|
|
if user_id == 7 and key == "BOOKLORE_LIBRARY_ID":
|
|
return 3
|
|
return default
|
|
|
|
monkeypatch.setattr("shelfmark.download.outputs.booklore.core_config.config.get", fake_get)
|
|
config = build_booklore_config(self.BASE_SETTINGS, user_id=7)
|
|
assert config.library_id == 3
|
|
assert config.path_id == 10 # falls back to global
|
|
|
|
def test_override_path_only(self, monkeypatch):
|
|
def fake_get(key, default=None, user_id=None):
|
|
if user_id == 7 and key == "BOOKLORE_PATH_ID":
|
|
return 30
|
|
return default
|
|
|
|
monkeypatch.setattr("shelfmark.download.outputs.booklore.core_config.config.get", fake_get)
|
|
config = build_booklore_config(self.BASE_SETTINGS, user_id=7)
|
|
assert config.library_id == 1 # falls back to global
|
|
assert config.path_id == 30
|
|
|
|
def test_none_user_context_uses_global(self):
|
|
config = build_booklore_config(self.BASE_SETTINGS, user_id=None)
|
|
assert config.library_id == 1
|
|
assert config.path_id == 10
|
|
|
|
def test_auth_fields_remain_global(self, monkeypatch):
|
|
"""Only Booklore library/path should be resolved with user context."""
|
|
def fake_get(key, default=None, user_id=None):
|
|
if user_id == 7 and key == "BOOKLORE_LIBRARY_ID":
|
|
return 5
|
|
if user_id == 7 and key == "BOOKLORE_PATH_ID":
|
|
return 15
|
|
return default
|
|
|
|
monkeypatch.setattr("shelfmark.download.outputs.booklore.core_config.config.get", fake_get)
|
|
config = build_booklore_config(self.BASE_SETTINGS, user_id=7)
|
|
assert config.base_url == "http://booklore:6060"
|
|
assert config.username == "admin"
|
|
assert config.library_id == 5
|