soulsync/tests/wishlist
BoulderBadgeDad 48e86a1a58 #874: wishlist ignore-list — stop auto-retrying removed/cancelled tracks
A user who removes a wishlist track, or cancels an in-flight wishlist
download, would have it re-added on the next auto cycle (watchlist scan,
failed-track capture, or the cancel handler's own re-add), so the same
release downloaded -> failed/cancelled -> re-queued forever.

Adds a TTL'd skip-gate (30 days), softer than the blocklist: it expires
so the track is reconsidered later, and never blocks a manual
force-download — only the automatic re-queue.

- core/wishlist/ignore.py: pure TTL/normalization/display logic + a
  best-effort orchestrator (no DB handle, caller passes now).
- database/music_database.py: migration-safe wishlist_ignore table +
  add/check/remove/list(+purge)/clear methods, and the gate in
  add_to_wishlist beside the blocklist guard. Fail-open throughout — an
  ignore error can never block a legitimate add; a manual add bypasses
  the gate AND clears the ignore.
- routes.py: user remove (single/album/batch) records an ignore. Hooked
  at the route layer, NOT the DB remove, so success-cleanup never
  ignores (regression-tested).
- web_server.py: cancel now ignores + removes from the wishlist instead
  of re-adding for endless retry; three /api/wishlist/ignore-list*
  endpoints.
- downloads.js: 'Ignored' modal (view / un-ignore / clear all).
- 13 tests: pure logic, DB seam, gate (block/bypass/fail-open),
  route wiring, and the success-cleanup-does-not-ignore regression.
2026-06-15 22:50:39 -07:00
..
__init__.py Extract wishlist logic into dedicated package 2026-04-28 21:17:24 +03:00
test_album_grouping.py Wishlist: only engage album-bundle when multiple tracks from same album (PR 1/4) 2026-05-27 13:42:04 -07:00
test_automation.py Fix #740: run wishlist album-bundle downloads on a dedicated pool 2026-05-29 14:31:10 -07:00
test_batch_factory.py Wishlist: unify batch-row construction into make_wishlist_batch_row 2026-05-29 16:55:31 -07:00
test_cancelled_payload.py Extract wishlist logic into dedicated package 2026-04-28 21:17:24 +03:00
test_classification.py Coerce wishlist track counts before category checks 2026-04-30 21:42:43 +03:00
test_cleanup.py Extract wishlist logic into dedicated package 2026-04-28 21:17:24 +03:00
test_failed_track_payload.py Extract wishlist logic into dedicated package 2026-04-28 21:17:24 +03:00
test_manual_download.py Wishlist: route the manual flow through the shared engine (manual == auto) 2026-05-29 17:43:40 -07:00
test_payloads.py Wishlist: fix three regressions causing all imports to land as track 01 with no year 2026-05-27 15:39:22 -07:00
test_presence.py Expand wishlist test coverage 2026-04-28 21:17:47 +03:00
test_processing.py Fix organize-by-playlist downloads: library entries, wishlist, and stale Spotify cache 2026-06-03 10:26:32 +02:00
test_reporting.py Extract wishlist logic into dedicated package 2026-04-28 21:17:24 +03:00
test_resolution.py Make wishlist respect configured providers 2026-04-30 07:41:22 +03:00
test_routes.py Wishlist: manual "add to wishlist" now skips already-owned tracks (#825) 2026-06-09 10:55:45 -07:00
test_selection.py Extract wishlist logic into dedicated package 2026-04-28 21:17:24 +03:00
test_service.py Accept wishlist track_data aliases 2026-04-30 07:59:43 +03:00
test_state.py Extract wishlist logic into dedicated package 2026-04-28 21:17:24 +03:00
test_wishlist_ignore.py #874: wishlist ignore-list — stop auto-retrying removed/cancelled tracks 2026-06-15 22:50:39 -07:00