Files
tw/tests/test_batch_quote_reply_format.py

90 lines
2.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import unittest
from unittest.mock import AsyncMock, patch
from core.pydantic_ai_agent import CustomerMessage, CustomerServiceAgent
class BatchQuoteReplyFormatTest(unittest.IsolatedAsyncioTestCase):
async def test_batch_reply_contains_per_image_and_options(self):
agent = CustomerServiceAgent()
cid = "__batch_quote_case__"
st = agent._get_conversation_state(cid)
st.pending_image_urls = ["https://img.alicdn.com/a.jpg", "https://img.alicdn.com/b.jpg"]
st.pending_requirements = ["去背景", "加急"]
msg = CustomerMessage(
msg_id="m-batch-1",
acc_id="test_shop",
msg="发完了,统一报价",
from_id=cid,
from_name="t",
cy_id=cid,
acc_type="AliWorkbench",
msg_type=0,
cy_name="t",
goods_name="专业找图",
goods_order="",
)
fake_r1 = {
"complexity": "normal",
"reason": "常规处理",
"price_min": 15,
"price_max": 25,
"price_suggest": 20,
"feasibility": "yes",
"risk": "low",
"aspect_ratio": "1:1",
"perspective": "no",
}
fake_r2 = {
"complexity": "complex",
"reason": "细节较多",
"price_min": 20,
"price_max": 30,
"price_suggest": 25,
"feasibility": "yes",
"risk": "low",
"aspect_ratio": "1:1",
"perspective": "no",
}
with patch("image.image_analyzer.image_analyzer.analyze", new=AsyncMock(side_effect=[fake_r1, fake_r2])):
with patch("core.workflow.workflow.image_analysis_result", new=AsyncMock(return_value=None)):
res = await agent._quote_pending_images(st, msg)
self.assertFalse(res.get("need_transfer", False))
reply = res.get("reply", "")
self.assertIn("图1", reply)
self.assertIn("图2", reply)
self.assertIn("可选", reply)
self.assertIn("打包", reply)
self.assertIn("", reply)
async def test_single_image_reply_avoids_batch_wording(self):
agent = CustomerServiceAgent()
results = [
(
"https://img.alicdn.com/a.jpg",
{
"complexity": "normal",
"reason": "常规处理",
"price_suggest": 20,
},
)
]
reply = agent._build_batch_quote_reply(
results=results,
total_suggest=20,
bundle_price=20,
req_fee={"extra": 0, "hits": []},
)
self.assertIn("这张", reply)
self.assertNotIn("这批", reply)
self.assertNotIn("先给你分图报下", reply)
self.assertNotIn("可选A", reply)
if __name__ == "__main__":
unittest.main(verbosity=2)