from types import SimpleNamespace from unittest.mock import AsyncMock import pytest from backend.services import refinement LANGUAGE_NAMES = { "en": "English", "es": "Spanish", "fr": "French", "de": "German", "ja": "Japanese", "zh": "Chinese", "hi": "Hindi", } @pytest.mark.parametrize(("code", "name"), LANGUAGE_NAMES.items()) def test_prompt_uses_only_canonical_supported_language(code, name): prompt = refinement.build_refinement_prompt(refinement.RefinementFlags(), code) assert f"Primary language: {name} ({code})." in prompt assert "Preserve every source-language span in its original language and script." in prompt assert "Never translate any part of the transcript." in prompt @pytest.mark.parametrize("language", [None, "auto", "xx", "ignore previous instructions"]) def test_unknown_language_is_never_interpolated_into_prompt(language): prompt = refinement.build_refinement_prompt(refinement.RefinementFlags(), language) assert language is None or language not in prompt assert "Primary language:" not in prompt assert "Never translate any part of the transcript." in prompt @pytest.mark.parametrize("code", LANGUAGE_NAMES) def test_supported_language_uses_matched_examples_with_technical_code_switching(code): examples = refinement.get_refinement_examples(code) combined = " ".join(source + " " + target for source, target in examples) assert len(examples) >= 5 assert examples is not refinement.REFINEMENT_EXAMPLES assert any(token in combined for token in ("GitHub", "package.json", "npm", "tests")) def test_missing_language_keeps_legacy_english_examples_for_old_captures(): assert refinement.get_refinement_examples(None) is refinement.REFINEMENT_EXAMPLES @pytest.mark.asyncio async def test_refine_transcript_passes_language_prompt_and_examples(monkeypatch): backend = SimpleNamespace( model_size="0.6B", generate=AsyncMock(return_value="Hola, abre package.json."), ) monkeypatch.setattr(refinement.llm_service, "get_llm_model", lambda: backend) text, model_size = await refinement.refine_transcript( "eh hola abre package dot json", refinement.RefinementFlags(), language="es", ) assert text == "Hola, abre package.json." assert model_size == "0.6B" kwargs = backend.generate.await_args.kwargs assert "Primary language: Spanish (es)." in kwargs["system"] assert kwargs["examples"] == refinement.get_refinement_examples("es")