新增功能
This commit is contained in:
@@ -0,0 +1,118 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
"""WeCom-to-Grok context and send-commit regression tests."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import unittest
|
||||
from unittest import mock
|
||||
|
||||
import ai_chat
|
||||
import ai_config
|
||||
import wechat_bot
|
||||
from wechat_bot import AUTO_REPLY_TEXT, WeChatBot
|
||||
|
||||
|
||||
class WeChatGrokContextTest(unittest.TestCase):
|
||||
@staticmethod
|
||||
def _bot() -> WeChatBot:
|
||||
bot = WeChatBot.__new__(WeChatBot)
|
||||
bot.get_session_history = mock.Mock(
|
||||
return_value=[
|
||||
{"role": "user", "content": "之前的问题"},
|
||||
{"role": "assistant", "content": "之前实际发出的回复"},
|
||||
]
|
||||
)
|
||||
bot.extract_context_for = mock.Mock(return_value="客户的新消息")
|
||||
bot.remember_exchange = mock.Mock()
|
||||
return bot
|
||||
|
||||
def test_generate_uses_stable_scope_but_does_not_write_before_send(self) -> None:
|
||||
bot = self._bot()
|
||||
fp = bytes.fromhex("11" * 16)
|
||||
with (
|
||||
mock.patch.multiple(
|
||||
ai_config,
|
||||
AI_ENABLED=True,
|
||||
AI_USE_VISION=False,
|
||||
AI_CONTEXT_ENABLED=True,
|
||||
),
|
||||
mock.patch.object(wechat_bot.time, "sleep"),
|
||||
mock.patch.object(
|
||||
ai_chat,
|
||||
"call_ai_text",
|
||||
return_value="Grok 生成的合规回复",
|
||||
) as call,
|
||||
):
|
||||
reply = bot._generate_ai_reply(fp, chat_text="当前屏幕")
|
||||
|
||||
self.assertEqual("Grok 生成的合规回复", reply)
|
||||
self.assertEqual(fp.hex(), call.call_args.kwargs["session_id"])
|
||||
self.assertEqual(
|
||||
bot.get_session_history.return_value,
|
||||
call.call_args.kwargs["history"],
|
||||
)
|
||||
bot.remember_exchange.assert_not_called()
|
||||
|
||||
bot._commit_generated_exchange(fp, reply, sent=True)
|
||||
bot.remember_exchange.assert_called_once_with(
|
||||
fp,
|
||||
"客户的新消息",
|
||||
"Grok 生成的合规回复",
|
||||
)
|
||||
|
||||
def test_failed_wecom_send_never_records_assistant_reply(self) -> None:
|
||||
bot = self._bot()
|
||||
fp = bytes.fromhex("22" * 16)
|
||||
with (
|
||||
mock.patch.multiple(
|
||||
ai_config,
|
||||
AI_ENABLED=True,
|
||||
AI_USE_VISION=False,
|
||||
AI_CONTEXT_ENABLED=True,
|
||||
),
|
||||
mock.patch.object(wechat_bot.time, "sleep"),
|
||||
mock.patch.object(
|
||||
ai_chat,
|
||||
"call_ai_text",
|
||||
return_value="尚未真正发送的回复",
|
||||
),
|
||||
):
|
||||
reply = bot._generate_ai_reply(fp, chat_text="当前屏幕")
|
||||
|
||||
bot._commit_generated_exchange(fp, reply, sent=False)
|
||||
bot.remember_exchange.assert_not_called()
|
||||
|
||||
def test_blocked_agent_claim_falls_back_without_persisting_claim(self) -> None:
|
||||
bot = self._bot()
|
||||
fp = bytes.fromhex("33" * 16)
|
||||
with (
|
||||
mock.patch.multiple(
|
||||
ai_config,
|
||||
AI_ENABLED=True,
|
||||
AI_USE_VISION=False,
|
||||
AI_CONTEXT_ENABLED=True,
|
||||
),
|
||||
mock.patch.object(wechat_bot.time, "sleep"),
|
||||
mock.patch.object(
|
||||
ai_chat,
|
||||
"call_ai_text",
|
||||
return_value="已经帮您预约成功了。",
|
||||
),
|
||||
):
|
||||
reply = bot._generate_ai_reply(fp, chat_text="当前屏幕")
|
||||
|
||||
self.assertIsNone(reply)
|
||||
bot._commit_generated_exchange(fp, reply, sent=True)
|
||||
bot.remember_exchange.assert_called_once_with(
|
||||
fp,
|
||||
"客户的新消息",
|
||||
AUTO_REPLY_TEXT,
|
||||
)
|
||||
self.assertNotIn(
|
||||
"预约成功",
|
||||
bot.remember_exchange.call_args.args[2],
|
||||
)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
Reference in New Issue
Block a user