74 lines
2.3 KiB
Python
74 lines
2.3 KiB
Python
from __future__ import annotations
|
|
|
|
import unittest
|
|
from types import SimpleNamespace
|
|
|
|
from javis.providers.base import ChatMessage
|
|
from javis.ui.chat_controller import DesktopController, sanitized_error
|
|
|
|
|
|
class _Service:
|
|
def __init__(self) -> None:
|
|
self.sessions = [
|
|
SimpleNamespace(id="one", title="Eins"),
|
|
SimpleNamespace(id="two", title="Zwei"),
|
|
]
|
|
|
|
def new_session(self):
|
|
return self.sessions[0]
|
|
|
|
def list_sessions(self):
|
|
return self.sessions
|
|
|
|
def search_sessions(self, text: str):
|
|
return [session for session in self.sessions if text in session.title]
|
|
|
|
def load_session(self, session_id: str):
|
|
session = next(item for item in self.sessions if item.id == session_id)
|
|
return SimpleNamespace(
|
|
session=session,
|
|
messages=[ChatMessage("user", "Hallo")],
|
|
)
|
|
|
|
def rename_session(self, session_id: str, title: str):
|
|
session = next(item for item in self.sessions if item.id == session_id)
|
|
session.title = title
|
|
return session
|
|
|
|
|
|
class _Hybrid:
|
|
mode = "auto"
|
|
last_route = None
|
|
|
|
def set_mode(self, mode: str) -> None:
|
|
self.mode = mode
|
|
|
|
|
|
class DesktopControllerTests(unittest.TestCase):
|
|
def setUp(self) -> None:
|
|
self.runtime = SimpleNamespace(
|
|
service=_Service(),
|
|
hybrid_provider=_Hybrid(),
|
|
)
|
|
self.controller = DesktopController(self.runtime)
|
|
|
|
def test_controller_manages_sessions_without_qt_window(self) -> None:
|
|
created = self.controller.new_session()
|
|
listed = self.controller.list_sessions()
|
|
searched = self.controller.list_sessions("Zwei")
|
|
loaded = self.controller.load_session("two")
|
|
renamed = self.controller.rename_active_session("Neu")
|
|
|
|
self.assertEqual(created.id, "one")
|
|
self.assertEqual(len(listed), 2)
|
|
self.assertEqual([session.id for session in searched], ["two"])
|
|
self.assertEqual(loaded.messages[0].content, "Hallo")
|
|
self.assertEqual(renamed.title, "Neu")
|
|
|
|
def test_error_sanitizer_masks_key_patterns(self) -> None:
|
|
secret = "AIza" + "x" * 25
|
|
result = sanitized_error(RuntimeError(f"Fehler {secret}"))
|
|
|
|
self.assertNotIn(secret, result)
|
|
self.assertIn("MASKIERT", result)
|