soulsync/tests/wishlist
BoulderBadgeDad d3c897fb9d Wishlist: route the manual flow through the shared engine (manual == auto)
Stage 2: the manual 'Download Wishlist' flow now calls the same
_run_wishlist_cycle engine the auto timer uses, so a manual scan runs the exact
same code path as an auto scan. The old bespoke manual orchestration (build
payloads + SERIAL inline dispatch) is deleted — its grouping/dispatch was a
near-duplicate of auto's that had already drifted.

Behavior changes (all intended, discussed):
- Manual now dispatches album bundles in PARALLEL (album pool) like auto, instead
  of serially on one thread. A single cycle='albums' engine call covers the whole
  selection (albums bundled, singles/ungroupable -> per-track residual), so no
  'both cycles' pass is needed.
- The manual placeholder batch_id is reused as the engine's first sub-batch
  (first_batch_id), so the modal's existing poll target stays valid.
- WishlistManualDownloadRuntime gains album_bundle_executor (wired in web_server,
  falls back to the shared pool when unset).
- 'Don't start manual while auto is running' is unchanged — the existing route
  guard (is_wishlist_actually_processing -> 409) already covers it; no queue added.

NOT touched: process_wishlist_automatically's behavior (proven by test_automation
staying green in Stage 1) and the per-track download mechanics.

test_manual_download.py rewritten to characterize the new behavior (engine
dispatch via the executor, parallel, placeholder reuse, album-context). Full
wishlist suite green (131); wishlist + automation = 392 passed.
2026-05-29 17:43:40 -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 Wishlist: only engage album-bundle when multiple tracks from same album (PR 1/4) 2026-05-27 13:42:04 -07: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 Make wishlist respect configured providers 2026-04-30 07:41:22 +03: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