Files
MoviePilot/tests/test_fanart_module.py
T

55 lines
1.8 KiB
Python

"""Fanart 模块缓存清理生命周期测试。"""
import asyncio
from types import SimpleNamespace
from unittest.mock import Mock, patch
from app.modules.fanart import FanartModule
from app.runtime.tasks import TaskRegistry
def test_fanart_clear_cache_registers_async_cleanup_in_running_loop() -> None:
"""同步清缓存入口应复用宿主 owner,并保持立即返回的兼容约定。"""
async def scenario() -> None:
"""验证异步缓存清理完成前始终由宿主登记器持有。"""
registry = TaskRegistry()
release = asyncio.Event()
async def clear_async_cache() -> None:
"""等待测试释放,以便观察登记中的清理任务。"""
await release.wait()
sync_cache = SimpleNamespace(cache_clear=Mock())
async_cache = SimpleNamespace(
cache_clear=Mock(side_effect=lambda: clear_async_cache())
)
module = FanartModule()
with (
patch.object(
FanartModule,
"_FanartModule__request_fanart",
sync_cache,
),
patch.object(
FanartModule,
"_FanartModule__async_request_fanart",
async_cache,
),
patch("app.modules.fanart.get_task_registry", return_value=registry),
):
assert module.clear_cache() is None
assert [record.owner for record in registry.records] == [
"module.fanart.cache_clear"
]
release.set()
await registry.records[0].task
await asyncio.sleep(0)
sync_cache.cache_clear.assert_called_once_with()
async_cache.cache_clear.assert_called_once_with()
assert registry.records == ()
asyncio.run(scenario())