Schedule consultation bridges on demand and preserve delivery evidence
This commit is contained in:
@@ -0,0 +1,9 @@
|
||||
import test from 'node:test'
|
||||
import assert from 'node:assert/strict'
|
||||
import { messageDelivery } from '../src/lib/message-delivery.ts'
|
||||
const m={id:'m',session_id:'s',source:'human',text:'question',status:'queued'}
|
||||
test('each explicit transport stage remains separate',()=>{for(const stage of ['saved','queued','delivered','processing','replied','blocked'])assert.equal(messageDelivery({...m,delivery_stage:stage},[]).stage,stage)})
|
||||
test('receipt accepted proves delivery but never processing or reply',()=>{assert.equal(messageDelivery({...m,status:'claimed',submission:{state:'accepted'}},[]).stage,'delivered');assert.equal(messageDelivery({...m,status:'completed'},[]).stage,'unknown')})
|
||||
test('only real correlated same-session reply closes pending state',()=>{const reply={...m,id:'a',source:'agent',reply_to:'m'};assert.equal(messageDelivery(m,[reply]).stage,'replied');assert.equal(messageDelivery(m,[{...reply,session_id:'other'}]).stage,'queued');assert.equal(messageDelivery(m,[{...reply,reply_to:'other'}]).stage,'queued')})
|
||||
test('unknown failed and uncertain outcomes never invite replay',()=>{for(const status of ['failed','uncertain']){const result=messageDelivery({...m,status},[]);assert.equal(result.stage,'blocked');assert.match(result.reason,/请勿重复发送/)}assert.equal(messageDelivery({...m,status:'future'},[]).stage,'unknown')})
|
||||
test('delayed blocked receipt yields to a correlated reply',()=>{assert.equal(messageDelivery({...m,status:'uncertain',delivery_stage:'blocked'},[{...m,id:'a',source:'agent',reply_to:'m'}]).stage,'replied')})
|
||||
Reference in New Issue
Block a user