mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-05-27 23:16:49 +00:00
108 lines
3.7 KiB
Python
108 lines
3.7 KiB
Python
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)
|