fix(search): preserve cached resource contexts

This commit is contained in:
jxxghp
2026-09-05 17:04:26 +08:00
parent 7251400237
commit f2820e3553
2 changed files with 50 additions and 2 deletions
+2 -2
View File
@@ -5,14 +5,14 @@ from typing import Literal, Union
from pydantic import BaseModel, Field
from app.schemas.common import JsonData
from app.schemas.context import SubtitleInfo, TorrentInfo
from app.schemas.context import Context, SubtitleInfo
class SearchLastContextData(BaseModel):
"""上一次搜索的请求参数与结果。"""
params: dict[str, JsonData] = Field(default_factory=dict)
results: list[Union[TorrentInfo, SubtitleInfo]] = Field(default_factory=list)
results: list[Union[Context, SubtitleInfo]] = Field(default_factory=list)
class SearchRecommendStatusData(BaseModel):
+48
View File
@@ -0,0 +1,48 @@
"""搜索接口响应模型测试。"""
from app.schemas.context import Context, MetaInfo, SubtitleInfo, TorrentInfo
from app.schemas.response import Response
from app.schemas.search import SearchLastContextData
def test_last_search_context_preserves_nested_torrent_context() -> None:
"""最近搜索响应必须保留资源上下文的嵌套元数据和种子信息。"""
context = Context(
meta_info=MetaInfo(title="Example", name="Example"),
torrent_info=TorrentInfo(title="Example torrent", site_name="Site A"),
)
response = Response[SearchLastContextData](
success=True,
data={
"params": {"keyword": "Example", "result_type": "torrent"},
"results": [context.model_dump(mode="json")],
},
).model_dump(mode="json")
result = response["data"]["results"][0]
assert result["meta_info"]["name"] == "Example"
assert result["torrent_info"]["title"] == "Example torrent"
assert result["torrent_info"]["site_name"] == "Site A"
def test_last_search_context_keeps_subtitle_result_shape() -> None:
"""修正资源上下文类型后仍必须完整保留字幕搜索结果。"""
subtitle = SubtitleInfo(
title="Example subtitle",
site_name="Subtitle Site",
enclosure="https://example.test/subtitle.srt",
)
response = Response[SearchLastContextData](
success=True,
data={
"params": {"keyword": "Example", "result_type": "subtitle"},
"results": [subtitle.model_dump(mode="json")],
},
).model_dump(mode="json")
result = response["data"]["results"][0]
assert result["title"] == "Example subtitle"
assert result["site_name"] == "Subtitle Site"
assert result["enclosure"] == "https://example.test/subtitle.srt"