Files
agent-workbench/assets/dashboard/tests/message-delivery.test.mjs

10 lines
1.5 KiB
JavaScript

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')})