mirror of
https://github.com/jxxghp/MoviePilot.git
synced 2026-09-05 23:47:41 +08:00
refactor(media): unify media identity and chain responsibilities
This commit is contained in:
@@ -69,3 +69,61 @@ def test_extended_ids_fall_back_when_installed_rust_is_old() -> None:
|
||||
|
||||
assert metainfo["media_source"] == "anilist"
|
||||
assert metainfo["media_id"] == "154587"
|
||||
|
||||
|
||||
def test_generic_identity_falls_back_when_installed_rust_is_old() -> None:
|
||||
"""旧 Rust 扩展缺少通用字段时应直接使用 Python 解析器。"""
|
||||
with patch(
|
||||
"app.core.metainfo.rust_accel.supports_unified_media_identity",
|
||||
return_value=False,
|
||||
), patch(
|
||||
"app.core.metainfo.rust_accel.find_metainfo",
|
||||
side_effect=AssertionError("旧 Rust 扩展不应处理通用媒体身份"),
|
||||
):
|
||||
_, metainfo = find_metainfo(
|
||||
"Frieren {[media_source=anilist;media_id=154587]}"
|
||||
)
|
||||
|
||||
assert metainfo["media_source"] == "anilist"
|
||||
assert metainfo["media_id"] == "154587"
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"title",
|
||||
[
|
||||
"Movie {[media_source=themoviedb;media_id=0;type=movies]}",
|
||||
"Movie {[tmdbid=0;type=movies]}",
|
||||
"Movie [tmdbid=0]",
|
||||
"Anime [anilist=0]",
|
||||
],
|
||||
)
|
||||
def test_python_metainfo_rejects_zero_identity_and_removes_tag(title: str) -> None:
|
||||
"""Python 标签解析器应移除零值标签,但不得生成媒体身份。"""
|
||||
with patch("app.core.metainfo.rust_accel.find_metainfo", return_value=None):
|
||||
parsed_title, metainfo = find_metainfo(title)
|
||||
|
||||
assert metainfo["media_source"] is None
|
||||
assert metainfo["media_id"] is None
|
||||
assert "=0" not in parsed_title
|
||||
|
||||
|
||||
def test_metainfo_normalizes_zero_identity_from_old_rust_extension() -> None:
|
||||
"""旧 Rust 扩展返回零值身份时,主程序边界仍应将统一对清空。"""
|
||||
rust_result = {
|
||||
"title": "Movie",
|
||||
"metainfo": {
|
||||
"media_source": "themoviedb",
|
||||
"media_id": "0",
|
||||
"tmdbid": 0,
|
||||
},
|
||||
}
|
||||
with patch(
|
||||
"app.core.metainfo.rust_accel.find_metainfo",
|
||||
return_value=rust_result,
|
||||
):
|
||||
parsed_title, metainfo = find_metainfo("Movie [tmdbid=0]")
|
||||
|
||||
assert parsed_title == "Movie"
|
||||
assert metainfo["media_source"] is None
|
||||
assert metainfo["media_id"] is None
|
||||
assert "tmdbid" not in metainfo
|
||||
|
||||
Reference in New Issue
Block a user