fix: 修复音乐搜索统一入口参数名不匹配导致 500

/media/search?type=music 调用 MusicChain.async_search 时应传 query 关键字参数,
原实现误传 title 导致 TypeError;补充端点回归测试。
This commit is contained in:
jxxghp
2026-08-09 10:54:11 +08:00
parent 60aa762ca1
commit 8d71bcbddd
2 changed files with 42 additions and 1 deletions
+41
View File
@@ -13,6 +13,7 @@ from app.api.endpoints.music import (
music_artist_related,
recognize_music,
)
from app.api.endpoints import media as media_endpoints
from app.core.context import MusicAlbumInfo, MusicArtistInfo, MusicInfo, MusicRelease
from app.schemas.music import MusicRecognizeRequest
from app.schemas.types import MediaType
@@ -39,6 +40,46 @@ def test_music_routes_are_registered():
)
def test_media_search_routes_music_queries_with_query_kwarg():
"""统一媒体搜索的音乐分支应以 AsyncSearch 的关键字参数调用 MusicChain。"""
from app.chain.music import MusicChain
chain = Mock()
chain.async_search = AsyncMock(
return_value=[
MusicInfo(
source="musicbrainz",
media_id="recording-1",
music_type="recording",
title="晴天",
artists=["周杰伦"],
release_date="2003-07-31",
category="Album / Studio",
)
]
)
with (
patch("app.api.endpoints.media.MusicChain", return_value=chain) as music_chain,
patch.object(media_endpoints, "MediaChain") as media_chain,
):
result = asyncio.run(
media_endpoints.search(
title="晴天",
type="music",
count=30,
page=1,
_=Mock(),
)
)
assert result[0]["media_id"] == "recording-1"
assert result[0]["music_type"] == "recording"
assert result[0]["title"] == "晴天"
chain.async_search.assert_awaited_once_with(query="晴天", limit=30)
media_chain.return_value.async_search.assert_not_called()
def test_recognize_music_returns_detail():
"""音乐识别接口应按来源和 ID 经统一识别入口返回详情。"""
from app.chain.media import MediaChain