@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.
106 lines (90 loc) • 3.81 kB
text/typescript
import { describe, expect, it } from 'vitest';
import { parserPluginSettings } from './settings';
describe('parserPluginSettings', () => {
it('should return an empty object when input is undefined', () => {
expect(parserPluginSettings()).toEqual({});
});
it('should return an empty object when input is an empty string', () => {
expect(parserPluginSettings('')).toEqual({});
});
it('should parse plugin settings from a well-formed string', () => {
const input = 'plugin1:key1=value1;key2=value2,plugin2:key3=value3';
const expected = {
plugin1: { key1: 'value1', key2: 'value2' },
plugin2: { key3: 'value3' },
};
expect(parserPluginSettings(input)).toEqual(expected);
});
it('should handle strings with Chinese commas', () => {
const input = 'plugin1:key1=value1;key2=value2,plugin2:key3=value3';
const expected = {
plugin1: { key1: 'value1', key2: 'value2' },
plugin2: { key3: 'value3' },
};
expect(parserPluginSettings(input)).toEqual(expected);
});
it('should ignore empty segments', () => {
const input = 'plugin1:key1=value1;key2=value2,,,plugin2:key3=value3';
const expected = {
plugin1: { key1: 'value1', key2: 'value2' },
plugin2: { key3: 'value3' },
};
expect(parserPluginSettings(input)).toEqual(expected);
});
it('should merge settings for the same pluginId', () => {
const input = 'plugin1:key1=value1;key2=value2,plugin1:key3=value3;key4=value4';
const expected = {
plugin1: { key1: 'value1', key2: 'value2', key3: 'value3', key4: 'value4' },
};
expect(parserPluginSettings(input)).toEqual(expected);
});
it('should override previous values if the same key appears again for the same pluginId', () => {
const input = 'plugin1:key1=value1;key2=value2,plugin1:key2=newValue2;key3=value3';
const expected = {
plugin1: { key1: 'value1', key2: 'newValue2', key3: 'value3' },
};
expect(parserPluginSettings(input)).toEqual(expected);
});
describe('error senses', () => {
it('should ignore settings with incorrect key-value format', () => {
const input = 'plugin1:key1=value1;incorrectFormat,plugin2:key2=value2';
const expected = {
plugin1: { key1: 'value1' },
plugin2: { key2: 'value2' },
};
expect(parserPluginSettings(input)).toEqual(expected);
});
it('should handle extra separators gracefully', () => {
const input = 'plugin1:key1=value1==value1.1;key2=value2;,plugin2:key3=value3';
const expected = {
plugin1: { key1: 'value1', key2: 'value2' },
plugin2: { key3: 'value3' },
};
expect(parserPluginSettings(input)).toEqual(expected);
});
it('should ignore settings with empty keys or values', () => {
const input = 'plugin1:=value1;key2=,plugin2:key3=value3';
const expected = {
plugin2: { key3: 'value3' },
};
expect(parserPluginSettings(input)).toEqual(expected);
});
it('should ignore leading and trailing whitespace in keys and values', () => {
const input = ' plugin1 : key1 = value1 ; key2 = value2 , plugin2 : key3=value3 ';
const expected = {
plugin1: { key1: 'value1', key2: 'value2' },
plugin2: { key3: 'value3' },
};
expect(parserPluginSettings(input)).toEqual(expected);
});
it('should handle special characters in keys and values', () => {
const input = 'plugin1:key1=value1+special;key2=value2#special,plugin2:key3=value3/special';
const expected = {
plugin1: { key1: 'value1+special', key2: 'value2#special' },
plugin2: { key3: 'value3/special' },
};
expect(parserPluginSettings(input)).toEqual(expected);
});
// ... (additional test cases as needed)
});
});