# SPDX-License-Identifier: 0BSD import unittest from unittest.mock import AsyncMock, MagicMock, patch from meshchatx.src.backend.translator_handler import TranslatorHandler def _mock_session_for_languages(): mock_response = MagicMock() mock_response.status = 200 mock_response.json = AsyncMock( return_value=[ {"code": "en", "name": "English"}, {"code": "de", "name": "German"}, ], ) mock_get = MagicMock() mock_get.__aenter__ = AsyncMock(return_value=mock_response) mock_get.__aexit__ = AsyncMock(return_value=None) mock_session = MagicMock() mock_session.get = MagicMock(return_value=mock_get) mock_session.__aenter__ = AsyncMock(return_value=mock_session) mock_session.__aexit__ = AsyncMock(return_value=None) return mock_session class TestTranslatorHandler(unittest.TestCase): def setUp(self): self.handler = TranslatorHandler( translator_libretranslate_enabled=True, translator_argos_enabled=False, ) @patch("meshchatx.src.backend.translator_handler.aiohttp.ClientSession") def test_get_supported_languages(self, mock_session_cls): self.handler.has_requests = True self.handler.has_argos = False self.handler.has_argos_lib = False self.handler.has_argos_cli = False mock_session_cls.return_value = _mock_session_for_languages() langs = self.handler.get_supported_languages() self.assertEqual(len(langs), 2) self.assertEqual(langs[0]["code"], "en") @patch("meshchatx.src.backend.translator_handler.aiohttp.ClientSession") def test_translate_text_libretranslate(self, mock_session_cls): self.handler.has_requests = True self.handler.translator_libretranslate_enabled = True mock_response = MagicMock() mock_response.status = 200 mock_response.json = AsyncMock( return_value={ "translatedText": "Hallo", "detectedLanguage": {"language": "en"}, }, ) mock_post = MagicMock() mock_post.__aenter__ = AsyncMock(return_value=mock_response) mock_post.__aexit__ = AsyncMock(return_value=None) mock_session = MagicMock() mock_session.post = MagicMock(return_value=mock_post) mock_session.__aenter__ = AsyncMock(return_value=mock_session) mock_session.__aexit__ = AsyncMock(return_value=None) mock_session_cls.return_value = mock_session result = self.handler.translate_text("Hello", "en", "de", use_argos=False) self.assertEqual(result["translated_text"], "Hallo") self.assertEqual(result["source"], "libretranslate") if __name__ == "__main__": unittest.main()