"""Unit tests for duty_teller.i18n: get_lang, t, fallback to en.""" from unittest.mock import MagicMock from duty_teller.i18n import get_lang, t def test_get_lang_none_returns_en(): assert get_lang(None) == "en" def test_get_lang_ru_returns_ru(): user = MagicMock() user.language_code = "ru" assert get_lang(user) == "ru" def test_get_lang_ru_ru_returns_ru(): user = MagicMock() user.language_code = "ru-RU" assert get_lang(user) == "ru" def test_get_lang_en_returns_en(): user = MagicMock() user.language_code = "en" assert get_lang(user) == "en" def test_get_lang_uk_returns_en(): user = MagicMock() user.language_code = "uk" assert get_lang(user) == "en" def test_get_lang_empty_returns_en(): user = MagicMock() user.language_code = "" assert get_lang(user) == "en" def test_get_lang_missing_attr_returns_en(): user = MagicMock(spec=[]) # no language_code assert get_lang(user) == "en" def test_t_en_start_greeting(): result = t("en", "start.greeting") assert "help" in result.lower() assert "bot" in result.lower() def test_t_ru_start_greeting(): result = t("ru", "start.greeting") assert "Привет" in result or "бот" in result or "календар" in result def test_t_fallback_to_en_when_key_missing_for_ru(): """When key exists in en but not in ru, fallback to en.""" result = t("ru", "start.greeting") assert len(result) > 0 # start.greeting exists in both; use a key that might be en-only for fallback result_any = t("ru", "errors.generic") assert "error" in result_any.lower() or "ошибк" in result_any.lower() def test_t_placeholder_substitution(): assert t("en", "set_phone.saved", phone="+7 999") == "Phone saved: +7 999" assert "999" in t("ru", "set_phone.saved", phone="+7 999") def test_t_unknown_lang_normalized_to_en(): assert "help" in t("de", "start.greeting").lower() or "Hi" in t( "de", "start.greeting" )