重启后仍能跳过协同出方案,未成交可同一句带原因;海陆有价卡改为直接生成报价单。

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-09-23 18:45:28 +08:00
co-authored by Cursor
parent 378bb892b3
commit 84207bb4e5
18 changed files with 414 additions and 32 deletions
@@ -269,6 +269,54 @@ class ContinueTicketTests(unittest.TestCase):
self.assertEqual(decision.intent, "continue_thread")
_ = dispatch_inbound
def test_skip_collab_after_restart_from_ledger(self) -> None:
"""
测服 WO202609230031:进程重启后主账把空运已报价收成 wait_adopt,
点「不需要协同,直接生成报价单」不能再静默丢掉。
"""
ledger = MemoryLedger()
live = AirTextInquiryFlow(ledger)
sink: list[str] = []
def reply(text: str, extra=None) -> None:
sink.append(text)
_ = extra
created = ledger.create_ticket(
sender_id="u-skip-restart", business_line="AIR", facts=COMPLETE_AIR
)
wo = created["work_order_no"]
ledger.upsert_quote(
work_order_no=wo,
quote={
"total": "USD 1,280",
"eta": "3-5 天",
"valid_until": "2026-09-20",
"source_label": "TMS 标准报价",
},
to_status="已报价",
)
view = ledger.get_for_agent(work_order_no=wo, sender_id="u-skip-restart")
self.assertEqual(view.get("wait_phase"), "wait_adopt")
restarted = AirTextInquiryFlow(ledger)
phase = restarted.on_button(
sender_id="u-skip-restart",
action=copy.BTN_SKIP_COLLAB,
reply=reply,
card_meta={
"event_key": f"skip_collab:{wo}",
"task_id": f"price-{wo}-deadbeef",
"response_code": "rc-skip-restart",
},
)
self.assertEqual(phase, "wait_adopt")
joined = "\n".join(sink)
self.assertIn("已跳过内部协同", joined)
self.assertIn(f"{wo}报价方案", joined)
self.assertEqual(restarted.session_of("u-skip-restart").phase, "wait_adopt")
self.assertNotIn(copy.BTN_SKIP_COLLAB, restarted.session_of("u-skip-restart").allowed)
def test_adopt_excel_after_restart_stays_on_card_ticket(self) -> None:
"""点 0040 方案卡不能落到刚续办的 0037:进程无书签时按卡上工单号从主账收回。"""
ledger = MemoryLedger()