Files
MoviePilot/tests/test_fanart_module.py
2026-08-24 00:37:09 +08:00

55 lines
1.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""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())