mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-04 23:17:20 +08:00
fix: 修复音乐搜索统一入口参数名不匹配导致 500
/media/search?type=music 调用 MusicChain.async_search 时应传 query 关键字参数, 原实现误传 title 导致 TypeError;补充端点回归测试。
This commit is contained in:
@@ -223,7 +223,7 @@ async def search(
|
|||||||
media_chain = MediaChain()
|
media_chain = MediaChain()
|
||||||
if type == "music" or source == "musicbrainz":
|
if type == "music" or source == "musicbrainz":
|
||||||
# 音乐搜索统一入口,与影视搜索共用 /media/search
|
# 音乐搜索统一入口,与影视搜索共用 /media/search
|
||||||
music_infos = await MusicChain().async_search(title=title, limit=count)
|
music_infos = await MusicChain().async_search(query=title, limit=count)
|
||||||
return [
|
return [
|
||||||
info.to_dict()
|
info.to_dict()
|
||||||
for info in music_infos
|
for info in music_infos
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ from app.api.endpoints.music import (
|
|||||||
music_artist_related,
|
music_artist_related,
|
||||||
recognize_music,
|
recognize_music,
|
||||||
)
|
)
|
||||||
|
from app.api.endpoints import media as media_endpoints
|
||||||
from app.core.context import MusicAlbumInfo, MusicArtistInfo, MusicInfo, MusicRelease
|
from app.core.context import MusicAlbumInfo, MusicArtistInfo, MusicInfo, MusicRelease
|
||||||
from app.schemas.music import MusicRecognizeRequest
|
from app.schemas.music import MusicRecognizeRequest
|
||||||
from app.schemas.types import MediaType
|
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():
|
def test_recognize_music_returns_detail():
|
||||||
"""音乐识别接口应按来源和 ID 经统一识别入口返回详情。"""
|
"""音乐识别接口应按来源和 ID 经统一识别入口返回详情。"""
|
||||||
from app.chain.media import MediaChain
|
from app.chain.media import MediaChain
|
||||||
|
|||||||
Reference in New Issue
Block a user