fix: persist visitor handover tickets anonymously

This commit is contained in:
张胜宇
2026-09-11 11:57:48 +08:00
parent 9220b7b47c
commit 0059701509
2 changed files with 40 additions and 4 deletions
@@ -26,12 +26,14 @@ class FakeSession:
self.run = run
self.added: list[Any] = []
self.executed: list[Any] = []
self._scalar_calls = 0
def begin(self) -> FakeTransaction:
return FakeTransaction()
async def scalar(self, statement: object) -> AgentRun:
return self.run
async def scalar(self, statement: object) -> object:
self._scalar_calls += 1
return self.run if self._scalar_calls == 1 else self.run.user_id
def add(self, item: Any) -> None:
self.added.append(item)
@@ -105,6 +107,33 @@ async def test_transfer_required_result_creates_pending_ticket_and_outbox_event(
assert transfer_event.payload["ticket_no"] == tickets[0].ticket_no
class VisitorSession(FakeSession):
"""模拟访客运行:运行记录存在,但不存在对应的正式 sys_user。"""
def __init__(self, run: AgentRun) -> None:
super().__init__(run)
async def scalar(self, statement: object) -> object:
self._scalar_calls += 1
if self._scalar_calls == 1:
return self.run
return None
@pytest.mark.asyncio
async def test_visitor_transfer_ticket_does_not_use_anonymous_id_as_customer_fk() -> None:
"""访客转人工写匿名工单,customer_id 必须为空而不是随机访客 ID。"""
session = VisitorSession(queued_run())
await AgentPersistenceService(session).complete_run(
"run-transfer-1", result(transfer_required=True), memory_extraction_requested=False
)
tickets = added_of(session.added, HandoverTicket)
assert len(tickets) == 1
assert tickets[0].customer_id is None
@pytest.mark.asyncio
async def test_normal_result_does_not_create_handover_ticket_or_event() -> None:
"""非转人工回答不得污染管理员待处理队列。"""