@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.
288 lines (245 loc) • 7.2 kB
text/typescript
import { HotkeyId } from '@/types/hotkey';
import { GlobalLLMProviderKey } from '@/types/user/settings';
import { UserStore } from '../../../store';
import { settingsSelectors } from './settings';
describe('settingsSelectors', () => {
describe('currentSettings', () => {
it('should merge DEFAULT_SETTINGS and s.settings correctly', () => {
const s = {
settings: {
avatar: 'avatar.jpg',
fontSize: 14,
language: 'en-US',
neutralColor: 'sand',
password: 'password123',
primaryColor: 'blue',
themeMode: 'light',
defaultAgent: {
config: {
systemRole: '',
model: 'gpt-3.5-turbo',
params: {},
tts: {
showAllLocaleVoice: false,
sttLocale: 'auto',
ttsService: 'openai',
voice: {
openai: 'alloy',
},
},
},
meta: {
avatar: 'Default Agent',
description: 'Default agent for testing',
},
},
tts: {
openAI: {
sttModel: 'whisper-1',
ttsModel: 'tts-1',
},
sttAutoStop: true,
sttServer: 'openai',
},
languageModel: {
openAI: {
OPENAI_API_KEY: 'openai-api-key',
endpoint: 'https://openai-endpoint.com',
models: ['gpt-3.5-turbo'],
},
},
},
} as unknown as UserStore;
const result = settingsSelectors.currentSettings(s);
expect(result).toMatchSnapshot();
});
});
describe('defaultAgent', () => {
it('should merge DEFAULT_AGENT and s.settings.defaultAgent correctly', () => {
const s = {
settings: {
defaultAgent: {
config: {
systemRole: 'user',
model: 'gpt-3.5-turbo',
},
meta: {
avatar: 'agent-avatar.jpg',
description: 'Test agent',
},
},
},
} as unknown as UserStore;
const result = settingsSelectors.defaultAgent(s);
expect(result).toMatchSnapshot();
});
});
describe('defaultAgentMeta', () => {
it('should merge DEFAULT_AGENT_META and defaultAgent(s).meta correctly', () => {
const s = {
settings: {
defaultAgent: {
meta: {
avatar: 'agent-avatar.jpg',
description: 'Test agent',
},
},
},
} as unknown as UserStore;
const result = settingsSelectors.defaultAgentMeta(s);
expect(result).toMatchSnapshot();
});
});
describe('currentTTS', () => {
it('should merge DEFAULT_TTS_CONFIG and s.settings.tts correctly', () => {
const s = {
settings: {
tts: {
sttAutoStop: false,
openAI: {
sttModel: 'whisper-2',
},
},
},
} as unknown as UserStore;
const result = settingsSelectors.currentTTS(s);
expect(result).toMatchSnapshot();
});
});
describe('dalleConfig', () => {
it('should return the dalle configuration', () => {
const s = {
settings: {
tool: {
dalle: {
apiKey: 'dalle-api-key',
autoGenerate: true,
},
},
},
} as unknown as UserStore;
const result = settingsSelectors.dalleConfig(s);
expect(result).toMatchSnapshot();
});
});
describe('isDalleAutoGenerating', () => {
it('should return the autoGenerate flag from dalle configuration', () => {
const s = {
settings: {
tool: {
dalle: {
autoGenerate: true,
},
},
},
} as unknown as UserStore;
const result = settingsSelectors.isDalleAutoGenerating(s);
expect(result).toBe(true);
});
});
describe('getProviderConfigById', () => {
it('should return the provider config for a given provider id', () => {
const providerConfig = {
OPENAI_API_KEY: 'test-key',
endpoint: 'https://test-endpoint.com',
};
const s = {
settings: {
languageModel: {
openAI: providerConfig,
},
},
} as unknown as UserStore;
const result = settingsSelectors.providerConfig('openAI')(s);
expect(result).toEqual(providerConfig);
});
it('should return undefined if provider does not exist', () => {
const s = {
settings: {
languageModel: {},
},
} as unknown as UserStore;
const result = settingsSelectors.providerConfig(
'nonExistentProvider' as GlobalLLMProviderKey,
)(s);
expect(result).toBeUndefined();
});
});
describe('defaultAgentConfig', () => {
it('should merge DEFAULT_AGENT_CONFIG and defaultAgent(s).config correctly', () => {
const s = {
settings: {
defaultAgent: {
config: {
systemRole: 'custom role',
model: 'gpt-4',
params: {
temperature: 0.7,
},
},
},
},
} as unknown as UserStore;
const result = settingsSelectors.defaultAgentConfig(s);
expect(result).toMatchSnapshot();
});
});
describe('exportSettings', () => {
it('should return the current settings', () => {
const s = {
defaultSettings: {
fontSize: 16,
},
settings: {
fontSize: 14,
language: 'en-US',
},
} as unknown as UserStore;
const result = settingsSelectors.exportSettings(s);
expect(result).toEqual({
fontSize: 14,
language: 'en-US',
});
});
});
describe('currentSystemAgent', () => {
it('should merge DEFAULT_SYSTEM_AGENT_CONFIG and s.settings.systemAgent correctly', () => {
const s = {
settings: {
systemAgent: {
enableAutoReply: true,
replyMessage: 'Custom auto reply',
},
},
} as unknown as UserStore;
const result = settingsSelectors.currentSystemAgent(s);
expect(result).toMatchSnapshot();
});
});
describe('getHotkeyById', () => {
it('should return the hotkey config for a given id', () => {
const hotkeyConfig = {
hotkey: 'ctrl+shift+f',
scope: 'global',
};
const s = {
settings: {
hotkey: {
newChat: hotkeyConfig,
},
},
} as unknown as UserStore;
const result = settingsSelectors.getHotkeyById('newChat' as HotkeyId)(s);
expect(result).toMatchSnapshot();
});
it('should return default hotkey if not defined in settings', () => {
const s = {
settings: {
hotkey: {},
},
} as unknown as UserStore;
const result = settingsSelectors.getHotkeyById('newChat' as HotkeyId)(s);
expect(result).toMatchSnapshot();
});
});
});