fix: persist visitor handover tickets anonymously
This commit is contained in:
@@ -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:
|
||||
"""非转人工回答不得污染管理员待处理队列。"""
|
||||
|
||||
Reference in New Issue
Block a user