test_city_weather_date.py 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637
  1. """接待建议应将用户指定的日期传给天气助手。"""
  2. import unittest
  3. from types import SimpleNamespace
  4. from unittest.mock import AsyncMock, Mock
  5. from langchain_core.messages import AIMessage
  6. from langchain_core.prompts import ChatPromptTemplate
  7. from langchain_core.runnables import RunnableLambda
  8. from chat_service import ChatService
  9. from memory import ConversationMemory
  10. class CityWeatherDateTests(unittest.IsolatedAsyncioTestCase):
  11. async def test_preserves_explicit_and_relative_dates(self):
  12. for question in ["2026年9月26日在北京接待客户", "后天在北京接待客户"]:
  13. service = ChatService.__new__(ChatService)
  14. service.memory = ConversationMemory()
  15. service._city_extract_prompt = ChatPromptTemplate.from_template("{query}")
  16. service.llm = RunnableLambda(lambda _: AIMessage(content="北京"))
  17. agent = Mock()
  18. agent.send_task_async = AsyncMock(return_value=SimpleNamespace(
  19. status=SimpleNamespace(state="completed"),
  20. artifacts=[{"parts": [{"text": "北京天气结果"}]}],
  21. ))
  22. service.agent_network = Mock()
  23. service.agent_network.get_agent.return_value = agent
  24. result = await service._fetch_weather_for_city_service(question)
  25. self.assertEqual(result, "北京天气结果")
  26. sent_task = agent.send_task_async.await_args.args[0]
  27. self.assertIn(question, sent_task.message["content"]["text"])
  28. if __name__ == "__main__":
  29. unittest.main()