@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.
71 lines (66 loc) • 1.96 kB
text/typescript
import { LobeChatPluginManifest, LobeChatPluginMeta } from '@lobehub/chat-plugin-sdk';
import { describe, expect, it } from 'vitest';
import { ToolStoreState, initialState } from '../../initialState';
import { customPluginSelectors } from './selectors';
const mockState = {
...initialState,
pluginManifestLoading: {
'plugin-1': false,
'plugin-2': true,
},
installedPlugins: [
{
identifier: 'plugin-1',
type: 'plugin',
manifest: {
identifier: 'plugin-1',
api: [{ name: 'api-1' }],
type: 'default',
} as LobeChatPluginManifest,
},
{
identifier: 'plugin-2',
manifest: {
identifier: 'plugin-2',
api: [{ name: 'api-2' }],
type: 'default',
},
type: 'plugin',
},
],
pluginStoreList: [
{
identifier: 'plugin-1',
author: 'Author 1',
createdAt: '2021-01-01',
meta: { avatar: 'avatar-url-1', title: 'Plugin 1' },
homepage: 'http://homepage-1.com',
} as LobeChatPluginMeta,
{
identifier: 'plugin-2',
author: 'Author 2',
createdAt: '2022-02-02',
meta: { avatar: 'avatar-url-2', title: 'Plugin 2' },
homepage: 'http://homepage-2.com',
},
],
} as ToolStoreState;
describe('pluginSelectors', () => {
describe('isCustomPlugin', () => {
it('should return false for a non-custom plugin', () => {
const result = customPluginSelectors.isCustomPlugin('plugin-1')(mockState);
expect(result).toBe(false);
});
it('should return true for a custom plugin', () => {
const stateWithCustomPlugin = {
...mockState,
installedPlugins: [
...mockState.installedPlugins,
{ identifier: 'custom-plugin', type: 'customPlugin' },
],
} as ToolStoreState;
const result = customPluginSelectors.isCustomPlugin('custom-plugin')(stateWithCustomPlugin);
expect(result).toBe(true);
});
});
});