Ctrl K
ComunidadGuías…

backend/tests/test_animetosho_attachment_language.py

Rama master · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
"""An attachment's own language tag decides its language, for every language.

Prod 2026-11-07: Gachiakuta S01E22 got ``Vietnamese_Tieng_Viet.vie.ass`` as its
English subtitle. ``vie`` was missing from the provider's short ISO table, so
the language fell through to the filename guess, whose default is "en". The
same path saved Indonesian (``ind``) and Catalan (``cat``) tracks as English.
"""

import os
import sys
from unittest.mock import MagicMock

import pytest

sys.path.insert(0, os.path.dirname(os.path.dirname(os.path.abspath(__file__))))

from providers.animetosho import AnimeToshoProvider
from providers.base import VideoQuery


def _attachment(info: dict) -> dict:
    return {
        "id": 3085253,
        "type": "subtitle",
        "url": "https://storage.animetosho.xyz/attachments/0028d/c80.xz",
        "info": {"format": "ASS", **info},
    }


def _results(info: dict, languages: list[str]):
    provider = AnimeToshoProvider()
    provider.session = MagicMock()
    detail = MagicMock()
    detail.status_code = 200
    detail.json.return_value = {
        "files": [{"filename": "Gachiakuta - S01E22.mkv", "attachments": [_attachment(info)]}]
    }
    provider.session.get.return_value = detail
    entry = {"id": 683348, "title": "[LbE3L] Gachiakuta S01 [Multi-Subs]", "num_files": 1}
    query = VideoQuery(series_title="Gachiakuta", episode=22, languages=languages)
    return provider._process_entry(entry, query)


@pytest.mark.parametrize(
    "code, name, expected",
    [("vie", "Vietnamese", "vi"), ("ind", "Indonesian", "id"), ("cat", "Catalan", "ca")],
)
def test_a_tagged_foreign_track_is_not_offered_as_english(code, name, expected):
    assert _results({"language_code": code, "language": name}, ["en"]) == []
    found = _results({"language_code": code, "language": name}, [expected])
    assert [r.language for r in found] == [expected]


def test_an_unknown_tag_is_not_guessed_into_english():
    assert _results({"language_code": "qaa", "language": "Klingon"}, ["en"]) == []


def test_the_common_tags_still_resolve():
    assert [r.language for r in _results({"language_code": "ger"}, ["de"])] == ["de"]
    assert [r.language for r in _results({"lang": "eng"}, ["en"])] == ["en"]


def test_an_untagged_track_still_falls_back_to_the_filename_guess():
    assert [r.language for r in _results({"language": "English"}, ["en"])] == ["en"]
    assert [r.language for r in _results({"language_code": "und"}, ["en"])] == ["en"]


def test_an_untagged_track_named_after_its_language_keeps_it():
    assert _results({"language": "Vietnamese"}, ["en"]) == []
    assert [r.language for r in _results({"language": "Vietnamese"}, ["vi"])] == ["vi"]