mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-06-10 02:00:32 +08:00
perf: optimize media recognition internals
This commit is contained in:
107
tests/test_media_recognize_modules.py
Normal file
107
tests/test_media_recognize_modules.py
Normal file
@@ -0,0 +1,107 @@
|
||||
import asyncio
|
||||
from unittest import TestCase
|
||||
from unittest.mock import Mock
|
||||
|
||||
from app.core.context import MediaInfo
|
||||
from app.core.meta import MetaBase
|
||||
from app.modules.douban import DoubanModule
|
||||
from app.modules.themoviedb import TheMovieDbModule
|
||||
from app.schemas.types import MediaType
|
||||
|
||||
|
||||
class MediaRecognizeModulesTest(TestCase):
|
||||
def test_tmdb_cache_false_skips_cache_lookup(self):
|
||||
"""cache=False 时应跳过缓存读取,但仍按正常流程查询 TMDB。"""
|
||||
module = TheMovieDbModule()
|
||||
meta = MetaBase("测试电影")
|
||||
meta.name = "测试电影"
|
||||
meta.type = MediaType.MOVIE
|
||||
module.cache = Mock()
|
||||
module.tmdb = Mock()
|
||||
module.tmdb.get_info.return_value = {
|
||||
"id": 100,
|
||||
"media_type": MediaType.MOVIE,
|
||||
"title": "测试电影",
|
||||
"genres": [],
|
||||
}
|
||||
module.category = Mock()
|
||||
module.category.get_movie_category.return_value = None
|
||||
|
||||
result = module.recognize_media(meta=meta, tmdbid=100, cache=False)
|
||||
|
||||
self.assertIsInstance(result, MediaInfo)
|
||||
self.assertEqual(result.tmdb_id, 100)
|
||||
module.cache.get.assert_not_called()
|
||||
module.cache.update.assert_called_once()
|
||||
|
||||
def test_async_tmdb_cache_false_skips_cache_lookup(self):
|
||||
"""异步 cache=False 时也应跳过缓存读取。"""
|
||||
module = TheMovieDbModule()
|
||||
meta = MetaBase("测试电影")
|
||||
meta.name = "测试电影"
|
||||
meta.type = MediaType.MOVIE
|
||||
module.cache = Mock()
|
||||
module.tmdb = Mock()
|
||||
|
||||
async def _async_get_info(**kwargs):
|
||||
return {
|
||||
"id": 101,
|
||||
"media_type": MediaType.MOVIE,
|
||||
"title": "测试电影",
|
||||
"genres": [],
|
||||
}
|
||||
|
||||
module.tmdb.async_get_info = _async_get_info
|
||||
module.category = Mock()
|
||||
module.category.get_movie_category.return_value = None
|
||||
|
||||
result = asyncio.run(module.async_recognize_media(meta=meta, tmdbid=101, cache=False))
|
||||
|
||||
self.assertIsInstance(result, MediaInfo)
|
||||
self.assertEqual(result.tmdb_id, 101)
|
||||
module.cache.get.assert_not_called()
|
||||
module.cache.update.assert_called_once()
|
||||
|
||||
def test_douban_prepare_search_names_deduplicates_simplified_name(self):
|
||||
"""豆瓣候选名称应保留顺序,并去掉繁简转换后的重复项。"""
|
||||
meta = MetaBase("流浪地球")
|
||||
meta.cn_name = "流浪地球"
|
||||
meta.en_name = "The Wandering Earth"
|
||||
|
||||
self.assertEqual(
|
||||
DoubanModule._prepare_search_names(meta),
|
||||
["流浪地球", "The Wandering Earth"],
|
||||
)
|
||||
|
||||
def test_douban_search_result_helper_preserves_season_title_rule(self):
|
||||
"""豆瓣搜索结果 helper 应保留电视剧标题追加季号的旧逻辑。"""
|
||||
meta = MetaBase("测试剧")
|
||||
meta.name = "测试剧"
|
||||
meta.type = MediaType.TV
|
||||
meta.begin_season = 2
|
||||
items = [
|
||||
{
|
||||
"type_name": MediaType.TV.value,
|
||||
"target": {
|
||||
"id": "200",
|
||||
"title": "测试剧",
|
||||
"type": "tv",
|
||||
"year": "2024",
|
||||
},
|
||||
},
|
||||
{
|
||||
"type_name": MediaType.MOVIE.value,
|
||||
"target": {
|
||||
"id": "201",
|
||||
"title": "测试剧 电影版",
|
||||
"type": "movie",
|
||||
"year": "2024",
|
||||
},
|
||||
},
|
||||
]
|
||||
|
||||
result = DoubanModule._build_search_medias_result(meta, items)
|
||||
|
||||
self.assertEqual(len(result), 1)
|
||||
self.assertEqual(result[0].title, "测试剧 第二季")
|
||||
self.assertEqual(result[0].season, 2)
|
||||
Reference in New Issue
Block a user