mirror of
https://git.quad4.io/RNS-Things/MeshChatX.git
synced 2026-04-12 21:25:42 +00:00
66 lines
2.4 KiB
Python
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()
|