返回 Social Auto Upload
test_bilibili_runtime.py
根目录 / tests / test_bilibili_runtime.py
1 import unittest
2 from pathlib import Path
3 from unittest.mock import Mock, patch
4
5 from uploader.bilibili_uploader.runtime import (
6 build_biliup_runtime_path,
7 ensure_biliup_binary,
8 run_biliup_command,
9 )
10
11
12 class BiliupRuntimeTests(unittest.TestCase):
13 def test_build_biliup_runtime_path_returns_platform_path(self):
14 path = build_biliup_runtime_path("Windows")
15 self.assertTrue(str(path).endswith("biliup.exe"))
16
17 @patch("uploader.bilibili_uploader.runtime.fetch_latest_release")
18 def test_ensure_biliup_binary_downloads_when_missing(self, mock_release):
19 mock_release.return_value = {
20 "tag_name": "v1.0.0",
21 "asset_url": "https://example.invalid/biliup.exe",
22 "asset_name": "biliup.exe",
23 }
24 with patch("uploader.bilibili_uploader.runtime.read_local_biliup_version", return_value=None):
25 with patch("pathlib.Path.exists", return_value=False):
26 with patch("uploader.bilibili_uploader.runtime.download_biliup_asset") as mock_download:
27 with patch("uploader.bilibili_uploader.runtime.write_local_biliup_version") as mock_write_version:
28 ensure_biliup_binary(force_check=True)
29 mock_download.assert_called_once()
30 mock_write_version.assert_called_once_with("v1.0.0")
31
32 @patch("uploader.bilibili_uploader.runtime.fetch_latest_release")
33 def test_ensure_biliup_binary_reuses_local_when_up_to_date(self, mock_release):
34 mock_release.return_value = {
35 "tag_name": "v1.0.0",
36 "asset_url": "https://example.invalid/biliup.exe",
37 "asset_name": "biliup.exe",
38 }
39 with patch("uploader.bilibili_uploader.runtime.read_local_biliup_version", return_value="v1.0.0"):
40 with patch("pathlib.Path.exists", return_value=True):
41 with patch("uploader.bilibili_uploader.runtime.download_biliup_asset") as mock_download:
42 with patch("uploader.bilibili_uploader.runtime.write_local_biliup_version") as mock_write_version:
43 ensure_biliup_binary(force_check=True)
44 mock_download.assert_not_called()
45 mock_write_version.assert_not_called()
46
47 @patch("uploader.bilibili_uploader.runtime.subprocess.run")
48 @patch("uploader.bilibili_uploader.runtime.ensure_biliup_binary")
49 def test_run_biliup_command_returns_completed_process(self, mock_ensure_binary, mock_run):
50 mock_ensure_binary.return_value = build_biliup_runtime_path("Windows")
51 mock_run.return_value = Mock(returncode=0, stdout="ok", stderr="")
52 result = run_biliup_command(["login"])
53 self.assertEqual(result.returncode, 0)
54
55 @patch("uploader.bilibili_uploader.runtime.subprocess.run")
56 @patch("uploader.bilibili_uploader.runtime.ensure_biliup_binary")
57 def test_run_biliup_command_login_uses_interactive_stdio(self, mock_ensure_binary, mock_run):
58 mock_ensure_binary.return_value = Path("C:/mock/biliup.exe")
59 mock_run.return_value = Mock(returncode=0, stdout="", stderr="")
60 run_biliup_command(["login"], interactive=True)
61 _, kwargs = mock_run.call_args
62 self.assertNotIn("capture_output", kwargs)
63
63 lines PYTHON