mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-05-11 18:10:15 +08:00
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
75 lines
2.5 KiB
Python
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()
|