feat: add desktop ui foundation
This commit is contained in:
+10
-1
@@ -7,7 +7,12 @@ from types import SimpleNamespace
|
||||
from javis.config.settings import Settings
|
||||
from javis.core.chat_service import ChatService
|
||||
from javis.core.provider_router import HybridProvider
|
||||
from javis.interface.cli import build_runtime, run_chat, run_gemini_configuration
|
||||
from javis.interface.cli import (
|
||||
build_parser,
|
||||
build_runtime,
|
||||
run_chat,
|
||||
run_gemini_configuration,
|
||||
)
|
||||
from javis.memory.sqlite_store import SQLiteSessionStore
|
||||
from javis.providers.base import ChatMessage
|
||||
from javis.security.privacy import CloudPolicy
|
||||
@@ -62,6 +67,10 @@ class _LazySecrets:
|
||||
|
||||
|
||||
class CliTests(unittest.TestCase):
|
||||
def test_parser_recognizes_gui_and_existing_chat(self) -> None:
|
||||
self.assertEqual(build_parser().parse_args(["gui"]).command, "gui")
|
||||
self.assertEqual(build_parser().parse_args(["chat"]).command, "chat")
|
||||
|
||||
def test_basic_chat_commands(self) -> None:
|
||||
with tempfile.TemporaryDirectory() as directory:
|
||||
store = SQLiteSessionStore(Path(directory) / "sessions.sqlite3")
|
||||
|
||||
@@ -0,0 +1,73 @@
|
||||
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)
|
||||
Reference in New Issue
Block a user