import tempfile import unittest from pathlib import Path from javis.core.chat_service import ChatService from javis.interface.cli import run_chat from javis.memory.sqlite_store import SQLiteSessionStore from javis.providers.base import ChatMessage class _FakeProvider: name = "ollama" model = "test-model" def chat(self, messages: list[ChatMessage]) -> str: return f"Echo: {messages[-1].content}" class CliTests(unittest.TestCase): def test_basic_chat_commands(self) -> None: with tempfile.TemporaryDirectory() as directory: store = SQLiteSessionStore(Path(directory) / "sessions.sqlite3") service = ChatService(store, _FakeProvider()) inputs = iter(["Hallo", "/sessions", "/new", "/clear", "/exit"]) output: list[str] = [] result = run_chat( service, input_fn=lambda _prompt: next(inputs), output=output.append, ) self.assertEqual(result, 0) self.assertTrue(any(line == "Javis: Echo: Hallo" for line in output)) self.assertTrue(any("Nachrichten" in line for line in output)) self.assertEqual(output[-1], "Chat beendet.") if __name__ == "__main__": unittest.main()