Add provider update startup check

This commit is contained in:
Dymas
2026-08-11 22:14:07 +02:00
parent d13b7da5b2
commit 7f5088f70d
5 changed files with 317 additions and 1 deletions
+55 -1
View File
@@ -24,6 +24,7 @@ import queue_jobs
import http_handler
import provider_bridge
import provider_downloader
import provider_updates
os.environ.setdefault("KAIZOKU_DISABLE_WORKER", "1")
os.environ["KAIZOKU_STATE_ROOT"] = TEMP_STATE.name
@@ -3231,11 +3232,14 @@ class StartupBehaviorTests(unittest.TestCase):
with mock.patch.object(APP, "initialize_runtime") as initialize_runtime, mock.patch.object(
APP, "ThreadingHTTPServer", return_value=server
), mock.patch.object(APP, "shutdown_runtime") as shutdown_runtime:
), mock.patch.object(APP, "shutdown_runtime") as shutdown_runtime, mock.patch.object(
APP, "start_provider_update_check"
) as start_provider_update_check:
shutdown_runtime.return_value = True
APP.main()
initialize_runtime.assert_not_called()
start_provider_update_check.assert_called_once()
shutdown_runtime.assert_called_once_with(wait=True, cancel_active_downloads=True)
server.serve_forever.assert_called_once()
server.server_close.assert_called_once()
@@ -3344,6 +3348,56 @@ class StartupBehaviorTests(unittest.TestCase):
APP.initialize_runtime(start_workers=False)
class ProviderUpdateTests(unittest.TestCase):
def test_provider_update_check_reports_up_to_date_files(self):
with tempfile.TemporaryDirectory() as tmp:
root = Path(tmp)
provider_file = root / "Anime" / "pahe.js"
provider_file.parent.mkdir(parents=True)
provider_file.write_text("module.exports = {};\n", encoding="utf-8")
with mock.patch.object(
provider_updates, "upstream_provider_js_paths", return_value=({"Anime/pahe.js"}, "tree-sha")
), mock.patch.object(provider_updates, "fetch_bytes", return_value=provider_file.read_bytes()):
status = provider_updates.check_provider_updates(local_root=root)
self.assertEqual(status["status"], "up_to_date")
self.assertEqual(status["checked_files"], 1)
self.assertEqual(status["updated_files"], [])
self.assertEqual(status["upstream_tree_sha"], "tree-sha")
def test_provider_update_check_reports_changed_files(self):
with tempfile.TemporaryDirectory() as tmp:
root = Path(tmp)
provider_file = root / "Anime" / "pahe.js"
provider_file.parent.mkdir(parents=True)
provider_file.write_text("local version\n", encoding="utf-8")
with mock.patch.object(
provider_updates, "upstream_provider_js_paths", return_value=({"Anime/pahe.js"}, "tree-sha")
), mock.patch.object(provider_updates, "fetch_bytes", return_value=b"upstream version\n"):
status = provider_updates.check_provider_updates(local_root=root)
self.assertEqual(status["status"], "updates_available")
self.assertEqual(status["checked_files"], 1)
self.assertEqual([item["path"] for item in status["updated_files"]], ["Anime/pahe.js"])
def test_provider_update_api_returns_current_status(self):
status = provider_updates.default_status("updates_available", "Providers changed.")
status["checked_files"] = 3
status["updated_files"] = [{"path": "Anime/pahe.js"}]
APP.set_provider_update_status(status)
handler = DummyHandler("/api/provider-updates")
handler.command = "GET"
APP.Handler.do_GET(handler)
self.assertEqual(handler.json_status, HTTPStatus.OK)
self.assertEqual(handler.json_payload["status"], "updates_available")
self.assertEqual(handler.json_payload["checked_files"], 3)
self.assertEqual(handler.json_payload["updated_files"][0]["path"], "Anime/pahe.js")
class HandlerRouteTests(unittest.TestCase):
def test_runtime_backed_route_respects_worker_disable_flag(self):
handler = DummyHandler("/api/watchlist/refresh-status")