mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-11-06 07:09:09 +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())
|