wip: agui integration

This commit is contained in:
2026-02-25 19:51:58 +01:00
parent 5efbcfe03a
commit fcdf869a7c
59 changed files with 3467 additions and 267 deletions

View File

@@ -0,0 +1,58 @@
import { describe, expect, it, vi } from 'vitest';
import { act, renderHook } from '@testing-library/react';
import { useChatMessageSender } from '../../../src/renderer/navigation/useChatMessageSender';
describe('useChatMessageSender', () => {
it('sends message and clears error on success', async () => {
const chatService = {
sendMessage: vi.fn().mockResolvedValue({ success: true, message: 'ok' }),
};
const { result } = renderHook(() => useChatMessageSender({ chatService }));
let response: Awaited<ReturnType<typeof result.current.sendMessage>> | null = null;
await act(async () => {
response = await result.current.sendMessage({
conversationId: 'conv-1',
message: 'hello',
});
});
expect(response?.success).toBe(true);
expect(response?.message).toBe('ok');
expect(result.current.lastError).toBeNull();
});
it('stores normalized error when send fails', async () => {
const chatService = {
sendMessage: vi.fn().mockResolvedValue({ success: false, error: 'boom' }),
};
const { result } = renderHook(() => useChatMessageSender({ chatService }));
await act(async () => {
await result.current.sendMessage({
conversationId: 'conv-1',
message: 'hello',
});
});
expect(result.current.lastError).toBe('boom');
});
it('returns default error when service is unavailable', async () => {
const { result } = renderHook(() => useChatMessageSender({ chatService: null }));
let response: Awaited<ReturnType<typeof result.current.sendMessage>> | null = null;
await act(async () => {
response = await result.current.sendMessage({
conversationId: 'conv-1',
message: 'hello',
});
});
expect(response?.success).toBe(false);
expect(response?.error).toContain('Chat service unavailable');
expect(result.current.lastError).toContain('Chat service unavailable');
});
});