import { describe, expect, it } from 'vitest' import { deliveryRequestId, enqueueMessage, enqueueMessageFront, newQueuedMessage, promoteQueuedMessage, removeQueuedMessage, replaceQueuedText, } from '../src/outbox' describe('outbox', () => { it('appends, edits, promotes, and removes', () => { const a = newQueuedMessage('a', [], []) const b = newQueuedMessage('b', ['f1'], ['note.md']) let q = enqueueMessage(enqueueMessage([], a), b) expect(q.map(x => x.text)).toEqual(['a', 'b']) q = replaceQueuedText(q, a.id, 'a2') expect(q[0].text).toBe('a2') q = promoteQueuedMessage(q, b.id) expect(q.map(x => x.text)).toEqual(['b', 'a2']) q = removeQueuedMessage(q, b.id) expect(q.map(x => x.text)).toEqual(['a2']) }) it('puts a busy conflict back at the front without duplicating', () => { const a = newQueuedMessage('a', [], []) const b = newQueuedMessage('b', [], []) const q = enqueueMessageFront(enqueueMessage([], a), b) const again = enqueueMessageFront(q, b) expect(again.map(x => x.id)).toEqual([b.id, a.id]) }) it('reuses the queued id as the request id when the send is retried', () => { const item = newQueuedMessage('hi', ['f1'], ['note.md']) const queued = enqueueMessageFront([], item) expect(deliveryRequestId(queued[0])).toBe(item.id) const retried = enqueueMessageFront(queued, { ...item, text: item.text }) expect(deliveryRequestId(retried[0])).toBe(item.id) expect(retried).toHaveLength(1) }) })