Files
beaver_project/app-instance/frontend/lib/store.test.ts

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');
});
});