mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-08-29 20:17:13 +08:00
70 lines
2.0 KiB
Python
70 lines
2.0 KiB
Python
"""搜索状态应用服务测试。"""
|
|
|
|
import asyncio
|
|
|
|
from app.application.search.state import SearchStateService
|
|
from app.schemas.types import MediaSource, MediaType
|
|
|
|
|
|
def test_search_state_normalizes_identity_and_preserves_cache_contract():
|
|
"""搜索参数保存后应保留媒体身份和前端原有字段。"""
|
|
saved = []
|
|
service = SearchStateService(
|
|
save_cache=lambda value, key: saved.append((key, value)),
|
|
load_cache=lambda _key: saved[-1][1],
|
|
async_save_cache=lambda value, key: None,
|
|
async_load_cache=lambda _key: None,
|
|
params_key="params",
|
|
result_key="results",
|
|
subtitle_result_key="subtitles",
|
|
)
|
|
|
|
service.save_params(
|
|
keyword="tmdb:123",
|
|
media_source=None,
|
|
media_id=None,
|
|
mtype=MediaType.MOVIE,
|
|
sites=[1, 2],
|
|
)
|
|
|
|
assert saved == [("params", {
|
|
"keyword": "",
|
|
"media_source": str(MediaSource.TMDB),
|
|
"media_id": "123",
|
|
"type": MediaType.MOVIE.value,
|
|
"area": "title",
|
|
"title": "",
|
|
"year": "",
|
|
"season": "",
|
|
"episode": "",
|
|
"sites": "1,2",
|
|
"result_type": "torrent",
|
|
})]
|
|
assert service.load_params() == saved[0][1]
|
|
|
|
|
|
def test_search_state_async_paths_use_injected_ports():
|
|
"""异步保存和读取必须只使用注入的缓存端口。"""
|
|
saved = {}
|
|
|
|
async def save(value, key):
|
|
"""记录异步缓存写入。"""
|
|
saved[key] = value
|
|
|
|
async def load(key):
|
|
"""返回异步缓存内容。"""
|
|
return saved.get(key)
|
|
|
|
service = SearchStateService(
|
|
save_cache=lambda *_args: None,
|
|
load_cache=lambda _key: None,
|
|
async_save_cache=save,
|
|
async_load_cache=load,
|
|
params_key="params",
|
|
result_key="results",
|
|
subtitle_result_key="subtitles",
|
|
)
|
|
|
|
asyncio.run(service.async_save_params(keyword="hello"))
|
|
assert asyncio.run(service.async_load_params())["keyword"] == "hello"
|