backend/tests/test_embedded_streams.py
Rama master · réplica de lectura del repositorio original.
"""Tests for get_all_subtitle_streams in ass_utils."""
from unittest.mock import patch
import pytest
PROBE_EN_ASS_JA_SRT = {
"streams": [
{"codec_type": "video", "codec_name": "h264"},
{"codec_type": "audio", "codec_name": "aac", "tags": {"language": "jpn"}},
{"codec_type": "subtitle", "codec_name": "ass", "tags": {"language": "eng"}},
{"codec_type": "subtitle", "codec_name": "subrip", "tags": {"language": "jpn"}},
{"codec_type": "subtitle", "codec_name": "ass", "tags": {"language": "deu"}},
]
}
PROBE_EMPTY = {"streams": []}
PROBE_NO_SUBS = {
"streams": [
{"codec_type": "video", "codec_name": "h264"},
{"codec_type": "audio", "codec_name": "aac"},
]
}
PROBE_UNKNOWN_CODEC = {
"streams": [
{"codec_type": "subtitle", "codec_name": "dvd_subtitle", "tags": {"language": "eng"}},
{"codec_type": "subtitle", "codec_name": "ass", "tags": {"language": "eng"}},
]
}
PROBE_DUPLICATE = {
"streams": [
{"codec_type": "subtitle", "codec_name": "ass", "tags": {"language": "eng"}},
{"codec_type": "subtitle", "codec_name": "ass", "tags": {"language": "eng"}},
]
}
@pytest.fixture(autouse=True)
def mock_lang_tags():
"""Mock _get_language_tags to avoid real config loading."""
def fake_tags(lang):
mapping = {
"de": {"deu", "ger", "de"},
"en": {"eng", "en"},
"ja": {"jpn", "ja"},
}
return mapping.get(lang, {lang})
with patch("config._get_language_tags", side_effect=fake_tags):
yield
def test_returns_all_non_target_streams():
from ass_utils import get_all_subtitle_streams
result = get_all_subtitle_streams(PROBE_EN_ASS_JA_SRT, exclude_language="de")
langs = {r["lang"] for r in result}
assert "eng" in langs
assert "jpn" in langs
assert "deu" not in langs
def test_excludes_target_language():
from ass_utils import get_all_subtitle_streams
result = get_all_subtitle_streams(PROBE_EN_ASS_JA_SRT, exclude_language="en")
langs = {r["lang"] for r in result}
assert "eng" not in langs
assert "deu" in langs
def test_formats_correctly():
from ass_utils import get_all_subtitle_streams
result = get_all_subtitle_streams(PROBE_EN_ASS_JA_SRT, exclude_language="de")
by_lang = {r["lang"]: r["format"] for r in result}
assert by_lang["eng"] == "ass"
assert by_lang["jpn"] == "srt"
def test_empty_probe_returns_empty():
from ass_utils import get_all_subtitle_streams
assert get_all_subtitle_streams(PROBE_EMPTY) == []
def test_no_subtitle_streams_returns_empty():
from ass_utils import get_all_subtitle_streams
assert get_all_subtitle_streams(PROBE_NO_SUBS) == []
def test_skips_unknown_codecs():
from ass_utils import get_all_subtitle_streams
result = get_all_subtitle_streams(PROBE_UNKNOWN_CODEC)
assert len(result) == 1
assert result[0]["format"] == "ass"
def test_deduplicates_same_lang_format():
from ass_utils import get_all_subtitle_streams
result = get_all_subtitle_streams(PROBE_DUPLICATE)
assert len(result) == 1
def test_no_exclude_returns_all():
from ass_utils import get_all_subtitle_streams
result = get_all_subtitle_streams(PROBE_EN_ASS_JA_SRT, exclude_language=None)
assert len(result) == 3 # eng, jpn, deu