Track downloaded episodes for auto-download

This commit is contained in:
Dymas
2026-05-25 10:11:43 +02:00
parent baea85e24c
commit e48bc21944
6 changed files with 167 additions and 22 deletions
+45 -4
View File
@@ -989,13 +989,14 @@ class WatchlistCompletionTests(unittest.TestCase):
with mock.patch.object(APP.WATCHLIST, "schedule_refresh", side_effect=lambda show_id, source="manual": APP.WATCHLIST.get(show_id)), mock.patch.object(
APP.WATCHLIST, "refresh", side_effect=AssertionError("mark_downloaded should not refresh synchronously")
):
item = APP.WATCHLIST.mark_downloaded("show-9", title="Queue Show")
), mock.patch.object(APP, "episode_list", return_value=["1", "2", "3"]):
item = APP.WATCHLIST.mark_downloaded("show-9", title="Queue Show", mode="dub", episodes="2-3")
self.assertEqual(item["category"], "finished")
self.assertTrue(item["downloaded"])
self.assertEqual(item["finished_badge"], "downloaded")
self.assertEqual(item["status"], "queued")
self.assertEqual(item["downloaded_dub_episodes"], ["2", "3"])
def test_mark_downloaded_creates_missing_show_in_finished_category(self):
with mock.patch.object(APP.WATCHLIST, "schedule_refresh", side_effect=lambda show_id, source="manual": APP.WATCHLIST.get(show_id)), mock.patch.object(
@@ -1069,7 +1070,7 @@ class WatchlistCompletionTests(unittest.TestCase):
) as mark_downloaded:
APP.sync_downloaded_job_to_watchlist(job)
mark_downloaded.assert_called_once_with("show-42", title="Queue Show")
mark_downloaded.assert_called_once_with("show-42", title="Queue Show", mode="sub", episodes=None)
def test_prepare_download_job_persists_resolved_show_id(self):
job = {"query": "Queue Show", "mode": "sub", "result_index": 1, "title": "Queue Show", "show_id": ""}
@@ -1511,7 +1512,7 @@ class AutoDownloadQueueTests(unittest.TestCase):
"title": "Queue Show",
"category": "watching",
"previous_last_checked": "2026-05-25T10:00:00+00:00",
"had_new_episodes": True,
"had_new_episodes": False,
"previous_dub_count": 10,
"previous_sub_count": 10,
"dub_episode_values": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12"],
@@ -1520,6 +1521,8 @@ class AutoDownloadQueueTests(unittest.TestCase):
"auto_download_quality": "best",
"auto_download_name": 'Queue Show: Alt/Name',
"auto_download_series": "3",
"downloaded_dub_episodes": ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"],
"downloaded_sub_episodes": [],
}
download_queue = mock.Mock()
download_queue.covered_episodes.return_value = {"11"}
@@ -1559,6 +1562,44 @@ class AutoDownloadQueueTests(unittest.TestCase):
}
)
def test_queue_watchlist_auto_download_can_queue_existing_backlog_after_initial_seed_refresh(self):
item = {
"show_id": "show-99",
"title": "Backlog Show",
"category": "watching",
"previous_last_checked": "2026-05-25T10:00:00+00:00",
"had_new_episodes": False,
"dub_episode_values": ["1", "2", "3"],
"sub_episode_values": [],
"auto_download_mode": "dub",
"auto_download_quality": "best",
"auto_download_name": "Backlog Show",
"auto_download_series": "1",
"downloaded_dub_episodes": [],
"downloaded_sub_episodes": [],
}
download_queue = mock.Mock()
download_queue.covered_episodes.return_value = set()
download_queue.add.return_value = {"id": "job-backlog", "episodes": "1-3"}
runtime = {
"config": {
"auto_download_enabled": True,
"auto_download_mode": "dub",
"auto_download_quality": "best",
"download_dir": "/tmp/downloads",
},
"download_queue": download_queue,
}
with mock.patch.object(APP, "ensure_runtime", return_value=runtime), mock.patch.object(
APP,
"search_anime",
return_value=[{"id": "show-99", "title": "Backlog Show", "query": "Backlog Show", "index": 1}],
):
result = APP.queue_watchlist_auto_download(item, refresh_source="manual")
self.assertTrue(result["queued"])
self.assertEqual(result["episodes"], ["1-3"])
class StartupBehaviorTests(unittest.TestCase):
def test_main_does_not_eagerly_initialize_runtime(self):