import pytest from integration.context_manager import ( ContextManager, get_context_manager, reset_context_manager, MAX_HISTORY_MESSAGES, ) class TestCreditFileIdTracking: def setup_method(self): self.cm = ContextManager() def test_initially_none(self): assert self.cm.get_active_credit_file_id() is None def test_set_and_get(self): self.cm.set_active_credit_file_id("26000046") assert self.cm.get_active_credit_file_id() == "26000046" def test_strips_whitespace(self): self.cm.set_active_credit_file_id(" 26000046 ") assert self.cm.get_active_credit_file_id() == "26000046" def test_ignores_empty_string(self): self.cm.set_active_credit_file_id("26000046") self.cm.set_active_credit_file_id("") assert self.cm.get_active_credit_file_id() == "26000046" def test_ignores_none(self): self.cm.set_active_credit_file_id("26000046") self.cm.set_active_credit_file_id(None) assert self.cm.get_active_credit_file_id() == "26000046" def test_updates_to_new_id(self): self.cm.set_active_credit_file_id("26000046") self.cm.set_active_credit_file_id("99999999") assert self.cm.get_active_credit_file_id() == "99999999" class TestPrepareContext: def setup_method(self): self.cm = ContextManager() def test_empty_history(self): result = self.cm.prepare_context("test", []) assert result["chat_history"] == [] assert result["resolved_query"] == "test" def test_trims_to_max(self): history = [{"role": "user", "content": f"msg {i}"} for i in range(20)] result = self.cm.prepare_context("q", history) assert len(result["chat_history"]) == MAX_HISTORY_MESSAGES def test_keeps_all_when_under_max(self): history = [{"role": "user", "content": f"msg {i}"} for i in range(5)] result = self.cm.prepare_context("q", history) assert len(result["chat_history"]) == 5 def test_keeps_most_recent(self): history = [{"role": "user", "content": f"msg {i}"} for i in range(15)] result = self.cm.prepare_context("q", history) last_content = result["chat_history"][-1]["content"] assert last_content == "msg 14" def test_metadata_present(self): result = self.cm.prepare_context("q", [{"role": "user", "content": "x"}]) assert "metadata" in result assert result["metadata"]["filtering_method"] == "recent_window" assert result["metadata"]["kept"] == 1 def test_none_history_treated_as_empty(self): result = self.cm.prepare_context("q", None) assert result["chat_history"] == [] def test_intent_param_accepted(self): result = self.cm.prepare_context("q", [], intent="database_query") assert result["resolved_query"] == "q" class TestSingleton: def setup_method(self): reset_context_manager() def teardown_method(self): reset_context_manager() def test_returns_instance(self): cm = get_context_manager() assert isinstance(cm, ContextManager) def test_returns_same_instance(self): cm1 = get_context_manager() cm2 = get_context_manager() assert cm1 is cm2 def test_reset_creates_new(self): cm1 = get_context_manager() reset_context_manager() cm2 = get_context_manager() assert cm1 is not cm2