Files
MoviePilot/tests/test_progress_helpers.py

75 lines
2.4 KiB
Python

"""
同步与异步进度帮助类的快照、更新和本地化契约。
"""
import asyncio
from unittest.mock import AsyncMock, Mock
from app.runtime.progress import AsyncProgressHelper, ProgressHelper
def test_progress_helper_lifecycle_localizes_snapshot_fields() -> None:
"""
同步进度应支持更新、结束、附加数据和本地化字段,并安全处理空快照。
"""
missing = ProgressHelper("test-progress-missing")
missing._progress.get = Mock(return_value=None)
missing.start()
missing.end()
missing.update()
assert missing.get() is None
helper = ProgressHelper("test-progress-sync")
helper.start()
helper.update(
value=150,
text="处理中",
data={"error": "错误", "message": "消息"},
)
detail = helper.get(locale="zh-CN")
assert detail is not None
assert detail["enable"] is True
assert detail["value"] == 100
assert detail["text"] == "处理中"
assert detail["data"]["error_i18n"]
assert detail["data"]["message_i18n"]
empty_data = ProgressHelper("test-progress-sync-end")
empty_data.start()
empty_data.end(data={"finished": True}, value=None)
assert empty_data.get()["data"]["finished"] is True
def test_async_progress_helper_lifecycle_localizes_snapshot_fields() -> None:
"""
异步进度应覆盖空快照终态、边界值更新和附加数据本地化。
"""
async def scenario() -> None:
"""
在独立键空间中执行异步进度的完整生命周期。
"""
missing = AsyncProgressHelper("test-progress-async-missing")
missing._progress.get = AsyncMock(return_value=None)
await missing.start()
await missing.end(data={"error": "错误"}, value=None)
await missing.update()
assert await missing.get() is None
helper = AsyncProgressHelper("test-progress-async")
await helper.start()
await helper.update(
value=-10,
text="异步处理中",
data={"error": "错误", "message": "消息"},
)
detail = await helper.get(locale="zh-CN")
assert detail is not None
assert detail["enable"] is True
assert detail["value"] == 0
assert detail["text"] == "异步处理中"
assert detail["data"]["error_i18n"]
assert detail["data"]["message_i18n"]
asyncio.run(scenario())