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.

79 lines (65 loc) 3.19 kB
import { describe, expect, it } from 'vitest'; import { hydrationPrompt } from './promptTemplate'; describe('hydrationPrompt', () => { it('should replace basic variables', () => { const prompt = 'Hello {{name}}!'; const context = { name: 'World' }; expect(hydrationPrompt(prompt, context)).toBe('Hello World!'); }); it('should replace missing variables with an empty string', () => { const prompt = 'Hello {{name}}! Your age is {{age}}.'; const context = { name: 'World' }; expect(hydrationPrompt(prompt, context)).toBe('Hello World! Your age is .'); }); it('should replace nested variables', () => { const prompt = 'User: {{user.name}}, Role: {{user.role.name}}'; const context = { user: { name: 'Alice', role: { name: 'Admin' } } }; expect(hydrationPrompt(prompt, context)).toBe('User: Alice, Role: Admin'); }); it('should handle missing nested variables gracefully', () => { const prompt = 'User: {{user.name}}, City: {{user.address.city}}'; const context = { user: { name: 'Bob' } }; expect(hydrationPrompt(prompt, context)).toBe('User: Bob, City: '); }); it('should handle multiple variables, some missing', () => { const prompt = '{{greeting}} {{user.name}}. Welcome to {{place}}. Your id is {{id}}'; const context = { greeting: 'Hi', user: { name: 'Charlie' } }; expect(hydrationPrompt(prompt, context)).toBe('Hi Charlie. Welcome to . Your id is '); }); it('should handle empty context', () => { const prompt = 'Hello {{name}}!'; const context = {}; expect(hydrationPrompt(prompt, context)).toBe('Hello !'); }); it('should handle empty prompt string', () => { const prompt = ''; const context = { name: 'World' }; expect(hydrationPrompt(prompt, context)).toBe(''); }); it('should handle prompt with no variables', () => { const prompt = 'This is a plain string.'; const context = { name: 'World' }; expect(hydrationPrompt(prompt, context)).toBe('This is a plain string.'); }); it('should handle different data types in context', () => { const prompt = 'Count: {{count}}, Active: {{isActive}}, User: {{user}}'; const context = { count: 123, isActive: true, user: null }; // Note: null becomes "null" when converted to string expect(hydrationPrompt(prompt, context)).toBe('Count: 123, Active: true, User: null'); }); it('should handle keys with leading/trailing whitespace', () => { const prompt = 'Value: {{ spacedKey }}'; const context = { spacedKey: 'Trimmed' }; expect(hydrationPrompt(prompt, context)).toBe('Value: Trimmed'); }); it('should replace variables with undefined value with an empty string', () => { const prompt = 'Name: {{name}}, Age: {{age}}'; const context = { name: 'Defined', age: undefined }; expect(hydrationPrompt(prompt, context)).toBe('Name: Defined, Age: '); }); it('should handle complex nested structures and missing parts', () => { const prompt = 'Data: {{a.b.c}}, Missing: {{x.y.z}}, Partial: {{a.b.d}}'; const context = { a: { b: { c: 'Found' } } }; expect(hydrationPrompt(prompt, context)).toBe('Data: Found, Missing: , Partial: '); }); });