from types import SimpleNamespace from unittest.mock import MagicMock, patch from run_agent import AIAgent def _mock_response(*, usage: dict, content: str = "done"): msg = SimpleNamespace(content=content, tool_calls=None) choice = SimpleNamespace(message=msg, finish_reason="stop") return SimpleNamespace( choices=[choice], model="test/model", usage=SimpleNamespace(**usage), ) def _make_agent(session_db, *, platform: str): with ( patch("run_agent.get_tool_definitions", return_value=[]), patch("run_agent.check_toolset_requirements", return_value={}), patch("run_agent.OpenAI"), ): agent = AIAgent( api_key="test-key", quiet_mode=True, skip_context_files=True, skip_memory=True, session_db=session_db, session_id=f"{platform}-session", platform=platform, ) agent.client = MagicMock() agent.client.chat.completions.create.return_value = _mock_response( usage={ "prompt_tokens": 11, "completion_tokens": 7, "total_tokens": 18, } ) return agent def test_run_conversation_persists_tokens_for_telegram_sessions(): session_db = MagicMock() agent = _make_agent(session_db, platform="telegram") result = agent.run_conversation("hello") assert result["final_response"] == "done" session_db.update_token_counts.assert_called_once() assert session_db.update_token_counts.call_args.args[0] == "telegram-session" def test_run_conversation_persists_tokens_for_cron_sessions(): session_db = MagicMock() agent = _make_agent(session_db, platform="cron") result = agent.run_conversation("hello") assert result["final_response"] == "done" session_db.update_token_counts.assert_called_once() assert session_db.update_token_counts.call_args.args[0] == "cron-session"