mirror of
https://github.com/calibrain/shelfmark.git
synced 2026-10-04 17:16:45 +01:00
Requests: Various fixes and improvements (#617)
- Refactored activity backend for full user-level management, using the db file - Revamped the activity sidebar UX and categorisation - Added download history and user filtering - Added User Preferences modal, giving limited configuration for non-admins - replaces the "restrict settings" config option. - Many many bug fixes - Many many new tests
This commit is contained in:
@@ -14,9 +14,11 @@ from shelfmark.core.requests_service import (
|
||||
create_request,
|
||||
fulfil_request,
|
||||
normalize_policy_mode,
|
||||
normalize_delivery_state,
|
||||
normalize_request_level,
|
||||
normalize_request_status,
|
||||
reject_request,
|
||||
sync_delivery_states_from_queue_status,
|
||||
validate_request_level_payload,
|
||||
validate_status_transition,
|
||||
)
|
||||
@@ -61,6 +63,16 @@ def test_normalize_request_status_rejects_unknown_values():
|
||||
normalize_request_status("queued")
|
||||
|
||||
|
||||
def test_normalize_delivery_state_accepts_known_values():
|
||||
assert normalize_delivery_state("none") == "none"
|
||||
assert normalize_delivery_state(" QUEUED ") == "queued"
|
||||
|
||||
|
||||
def test_normalize_delivery_state_rejects_unknown_values():
|
||||
with pytest.raises(ValueError, match="Invalid delivery_state"):
|
||||
normalize_delivery_state("pending")
|
||||
|
||||
|
||||
def test_normalize_policy_mode_accepts_strings_and_enum():
|
||||
assert normalize_policy_mode("download") == "download"
|
||||
assert normalize_policy_mode("REQUEST_BOOK") == "request_book"
|
||||
@@ -370,6 +382,8 @@ def test_fulfil_request_queues_as_requesting_user(user_db):
|
||||
)
|
||||
|
||||
assert fulfilled["status"] == "fulfilled"
|
||||
assert fulfilled["delivery_state"] == "queued"
|
||||
assert fulfilled["delivery_updated_at"] is not None
|
||||
assert fulfilled["reviewed_by"] == admin["id"]
|
||||
assert captured["priority"] == 0
|
||||
assert captured["user_id"] == alice["id"]
|
||||
@@ -411,6 +425,8 @@ def test_fulfil_book_level_request_stores_selected_release_data(user_db):
|
||||
)
|
||||
|
||||
assert fulfilled["status"] == "fulfilled"
|
||||
assert fulfilled["delivery_state"] == "queued"
|
||||
assert fulfilled["delivery_updated_at"] is not None
|
||||
assert fulfilled["request_level"] == "book"
|
||||
assert fulfilled["release_data"]["source_id"] == "admin-picked-book-release"
|
||||
assert captured["release_data"]["source_id"] == "admin-picked-book-release"
|
||||
@@ -418,6 +434,50 @@ def test_fulfil_book_level_request_stores_selected_release_data(user_db):
|
||||
assert captured["username"] == "alice"
|
||||
|
||||
|
||||
def test_sync_delivery_states_from_queue_status_updates_matching_fulfilled_requests(user_db):
|
||||
alice = user_db.create_user(username="alice")
|
||||
bob = user_db.create_user(username="bob")
|
||||
|
||||
alice_request = user_db.create_request(
|
||||
user_id=alice["id"],
|
||||
source_hint="prowlarr",
|
||||
content_type="ebook",
|
||||
request_level="release",
|
||||
policy_mode="request_release",
|
||||
book_data=_book_data(),
|
||||
release_data={"source": "prowlarr", "source_id": "alice-rel", "title": "Alice Release"},
|
||||
status="fulfilled",
|
||||
delivery_state="queued",
|
||||
)
|
||||
bob_request = user_db.create_request(
|
||||
user_id=bob["id"],
|
||||
source_hint="prowlarr",
|
||||
content_type="ebook",
|
||||
request_level="release",
|
||||
policy_mode="request_release",
|
||||
book_data=_book_data(),
|
||||
release_data={"source": "prowlarr", "source_id": "bob-rel", "title": "Bob Release"},
|
||||
status="fulfilled",
|
||||
delivery_state="queued",
|
||||
)
|
||||
|
||||
updated = sync_delivery_states_from_queue_status(
|
||||
user_db,
|
||||
queue_status={
|
||||
"downloading": {"alice-rel": {"id": "alice-rel"}},
|
||||
"complete": {"bob-rel": {"id": "bob-rel"}},
|
||||
},
|
||||
user_id=alice["id"],
|
||||
)
|
||||
|
||||
assert [row["id"] for row in updated] == [alice_request["id"]]
|
||||
refreshed_alice = user_db.get_request(alice_request["id"])
|
||||
refreshed_bob = user_db.get_request(bob_request["id"])
|
||||
assert refreshed_alice["delivery_state"] == "downloading"
|
||||
assert refreshed_alice["delivery_updated_at"] is not None
|
||||
assert refreshed_bob["delivery_state"] == "queued"
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# book_data validation
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user