Files
MoviePilot/tests/test_douban_recognition.py

81 lines
2.6 KiB
Python

import asyncio
from unittest.mock import Mock
from unittest.mock import AsyncMock
from app.core.meta import MetaBase
from app.modules.douban import DoubanModule
from app.schemas.types import MediaType
def test_douban_recognize_does_not_keep_dedicated_mapping_cache():
"""豆瓣识别应每次执行匹配,不再保留专用标题映射缓存。"""
module = DoubanModule()
meta = MetaBase("测试电影")
meta.name = "测试电影"
meta.type = MediaType.MOVIE
meta.year = "2024"
match_doubaninfo = Mock(return_value={"id": "200"})
douban_info = Mock(return_value={
"id": "200",
"title": "测试电影",
"type": "movie",
"year": "2024",
})
first_result = module._recognize_media_core(
meta=meta,
source="douban",
match_doubaninfo_func=match_doubaninfo,
douban_info_func=douban_info,
)
second_result = module._recognize_media_core(
meta=meta,
source="douban",
match_doubaninfo_func=match_doubaninfo,
douban_info_func=douban_info,
)
assert first_result.douban_id == "200"
assert second_result.douban_id == "200"
assert match_doubaninfo.call_count == 2
assert douban_info.call_count == 2
def test_async_douban_recognize_does_not_keep_dedicated_mapping_cache():
"""异步豆瓣识别也应每次执行匹配,不使用专用标题映射缓存。"""
module = DoubanModule()
meta = MetaBase("测试剧集")
meta.name = "测试剧集"
meta.type = MediaType.TV
meta.year = "2024"
match_doubaninfo = AsyncMock(return_value={"id": "201"})
douban_info = AsyncMock(return_value={
"id": "201",
"title": "测试剧集",
"type": "tv",
"year": "2024",
})
async def recognize_twice():
"""连续执行两次异步豆瓣识别。"""
first_result = await module._async_recognize_media_core(
meta=meta,
source="douban",
async_match_doubaninfo_func=match_doubaninfo,
async_douban_info_func=douban_info,
)
second_result = await module._async_recognize_media_core(
meta=meta,
source="douban",
async_match_doubaninfo_func=match_doubaninfo,
async_douban_info_func=douban_info,
)
return first_result, second_result
first_result, second_result = asyncio.run(recognize_twice())
assert first_result.douban_id == "201"
assert second_result.douban_id == "201"
assert match_doubaninfo.await_count == 2
assert douban_info.await_count == 2