mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-08-29 03:56:43 +08:00
55 lines
1.8 KiB
Python
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())
|