Files
MoviePilot/tests/test_music_search.py
jxxghp 60aa762ca1 feat: 音乐识别与刮削统一入口整合
- 音乐识别统一走 recognize_media,移除 MusicChain.recognize/async_recognize 及 /music/search 独立端点
- 音乐刮削收拢到 MediaChain.scrape_music_metadata,消除 MusicChain 对 MediaChain 的嵌套引用
- MetaInfo/MetaInfoPath 增加 force_video 参数,影视附加音轨保留季集归属
- 整理、订阅、搜索、API 层音乐识别入口全部统一
2026-08-09 10:06:54 +08:00

85 lines
2.5 KiB
Python

from unittest.mock import Mock, patch
from app.chain.search import SearchChain
from app.core.meta import MetaMusic
from app.core.context import MusicInfo
from app.schemas.context import TorrentInfo
from app.schemas.types import MediaType
def test_music_context_builder_keeps_only_music_category():
"""精确音乐搜索只应保留明确标记为音乐分类的站点资源。"""
chain = SearchChain()
music = MusicInfo(
source="musicbrainz",
media_id="recording-1",
title="Get Lucky",
artists=["Daft Punk"],
album="Random Access Memories",
)
torrents = [
TorrentInfo(
title="Daft Punk - Random Access Memories FLAC",
category=MediaType.MUSIC.value,
site_name="MusicSite",
),
TorrentInfo(
title="Unrelated Movie",
category=MediaType.MOVIE.value,
site_name="VideoSite",
),
]
with patch.object(chain, "filter_torrents", return_value=torrents[:1]):
contexts = chain._build_music_contexts(
torrents=torrents,
mediainfo=music,
rule_groups=["music"],
)
assert len(contexts) == 1
assert contexts[0].media_info is music
assert isinstance(contexts[0].meta_info, MetaMusic)
assert contexts[0].meta_info.media_id == "recording-1"
assert contexts[0].torrent_info.category == MediaType.MUSIC.value
def test_search_by_id_routes_music_identity_to_recognize_and_process():
"""MusicBrainz 精确身份搜索应经统一识别入口识别后进入现有搜索处理链。"""
chain = SearchChain()
music = MusicInfo(
source="musicbrainz",
media_id="recording-1",
title="晴天",
artists=["周杰伦"],
)
expected = [Mock()]
with (
patch.object(chain, "recognize_media", return_value=music) as recognize,
patch.object(chain, "process", return_value=expected) as process,
):
result = chain.search_by_id(
source="musicbrainz",
mediaid="recording-1",
mtype=MediaType.MUSIC,
sites=[1],
)
assert result == expected
recognize.assert_called_once_with(
source="musicbrainz",
mediaid="recording-1",
tmdbid=None,
doubanid=None,
bangumiid=None,
anilistid=None,
mtype=MediaType.MUSIC,
)
process.assert_called_once_with(
mediainfo=music,
sites=[1],
area="title",
no_exists=None,
)