UNPKG

@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.

185 lines (152 loc) • 7.33 kB
import { describe, expect, it } from 'vitest'; import { DEFAULT_AGENT_CHAT_CONFIG, DEFAULT_AGENT_CONFIG } from '@/const/settings'; import { AgentStoreState, initialState } from '@/store/agent/initialState'; import { LobeAgentChatConfig, LobeAgentConfig } from '@/types/agent'; import { merge } from '@/utils/merge'; import { agentChatConfigSelectors, currentAgentChatConfig } from './chatConfig'; // Helper function to create mock state const createMockState = ( chatConfig?: Partial<LobeAgentChatConfig>, config?: Partial<LobeAgentConfig>, ): AgentStoreState => merge(initialState, { agentMap: { agent1: merge(DEFAULT_AGENT_CONFIG, { ...config, chatConfig }), }, activeId: 'agent1', }) as AgentStoreState; describe('agentChatConfigSelectors', () => { describe('currentAgentChatConfig', () => { it('should return default object when chatConfig is not defined', () => { const state = createMockState({}); expect(currentAgentChatConfig(state)).toEqual(DEFAULT_AGENT_CHAT_CONFIG); }); it('should return the chatConfig when defined', () => { const chatConfig = { historyCount: 5 }; const state = createMockState(chatConfig); expect(currentAgentChatConfig(state).historyCount).toEqual(5); }); }); describe('enableHistoryCount', () => { it('should return the enableHistoryCount value when defined', () => { const state = createMockState({ enableHistoryCount: false }); expect(agentChatConfigSelectors.enableHistoryCount(state)).toBe(false); }); it('should return false value when enable context caching with claude models', () => { const state = createMockState( { enableHistoryCount: true, disableContextCaching: false }, { model: 'claude-3-7-sonnet-20250219' }, ); expect(agentChatConfigSelectors.enableHistoryCount(merge(state))).toBe(false); }); it('should return true value when enable context caching with other models', () => { const state = createMockState( { enableHistoryCount: true, disableContextCaching: false }, { model: 'gpt-4o-min' }, ); expect(agentChatConfigSelectors.enableHistoryCount(merge(state))).toBe(true); }); it('should return false when enable search with claude 3.7 models', () => { const state = createMockState( { enableHistoryCount: true, disableContextCaching: true, searchMode: 'auto' }, { model: 'claude-3-7-sonnet-20250219' }, ); expect(agentChatConfigSelectors.enableHistoryCount(merge(state))).toBe(false); }); it('should return true when disable search with claude 3.7 models', () => { const state = createMockState( { enableHistoryCount: true, disableContextCaching: true, searchMode: 'off' }, { model: 'claude-3-7-sonnet-20250219' }, ); expect(agentChatConfigSelectors.enableHistoryCount(merge(state))).toBe(true); }); it('should return true when enable search with claude 3.5 models', () => { const state = createMockState( { enableHistoryCount: true, disableContextCaching: true, searchMode: 'auto' }, { model: 'claude-3-5-sonnet-latest' }, ); expect(agentChatConfigSelectors.enableHistoryCount(merge(state))).toBe(true); }); }); describe('historyCount', () => { it('should return undefined when historyCount is not defined', () => { const state = createMockState(); expect(agentChatConfigSelectors.historyCount(state)).toBe(20); }); it('should return the historyCount value when defined', () => { const state = createMockState({ historyCount: 20 }); expect(agentChatConfigSelectors.historyCount(state)).toBe(20); }); }); describe('agentSearchMode', () => { it('should return "off" when searchMode is not defined', () => { const state = createMockState(); expect(agentChatConfigSelectors.agentSearchMode(state)).toBe('off'); }); it('should return the searchMode value when defined', () => { const state = createMockState({ searchMode: 'auto' }); expect(agentChatConfigSelectors.agentSearchMode(state)).toBe('auto'); }); }); describe('useModelBuiltinSearch', () => { it('should return undefined when useModelBuiltinSearch is not defined', () => { const state = createMockState(); expect(agentChatConfigSelectors.useModelBuiltinSearch(state)).toBeUndefined(); }); it('should return the useModelBuiltinSearch value when defined', () => { const state = createMockState({ useModelBuiltinSearch: true }); expect(agentChatConfigSelectors.useModelBuiltinSearch(state)).toBe(true); }); }); describe('isAgentEnableSearch', () => { it('should return false when searchMode is "off"', () => { const state = createMockState({ searchMode: 'off' }); expect(agentChatConfigSelectors.isAgentEnableSearch(state)).toBe(false); }); it('should return true when searchMode is not "off"', () => { const state = createMockState({ searchMode: 'auto' }); expect(agentChatConfigSelectors.isAgentEnableSearch(state)).toBe(true); }); it('should return false when searchMode is undefined (defaults to "off")', () => { const state = createMockState(); expect(agentChatConfigSelectors.isAgentEnableSearch(state)).toBe(false); }); }); describe('displayMode', () => { it('should return "chat" when displayMode is not defined', () => { const state = createMockState(); expect(agentChatConfigSelectors.displayMode(state)).toBe('chat'); }); it('should return the displayMode value when defined', () => { const state = createMockState({ displayMode: 'docs' }); expect(agentChatConfigSelectors.displayMode(state)).toBe('docs'); }); }); describe('enableHistoryDivider', () => { it('should return false when enableHistoryCount is false', () => { const state = createMockState({ enableHistoryCount: false, historyCount: 5 }); const selector = agentChatConfigSelectors.enableHistoryDivider(10, 5); expect(selector(state)).toBe(false); }); it('should return false when historyLength is less than or equal to historyCount', () => { const state = createMockState({ enableHistoryCount: true, historyCount: 10 }); const selector = agentChatConfigSelectors.enableHistoryDivider(10, 5); expect(selector(state)).toBe(false); }); it('should return false when currentIndex is not at the historyCount position', () => { const state = createMockState({ enableHistoryCount: true, historyCount: 5 }); const selector = agentChatConfigSelectors.enableHistoryDivider(10, 3); expect(selector(state)).toBe(false); }); it('should return true when all conditions are met', () => { const state = createMockState({ enableHistoryCount: true, historyCount: 5 }); const selector = agentChatConfigSelectors.enableHistoryDivider(10, 5); expect(selector(state)).toBe(true); }); it('should handle undefined or null historyCount', () => { const state = createMockState({ enableHistoryCount: true, historyCount: null as any }); const selector = agentChatConfigSelectors.enableHistoryDivider(10, 5); expect(selector(state)).toBe(false); }); }); });