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.

179 lines (149 loc) 4.52 kB
import { describe, expect, it } from 'vitest'; import { LOADING_FLAT } from '@/const/message'; import { ChatMessage } from '@/types/message'; import { generateMarkdown } from './template'; describe('generateMarkdown', () => { // 创建测试用的消息数据 const mockMessages = [ { id: '1', content: 'Hello', role: 'user', createdAt: Date.now(), }, { id: '2', content: 'Hi there', role: 'assistant', createdAt: Date.now(), }, { id: '3', content: LOADING_FLAT, role: 'assistant', createdAt: Date.now(), }, { id: '4', content: '{"result": "tool data"}', role: 'tool', createdAt: Date.now(), tool_call_id: 'tool1', }, { id: '5', content: 'Message with tools', role: 'assistant', createdAt: Date.now(), tools: [{ name: 'calculator', result: '42' }], }, ] as ChatMessage[]; const defaultParams = { messages: mockMessages, title: 'Chat Title', includeTool: false, includeUser: true, withSystemRole: false, withRole: false, systemRole: '', }; it('should generate basic markdown with title', () => { const result = generateMarkdown(defaultParams); expect(result).toContain('# Chat Title'); expect(result).toContain('Hello'); expect(result).toContain('Hi there'); }); it('should include system role when withSystemRole is true', () => { const systemRole = 'I am a helpful assistant'; const result = generateMarkdown({ ...defaultParams, withSystemRole: true, systemRole, }); expect(result).toContain('````md\nI am a helpful assistant\n````'); }); it('should not include system role when withSystemRole is false', () => { const systemRole = 'I am a helpful assistant'; const result = generateMarkdown({ ...defaultParams, withSystemRole: false, systemRole, }); expect(result).not.toContain('```\nI am a helpful assistant\n```'); }); it('should add role labels when withRole is true', () => { const result = generateMarkdown({ ...defaultParams, withRole: true, }); expect(result).toContain('##### User:'); expect(result).toContain('##### Assistant:'); }); it('should not add role labels when withRole is false', () => { const result = generateMarkdown({ ...defaultParams, withRole: false, }); expect(result).not.toContain('##### User:'); expect(result).not.toContain('##### Assistant:'); }); it('should include tool messages when includeTool is true', () => { const result = generateMarkdown({ ...defaultParams, includeTool: true, withRole: true, }); expect(result).toContain('##### Tools Calling:'); expect(result).toContain('```json\n{"result": "tool data"}\n```'); }); it('should exclude tool messages when includeTool is false', () => { const result = generateMarkdown({ ...defaultParams, includeTool: false, }); expect(result).not.toContain('{"result": "tool data"}'); }); it('should exclude user messages when includeUser is false', () => { const result = generateMarkdown({ ...defaultParams, includeUser: false, }); expect(result).not.toContain('Hello'); expect(result).toContain('Hi there'); }); it('should filter out loading messages', () => { const result = generateMarkdown(defaultParams); expect(result).not.toContain(LOADING_FLAT); }); it('should include tools data when includeTool is true', () => { const result = generateMarkdown({ ...defaultParams, includeTool: true, }); expect(result).toContain('"name": "calculator"'); expect(result).toContain('"result": "42"'); }); it('should handle empty messages array', () => { const result = generateMarkdown({ ...defaultParams, messages: [], }); expect(result).toContain('# Chat Title'); // Should not throw error and should contain at least the title }); it('should handle messages with special characters', () => { const messagesWithSpecialChars = [ { id: '1', content: '**Bold** *Italic* `Code`', role: 'user', createdAt: Date.now(), }, ] as ChatMessage[]; const result = generateMarkdown({ ...defaultParams, messages: messagesWithSpecialChars, }); expect(result).toContain('**Bold** *Italic* `Code`'); }); });