Files
bDS/tests/renderer/navigation/useChatSurfaceState.test.tsx
2026-02-25 19:51:58 +01:00

41 lines
1.7 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { act, renderHook } from '@testing-library/react';
import { useChatSurfaceState } from '../../../src/renderer/navigation/useChatSurfaceState';
describe('useChatSurfaceState', () => {
it('tracks a full user-assistant turn including streaming and tool calls', () => {
const { result } = renderHook(() => useChatSurfaceState());
act(() => {
result.current.beginUserTurn('conv-1', 'hello');
result.current.appendStreamDelta('A');
result.current.appendStreamDelta('B');
result.current.recordToolCall('list_posts', { query: 'hello' });
result.current.recordToolResult('list_posts');
result.current.finalizeAssistantTurn('conv-1', 'AB');
});
expect(result.current.messages).toHaveLength(2);
expect(result.current.messages[0].role).toBe('user');
expect(result.current.messages[1].role).toBe('assistant');
expect(result.current.messages[1].content).toBe('AB');
expect(result.current.messages[1].toolCalls).toContain('list_posts');
expect(result.current.isStreaming).toBe(false);
expect(result.current.streamingContent).toBe('');
});
it('aborts a stream into a partial assistant message', () => {
const { result } = renderHook(() => useChatSurfaceState());
act(() => {
result.current.beginUserTurn('conv-2', 'hello');
result.current.appendStreamDelta('partial content');
result.current.abortStreaming('conv-2', 'Cancelled');
});
expect(result.current.messages).toHaveLength(2);
expect(result.current.messages[1].content).toContain('partial content');
expect(result.current.messages[1].content).toContain('Cancelled');
});
});