Files
Agent-System-Frontend/test/outbox.test.ts
T
weichenandCursor 3c815250a0 Queue follow-up messages and pin files in the right rail
Why: a busy conversation rejected further input, and the file list lived
only behind the workspace overlay.

Evidence: npx tsc --noEmit and vitest 42 tests, including outbox
append/edit/promote. The queue uses Collapsible and design tokens.
The files tab reuses ArtifactsPanel.

Impact: while a run is active, Enter queues the draft (edit, delete, or
send-now). Finished and failed runs drain the queue. HTTP 409 also
enqueues instead of only toasting. Backend serialization is unchanged.

Refs: task feature/input-queue
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-10-01 04:31:50 +00:00

29 lines
1.0 KiB
TypeScript

import { describe, expect, it } from 'vitest'
import {
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])
})
})