Files
MoviePilot/tests/test_local_setup_frontend_version.py
jxxghp 52e15b51db fix(cli): align frontend download with version.py
Use FRONTEND_VERSION from version.py as the default frontend release target so local setup and auto-update install the matching frontend bundle.

Closes #5693
2026-05-08 15:49:32 +08:00

75 lines
2.5 KiB
Python

from __future__ import annotations
import importlib.util
import tempfile
import unittest
import uuid
from pathlib import Path
from unittest.mock import patch
MODULE_PATH = Path(__file__).resolve().parents[1] / "scripts" / "local_setup.py"
def load_local_setup_module():
module_name = f"moviepilot_local_setup_frontend_{uuid.uuid4().hex}"
spec = importlib.util.spec_from_file_location(module_name, MODULE_PATH)
module = importlib.util.module_from_spec(spec)
assert spec and spec.loader
spec.loader.exec_module(module)
return module
class LocalSetupFrontendVersionTests(unittest.TestCase):
def test_repo_frontend_version_reads_version_file(self):
module = load_local_setup_module()
with tempfile.TemporaryDirectory() as temp_dir:
root = Path(temp_dir)
(root / "version.py").write_text(
"APP_VERSION = 'v0.0.1'\nFRONTEND_VERSION = 'v9.9.9'\n",
encoding="utf-8",
)
with patch.object(module, "ROOT", root):
self.assertEqual(module._repo_frontend_version(), "v9.9.9")
def test_resolve_frontend_release_uses_repo_frontend_version_by_default(self):
module = load_local_setup_module()
release = {
"tag_name": "v9.9.9",
"assets": [
{
"name": "dist.zip",
"browser_download_url": "https://example.com/dist.zip",
}
],
}
with patch.object(module, "_repo_frontend_version", return_value="v9.9.9"), patch.object(
module, "fetch_json", return_value=release
) as fetch_mock:
tag_name, download_url = module._resolve_frontend_release(None)
fetch_mock.assert_called_once_with(
module.FRONTEND_TAG_API.format(tag="v9.9.9")
)
self.assertEqual(tag_name, "v9.9.9")
self.assertEqual(download_url, "https://example.com/dist.zip")
def test_parser_leaves_frontend_version_empty_until_runtime_resolution(self):
module = load_local_setup_module()
parser = module.build_parser()
install_args = parser.parse_args(["install-frontend"])
setup_args = parser.parse_args(["setup"])
update_args = parser.parse_args(["update", "frontend"])
self.assertIsNone(install_args.version)
self.assertIsNone(setup_args.frontend_version)
self.assertIsNone(update_args.frontend_version)
if __name__ == "__main__":
unittest.main()