Files
claude-code/src/utils/__tests__/taskStateMessage.test.ts
2026-05-01 21:39:30 +08:00

88 lines
2.2 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import {
buildTaskStateMessage,
getTaskStateSnapshotKey,
} from '../taskStateMessage'
describe('buildTaskStateMessage', () => {
test('filters internal tasks and preserves public task fields', () => {
const message = buildTaskStateMessage('tasklist', [
{
id: '1',
subject: 'Visible task',
description: 'Shown in web UI',
activeForm: 'Doing visible task',
status: 'in_progress',
owner: 'agent-1',
blocks: ['2'],
blockedBy: [],
},
{
id: '2',
subject: 'Internal task',
description: 'Hidden from web UI',
status: 'pending',
blocks: [],
blockedBy: [],
metadata: { _internal: true },
},
])
expect(message.type).toBe('task_state')
expect(message.task_list_id).toBe('tasklist')
expect(message.uuid).toEqual(expect.any(String))
expect(message.tasks).toEqual([
{
id: '1',
subject: 'Visible task',
description: 'Shown in web UI',
activeForm: 'Doing visible task',
status: 'in_progress',
owner: 'agent-1',
blocks: ['2'],
blockedBy: [],
},
])
})
test('builds a stable snapshot key for equivalent public tasks', () => {
const tasks = [
{
id: '2',
subject: 'Second',
description: 'Second task',
status: 'pending',
blocks: [],
blockedBy: [],
},
{
id: '1',
subject: 'First',
description: 'First task',
status: 'in_progress',
blocks: ['2'],
blockedBy: [],
},
{
id: 'internal',
subject: 'Internal task',
description: 'Hidden',
status: 'pending',
blocks: [],
blockedBy: [],
metadata: { _internal: true },
},
]
const firstKey = getTaskStateSnapshotKey('tasklist', tasks as any)
const secondKey = getTaskStateSnapshotKey(
'tasklist',
[...tasks].reverse() as any,
)
const message = buildTaskStateMessage('tasklist', tasks as any)
expect(firstKey).toBe(secondKey)
expect(message.tasks.map(task => task.id)).toEqual(['1', '2'])
})
})