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