from __future__ import annotations from app.models.types import Language from app.services import language def test_detect_language_uses_indonesian_lexical_hints_before_fasttext(monkeypatch): monkeypatch.setattr( language, "_ensure_model", lambda: (_ for _ in ()).throw(AssertionError("fasttext should not be loaded")), ) assert ( language.detect_language("berapa batas berat bagasi kabin?") == Language.ID ) assert ( language.detect_language( "jelaskan ketentuan PM 89 Tahun 2015 tentang keterlambatan penerbangan" ) == Language.ID ) def test_detect_language_uses_english_lexical_hints_before_fasttext(monkeypatch): monkeypatch.setattr( language, "_ensure_model", lambda: (_ for _ in ()).throw(AssertionError("fasttext should not be loaded")), ) assert language.detect_language("what is the cabin baggage limit?") == Language.EN def test_detect_language_falls_back_to_fasttext_when_lexical_hints_are_weak( monkeypatch, ): class FakeModel: def predict(self, text, k=2): return (("__label__id", "__label__en"), (0.9, 0.1)) monkeypatch.setattr(language, "_ensure_model", lambda: FakeModel()) assert language.detect_language("operasional") == Language.ID