105 lines
2.8 KiB
TypeScript
105 lines
2.8 KiB
TypeScript
import { beforeEach, describe, expect, mock, test } from 'bun:test';
|
|||
|
|
import type { Agent } from '@opencode-ai/sdk/v2';
|
||
|
|
import type { QueuedMessage } from '../stores/messageQueueStore';
|
||
|
|
|
||
|
|
let visibleAgents: Agent[] = [];
|
||
|
|
|
||
|
|
const getVisibleAgentsMock = mock(() => visibleAgents);
|
||
|
|
|
||
|
|
mock.module('@/stores/useConfigStore', () => ({
|
||
|
|
useConfigStore: {
|
||
|
|
getState: () => ({
|
||
|
|
getVisibleAgents: getVisibleAgentsMock,
|
||
|
|
}),
|
||
|
|
},
|
||
|
|
}));
|
||
|
|
|
||
|
|
import { buildQueuedAutoSendPayload } from './useQueuedMessageAutoSend';
|
||
|
|
|
||
|
|
describe('buildQueuedAutoSendPayload', () => {
|
||
|
|
beforeEach(() => {
|
||
|
|
visibleAgents = [];
|
||
|
|
});
|
||
|
|
|
||
|
|
test('returns only the first queued message for auto-send', () => {
|
||
|
|
const queue: QueuedMessage[] = [
|
||
|
|
{
|
||
|
|
id: 'queued-1',
|
||
|
|
content: 'first queued message',
|
||
|
|
createdAt: 1,
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'queued-2',
|
||
|
|
content: 'second queued message',
|
||
|
|
createdAt: 2,
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
const payload = buildQueuedAutoSendPayload(queue);
|
||
|
|
|
||
|
|
expect(payload).not.toBeNull();
|
||
|
|
expect(payload?.queuedMessageId).toBe('queued-1');
|
||
|
|
expect(payload?.primaryText).toBe('first queued message');
|
||
|
|
expect(payload?.primaryAttachments).toEqual([]);
|
||
|
|
});
|
||
|
|
|
||
|
|
test('uses the configured visible agents when parsing queued mentions', () => {
|
||
|
|
visibleAgents = [
|
||
|
|
{
|
||
|
|
name: 'Builder',
|
||
|
|
mode: 'subagent',
|
||
|
|
permission: [],
|
||
|
|
options: {},
|
||
|
|
} as Agent,
|
||
|
|
];
|
||
|
|
|
||
|
|
const queue: QueuedMessage[] = [
|
||
|
|
{
|
||
|
|
id: 'queued-mention',
|
||
|
|
content: '@Builder please take this',
|
||
|
|
createdAt: 1,
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
const payload = buildQueuedAutoSendPayload(queue);
|
||
|
|
|
||
|
|
expect(payload).not.toBeNull();
|
||
|
|
expect(payload?.agentMentionName).toBe('Builder');
|
||
|
|
expect(payload?.primaryText).toBe('@Builder please take this');
|
||
|
|
});
|
||
|
|
|
||
|
|
test('preserves attachment-only queued messages as sendable payloads', () => {
|
||
|
|
const queue: QueuedMessage[] = [
|
||
|
|
{
|
||
|
|
id: 'queued-attachments',
|
||
|
|
content: '',
|
||
|
|
createdAt: 1,
|
||
|
|
attachments: [
|
||
|
|
{
|
||
|
|
id: 'file-1',
|
||
|
|
filename: 'notes.txt',
|
||
|
|
mimeType: 'text/plain',
|
||
|
|
size: 5,
|
||
|
|
source: 'local',
|
||
|
|
file: new File(['hello'], 'notes.txt', { type: 'text/plain' }),
|
||
|
|
dataUrl: 'data:text/plain;base64,aGVsbG8=',
|
||
|
|
},
|
||
|
|
],
|
||
|
|
},
|
||
|
|
{
|
||
|
|
id: 'queued-2',
|
||
|
|
content: 'later queued message',
|
||
|
|
createdAt: 2,
|
||
|
|
},
|
||
|
|
];
|
||
|
|
|
||
|
|
const payload = buildQueuedAutoSendPayload(queue);
|
||
|
|
|
||
|
|
expect(payload).not.toBeNull();
|
||
|
|
expect(payload?.queuedMessageId).toBe('queued-attachments');
|
||
|
|
expect(payload?.primaryText).toBe('');
|
||
|
|
expect(payload?.primaryAttachments).toHaveLength(1);
|
||
|
|
expect(payload?.primaryAttachments[0]?.filename).toBe('notes.txt');
|
||
|
|
});
|
||
|
|
});
|