import sys import unittest from pathlib import Path from unittest.mock import patch PROJECT_ROOT = Path(__file__).resolve().parents[1] if str(PROJECT_ROOT) not in sys.path: sys.path.insert(0, str(PROJECT_ROOT)) from journal.core.models import JournalEntry from journal.ai import bridge class AiHybridBridgeTests(unittest.TestCase): def test_summarize_entry_uses_local_analysis_in_hybrid_mode(self): entry = JournalEntry(date="2026-02-22", raw_content="sample content") with ( patch("journal.ai.bridge.analysis.summarize_entry", return_value="local result") as mock_local, ): result = bridge.summarize_entry(entry) self.assertEqual(result, "local result") mock_local.assert_called_once_with(entry) def test_summarize_all_uses_local_analysis_in_hybrid_mode(self): entries = [ JournalEntry(date="2026-02-21", raw_content="entry one"), JournalEntry(date="2026-02-22", raw_content="entry two"), ] with ( patch("journal.ai.bridge.analysis.summarize_all_entries", return_value="all local result") as mock_local, ): result = bridge.summarize_all_entries(entries) self.assertEqual(result, "all local result") mock_local.assert_called_once() def test_summarize_entry_uses_local_analysis_in_python_mode(self): entry = JournalEntry(date="2026-02-22", raw_content="sample content") with ( patch("journal.ai.bridge.analysis.summarize_entry", return_value="local result") as mock_local, ): result = bridge.summarize_entry(entry) self.assertEqual(result, "local result") mock_local.assert_called_once_with(entry) if __name__ == "__main__": unittest.main()