soulsync/tests/downloads
BoulderBadgeDad 56bdcee434 Fix: rejected slskd download hung the task at 'downloading' forever (#836)
A wishlist track (or tracks in an album) that slskd accepted then REJECTED would
sit at "DOWNLOADING... 0%" indefinitely, spam an ERROR every status poll
("…Completed, Rejected - letting monitor handle retry"), and — for albums —
block the whole batch from ever completing.

Root defect: the status formatter's non-manual error branch keeps the task
'downloading' and trusts the retry monitor to resolve it, with NO backstop. When
the monitor can't make progress (a rejected transfer with no other source), the
task is stuck forever.

Backstop: measure how long the ERROR state has persisted (keyed off the task's
last status transition, so a slow-but-healthy transfer is never failed, and each
monitor-retry episode gets a fresh window). Once it exceeds the monitor's retry
window (60s, vs the monitor's ~15s) with no resolution, mark the task failed and
fire the worker-freeing completion callback so the batch can finish. Also log the
error ONCE per episode instead of every 2s poll. The healthy path is untouched —
a working retry transitions the task before the grace, so this never fires.
Manual picks still fail immediately (unchanged).

Tests: rejected-within-grace stays downloading; rejected-beyond-grace fails +
schedules completion; manual pick fails immediately. 45 status tests pass.
2026-06-10 18:16:22 -07:00
..
__init__.py
test_album_bundle_staging_sweep.py
test_album_serialize_drain.py Wishlist: serialize album-bundle downloads so they stop flooding the search pool (Sokhi #740) 2026-06-09 10:06:53 -07:00
test_background_download_worker.py
test_deezer_pinning.py
test_download_engine.py
test_download_orchestrator.py
test_downloads_cancel.py
test_downloads_candidates.py #797: stop AcoustID quarantining correct non-English-artist downloads 2026-06-05 16:02:01 -07:00
test_downloads_cleanup.py
test_downloads_history.py
test_downloads_lifecycle.py
test_downloads_master.py
test_downloads_post_processing.py
test_downloads_staging.py
test_downloads_status.py Fix: rejected slskd download hung the task at 'downloading' forever (#836) 2026-06-10 18:16:22 -07:00
test_downloads_task_worker.py Downloads: lazy multi-query quarantine retry — exhaust all queries per source 2026-06-06 16:44:14 +02:00
test_downloads_validation.py
test_file_finder.py Fix: a '/' in a song title was treated as a path separator (#835) 2026-06-10 16:29:09 -07:00
test_hifi_pinning.py
test_lidarr_pinning.py
test_playlist_folder_exists.py Fix organize-by-playlist downloads: library entries, wishlist, and stale Spotify cache 2026-06-03 10:26:32 +02:00
test_qobuz_pinning.py
test_rate_limit_policy.py
test_soulseek_pinning.py
test_soundcloud_pinning.py
test_tidal_pinning.py
test_track_detail.py Downloads: add per-track detail endpoint for the track-detail modal 2026-05-31 20:18:35 -07:00
test_track_link.py Manual download search: paste a Tidal/Qobuz track link to grab the exact version (#813) 2026-06-08 15:03:54 -07:00
test_track_metadata_backfill.py
test_wishlist_aggregator.py
test_youtube_pinning.py