tests/test_output_language.py
Rama main · réplica de lectura del repositorio original.
"""Output languages: settings, catalogs, fallback and validation."""
import pytest
from src import output_language as ol
@pytest.fixture(autouse=True)
def _reset(monkeypatch):
for k in ("OUTPUT_LANGUAGES", "DEFAULT_OUTPUT_LANGUAGE", "OUTPUT_CATALOG_DIR"):
monkeypatch.delenv(k, raising=False)
ol.reload()
yield
ol.reload()
def test_default_is_english_only():
assert ol.enabled_languages() == ("en",)
assert ol.default_language() == "en"
assert ol.language_choices() == [("English", "en")]
def test_german_catalog_is_built_in(monkeypatch):
monkeypatch.setenv("OUTPUT_LANGUAGES", "de")
ol.reload()
assert ol.enabled_languages() == ("en", "de") # English always offered
assert ol.t("search.n_hits", "de", n=3) == "**3 Treffer**"
assert ol.llm_language_name("de") == "German"
def test_default_language_setting(monkeypatch):
monkeypatch.setenv("OUTPUT_LANGUAGES", "en,de")
monkeypatch.setenv("DEFAULT_OUTPUT_LANGUAGE", "de")
ol.reload()
assert ol.default_language() == "de"
assert ol.normalize("fr") == "de" # not enabled → default
def test_extra_catalog_from_directory_and_fallback(monkeypatch, tmp_path):
(tmp_path / "nl.toml").write_text(
'[meta]\nname = "Nederlands"\nllm_name = "Dutch"\n[strings]\n', encoding="utf-8")
monkeypatch.setenv("OUTPUT_LANGUAGES", "en,nl")
monkeypatch.setenv("OUTPUT_CATALOG_DIR", str(tmp_path))
ol.reload()
assert ("Nederlands", "nl") in ol.language_choices()
assert ol.llm_language_name("nl") == "Dutch"
# key missing in nl → English
assert ol.t("search.n_hits", "nl", n=2) == "**2 hits**"
def test_unknown_language_fails_at_start(monkeypatch):
monkeypatch.setenv("OUTPUT_LANGUAGES", "en,xx")
ol.reload()
with pytest.raises(ValueError, match="xx"):
ol.enabled_languages()
def test_catalog_with_wrong_placeholder_is_rejected(monkeypatch, tmp_path):
(tmp_path / "nl.toml").write_text(
'[meta]\nname = "Nederlands"\n[strings]\n"search.n_hits" = "**{aantal} treffers**"\n',
encoding="utf-8")
monkeypatch.setenv("OUTPUT_LANGUAGES", "nl")
monkeypatch.setenv("OUTPUT_CATALOG_DIR", str(tmp_path))
ol.reload()
with pytest.raises(ValueError, match="placeholders"):
ol.enabled_languages()
def test_builtin_catalogs_are_consistent():
"""Every shipped catalog passes the same validation as a custom one."""
core = ol._read(ol._BUILTIN_DIR / "en.toml")
for path in ol._BUILTIN_DIR.glob("*.toml"):
assert ol.validate_catalog(ol._read(path), core) == [], path.name
def test_orchestrator_passes_language_into_context():
from src.pipeline.orchestrator import ResearchOrchestrator
orch = ResearchOrchestrator(None, None, None, output_language="xx")
assert orch.output_language == "en" # not enabled → default