Add TV and movie watchlist download tags
This commit is contained in:
+59
-3
@@ -308,6 +308,7 @@ class QueueApiTests(unittest.TestCase):
|
||||
"show_id": "show-1",
|
||||
"title": "Structured Show",
|
||||
"anime_name": "Structured Show",
|
||||
"media_type": "movie",
|
||||
"season": "1",
|
||||
"query": "Structured Show",
|
||||
"result_index": 1,
|
||||
@@ -329,11 +330,39 @@ class QueueApiTests(unittest.TestCase):
|
||||
row = conn.execute("SELECT * FROM jobs WHERE id = ?", (job["id"],)).fetchone()
|
||||
|
||||
self.assertEqual(row["title"], "Structured Show")
|
||||
self.assertEqual(row["media_type"], "movie")
|
||||
self.assertEqual(row["log_payload"], '["line 1", "line 2"]')
|
||||
self.assertEqual(APP.json.loads(row["payload"]), {"custom_flag": True})
|
||||
restored = queue._job_from_row(row)
|
||||
self.assertEqual(restored["log"], ["line 1", "line 2"])
|
||||
self.assertTrue(restored["custom_flag"])
|
||||
self.assertEqual(restored["media_type"], "movie")
|
||||
|
||||
def test_movie_finalizer_uses_movie_folder_and_single_file_name(self):
|
||||
job = APP.app_support.build_job(
|
||||
{
|
||||
"query": "Movie Show",
|
||||
"title": "Movie Show",
|
||||
"anime_name": "Movie Show",
|
||||
"media_type": "movie",
|
||||
"mode": "sub",
|
||||
"quality": "best",
|
||||
"episodes": "1",
|
||||
"download_dir": "/tmp/example",
|
||||
"season": "1",
|
||||
},
|
||||
{"mode": "sub", "quality": "best", "download_dir": "/tmp/example"},
|
||||
)
|
||||
staging_dir = APP.app_support.job_staging_dir(job)
|
||||
staging_dir.mkdir(parents=True, exist_ok=True)
|
||||
source = staging_dir / "Movie Show Episode 1.mp4"
|
||||
source.write_bytes(b"movie-bytes")
|
||||
|
||||
moved = APP.app_support.finalize_library_files(job)
|
||||
|
||||
self.assertEqual(moved, ["/tmp/example/movie/Movie Show/Movie Show.mp4"])
|
||||
self.assertFalse(source.exists())
|
||||
self.assertTrue(Path(moved[0]).exists())
|
||||
|
||||
def test_shutdown_wait_cancels_active_process_for_deterministic_teardown(self):
|
||||
queue = object.__new__(APP.DownloadQueue)
|
||||
@@ -764,6 +793,7 @@ class ThumbnailEventRecoveryTests(unittest.TestCase):
|
||||
"animeschedule_title": None,
|
||||
"anidb_aid": None,
|
||||
"anidb_title": None,
|
||||
"media_type": "tv",
|
||||
"thumbnail_path": None,
|
||||
"thumbnail_checked_at": None,
|
||||
}
|
||||
@@ -1038,6 +1068,15 @@ class WatchlistCompletionTests(unittest.TestCase):
|
||||
|
||||
self.assertEqual(result["item"]["auto_download_series"], "4")
|
||||
|
||||
def test_add_uses_requested_media_type(self):
|
||||
with mock.patch.object(APP.WATCHLIST, "schedule_refresh", side_effect=lambda show_id, source="manual": APP.WATCHLIST.get(show_id)):
|
||||
result = APP.WATCHLIST.add(
|
||||
{"show_id": "show-24", "title": "Queued Movie", "category": "watching", "media_type": "movie"}
|
||||
)
|
||||
|
||||
self.assertEqual(result["item"]["media_type"], "movie")
|
||||
self.assertEqual(result["item"]["media_type_label"], "Movie")
|
||||
|
||||
def test_refresh_uses_bounded_request_timeout(self):
|
||||
self.seed_watchlist_item(show_id="show-1", title="Example Show")
|
||||
snapshot = {
|
||||
@@ -1093,7 +1132,13 @@ class WatchlistCompletionTests(unittest.TestCase):
|
||||
self.assertEqual(prepared["title"], "Queue Show Season 2")
|
||||
|
||||
def test_download_watchlist_item_queues_full_episode_range_for_selected_mode(self):
|
||||
item = {"show_id": "show-42", "title": "Queue Show"}
|
||||
item = {
|
||||
"show_id": "show-42",
|
||||
"title": "Queue Show",
|
||||
"auto_download_name": "Queue Show Library",
|
||||
"auto_download_series": "4",
|
||||
"media_type": "movie",
|
||||
}
|
||||
job = {"id": "job-1", "show_id": "show-42", "episodes": "1-12", "mode": "dub"}
|
||||
with mock.patch.object(APP, "ensure_runtime", return_value={"watchlist": APP.WATCHLIST, "download_queue": mock.Mock(), "config": {"quality": "best", "download_dir": "/tmp/downloads"}}), mock.patch.object(
|
||||
APP.WATCHLIST, "get", return_value=item
|
||||
@@ -1109,8 +1154,9 @@ class WatchlistCompletionTests(unittest.TestCase):
|
||||
"show_id": "show-42",
|
||||
"query": "Queue Show",
|
||||
"title": "Queue Show",
|
||||
"anime_name": "Queue Show",
|
||||
"season": "1",
|
||||
"anime_name": "Queue Show Library",
|
||||
"media_type": "movie",
|
||||
"season": "4",
|
||||
"index": 3,
|
||||
"mode": "dub",
|
||||
"quality": "best",
|
||||
@@ -1555,6 +1601,7 @@ class AutoDownloadQueueTests(unittest.TestCase):
|
||||
"query": "Queue Show",
|
||||
"title": "Queue Show",
|
||||
"anime_name": "Queue Show- Alt-Name",
|
||||
"media_type": "tv",
|
||||
"season": "3",
|
||||
"index": 2,
|
||||
"mode": "dub",
|
||||
@@ -1928,6 +1975,15 @@ class HandlerRouteTests(unittest.TestCase):
|
||||
self.assertEqual(handler.json_payload, payload)
|
||||
self.assertEqual(handler.json_status, HTTPStatus.OK)
|
||||
|
||||
def test_watchlist_media_type_post_returns_updated_item(self):
|
||||
body = b'{"show_id":"show-1","media_type":"movie"}'
|
||||
handler = DummyHandler("/api/watchlist/update-media-type", body=body, content_length=len(body))
|
||||
payload = {"message": "Saved Show 1 as Movie.", "item": {"show_id": "show-1", "media_type": "movie"}}
|
||||
handler.handler_context = mock.Mock(update_watchlist_media_type=mock.Mock(return_value=payload))
|
||||
APP.Handler.do_POST(handler)
|
||||
self.assertEqual(handler.json_payload, payload)
|
||||
self.assertEqual(handler.json_status, HTTPStatus.OK)
|
||||
|
||||
def test_generic_handler_exception_skips_traceback_when_debug_disabled(self):
|
||||
handler = DummyHandler("/api/config")
|
||||
with mock.patch.object(http_handler, "debug_enabled", return_value=False), mock.patch.object(
|
||||
|
||||
Reference in New Issue
Block a user