Files
MeshChatX/tests/backend/test_translator_handler.py

66 lines
2.4 KiB
Python

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(enabled=True)
@patch("meshchatx.src.backend.translator_handler.aiohttp.ClientSession")
def test_get_supported_languages(self, mock_session_cls):
self.handler.has_requests = True
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
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")
self.assertEqual(result["translated_text"], "Hallo")
self.assertEqual(result["source"], "libretranslate")
if __name__ == "__main__":
unittest.main()