@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
108 lines (88 loc) • 3.13 kB
text/typescript
import { act, renderHook } from '@testing-library/react';
import { describe, expect, it, vi } from 'vitest';
import { useChatStore } from '../../../../store';
describe('Cancel send message functionality tests', () => {
describe('cancelSendMessageInServer', () => {
it('should be able to call cancel method normally', () => {
const { result } = renderHook(() => useChatStore());
// Initial state setup
act(() => {
useChatStore.setState({
activeId: 'session-1',
activeTopicId: 'topic-1',
mainSendMessageOperations: {},
});
});
// Test method exists
expect(typeof result.current.cancelSendMessageInServer).toBe('function');
// Test method can be called safely
expect(() => {
act(() => {
result.current.cancelSendMessageInServer();
});
}).not.toThrow();
});
it('should be able to call with specified topic ID', () => {
const { result } = renderHook(() => useChatStore());
act(() => {
useChatStore.setState({
activeId: 'session-1',
mainSendMessageOperations: {},
});
});
expect(() => {
act(() => {
result.current.cancelSendMessageInServer('topic-2');
});
}).not.toThrow();
});
});
describe('clearSendMessageError', () => {
it('should be able to call clear error method normally', () => {
const { result } = renderHook(() => useChatStore());
act(() => {
useChatStore.setState({
activeId: 'session-1',
activeTopicId: 'topic-1',
mainSendMessageOperations: {},
});
});
expect(typeof result.current.clearSendMessageError).toBe('function');
expect(() => {
act(() => {
result.current.clearSendMessageError();
});
}).not.toThrow();
});
});
describe('Internal methods', () => {
it('should have internal state management methods', () => {
const { result } = renderHook(() => useChatStore());
expect(typeof result.current.internal_toggleSendMessageOperation).toBe('function');
expect(typeof result.current.internal_updateSendMessageOperation).toBe('function');
});
it('internal_toggleSendMessageOperation should work normally', () => {
const { result } = renderHook(() => useChatStore());
act(() => {
useChatStore.setState({ mainSendMessageOperations: {} });
});
expect(() => {
act(() => {
const abortController = result.current.internal_toggleSendMessageOperation(
'test-key',
true,
);
expect(abortController).toBeInstanceOf(AbortController);
});
}).not.toThrow();
});
});
describe('State structure', () => {
it('should have mainSendMessageOperations state', () => {
const { result } = renderHook(() => useChatStore());
// Ensure state exists
expect(result.current.mainSendMessageOperations).toBeDefined();
expect(typeof result.current.mainSendMessageOperations).toBe('object');
});
});
});