68 lines
2.0 KiB
TypeScript
68 lines
2.0 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
|
|
import { useChatStore } from '@/lib/store';
|
|
|
|
describe('chat store process event ingestion', () => {
|
|
beforeEach(() => {
|
|
useChatStore.setState({
|
|
sessionId: 'web:alpha',
|
|
inputDrafts: {},
|
|
processRuns: [],
|
|
processEvents: [],
|
|
processArtifacts: [],
|
|
selectedRunId: null,
|
|
selectedArtifactId: null,
|
|
lastCancelAck: null,
|
|
});
|
|
});
|
|
|
|
afterEach(() => {
|
|
useChatStore.setState({
|
|
sessionId: 'web:default',
|
|
inputDrafts: {},
|
|
processRuns: [],
|
|
processEvents: [],
|
|
processArtifacts: [],
|
|
selectedRunId: null,
|
|
selectedArtifactId: null,
|
|
lastCancelAck: null,
|
|
});
|
|
});
|
|
|
|
it('assigns session_id when the first observed event is progress', () => {
|
|
useChatStore.getState().ingestProcessEvent({
|
|
type: 'process_run_progress',
|
|
session_id: 'web:alpha',
|
|
run_id: 'run-progress-only',
|
|
parent_run_id: null,
|
|
actor_type: 'agent',
|
|
actor_id: 'agent-a',
|
|
actor_name: 'Agent A',
|
|
text: 'still working',
|
|
created_at: '2026-03-24T11:20:00.000Z',
|
|
});
|
|
|
|
expect(useChatStore.getState().processRuns).toEqual([
|
|
expect.objectContaining({
|
|
run_id: 'run-progress-only',
|
|
session_id: 'web:alpha',
|
|
status: 'running',
|
|
title: 'Agent A',
|
|
}),
|
|
]);
|
|
});
|
|
|
|
it('stores input drafts per session', () => {
|
|
useChatStore.getState().setInputDraft('web:alpha', 'message for alpha');
|
|
useChatStore.getState().setInputDraft('web:beta', 'message for beta');
|
|
|
|
expect(useChatStore.getState().getInputDraft('web:alpha')).toBe('message for alpha');
|
|
expect(useChatStore.getState().getInputDraft('web:beta')).toBe('message for beta');
|
|
|
|
useChatStore.getState().clearInputDraft('web:alpha');
|
|
|
|
expect(useChatStore.getState().getInputDraft('web:alpha')).toBe('');
|
|
expect(useChatStore.getState().getInputDraft('web:beta')).toBe('message for beta');
|
|
});
|
|
});
|