mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-08-17 12:14:02 +08:00
feat(music): 识别接口支持 MusicBrainz 数据源
- 选择 musicbrainz 数据源时非音频标题按音乐元数据解析 - 支持 艺术家 - 曲名 格式拆分艺术家后检索 MusicBrainz
This commit is contained in:
@@ -5,6 +5,7 @@ import pytest
|
||||
|
||||
from app.api.endpoints.media import recognize
|
||||
from app.core.context import MediaInfo
|
||||
from app.core.meta import MetaMusic
|
||||
from app.schemas.types import MediaType
|
||||
|
||||
|
||||
@@ -58,3 +59,31 @@ def test_recognize_does_not_treat_non_path_title_as_file_path(title: str) -> Non
|
||||
asyncio.run(recognize(title=title, _=Mock()))
|
||||
|
||||
meta_info_path.assert_not_called()
|
||||
|
||||
|
||||
def test_recognize_musicbrainz_source_parses_music_meta() -> None:
|
||||
"""MusicBrainz 数据源下普通标题应按音乐元数据解析并拆分艺术家。"""
|
||||
chain = Mock()
|
||||
chain.async_recognize_by_meta = AsyncMock(return_value=None)
|
||||
|
||||
with patch("app.api.endpoints.media.MediaChain", return_value=chain):
|
||||
asyncio.run(recognize(title="周杰伦 - 晴天", source="musicbrainz", _=Mock()))
|
||||
|
||||
metainfo = chain.async_recognize_by_meta.await_args.args[0]
|
||||
assert isinstance(metainfo, MetaMusic)
|
||||
assert metainfo.title == "晴天"
|
||||
assert metainfo.artists == ["周杰伦"]
|
||||
assert chain.async_recognize_by_meta.await_args.kwargs.get("source") == "musicbrainz"
|
||||
|
||||
|
||||
def test_recognize_audio_file_title_uses_music_meta_without_source() -> None:
|
||||
"""音频文件名无需指定数据源即应进入音乐识别分支。"""
|
||||
chain = Mock()
|
||||
chain.async_recognize_by_meta = AsyncMock(return_value=None)
|
||||
|
||||
with patch("app.api.endpoints.media.MediaChain", return_value=chain):
|
||||
asyncio.run(recognize(title="周杰伦 - 晴天.flac", _=Mock()))
|
||||
|
||||
metainfo = chain.async_recognize_by_meta.await_args.args[0]
|
||||
assert isinstance(metainfo, MetaMusic)
|
||||
assert metainfo.audio_format
|
||||
|
||||
Reference in New Issue
Block a user