mirror of
https://github.com/AutoMaker-Org/automaker.git
synced 2026-01-31 06:42:03 +00:00
241 lines
8.7 KiB
TypeScript
241 lines
8.7 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import {
|
|
getEnhancementPrompt,
|
|
getSystemPrompt,
|
|
getExamples,
|
|
buildUserPrompt,
|
|
isValidEnhancementMode,
|
|
getAvailableEnhancementModes,
|
|
IMPROVE_SYSTEM_PROMPT,
|
|
TECHNICAL_SYSTEM_PROMPT,
|
|
SIMPLIFY_SYSTEM_PROMPT,
|
|
ACCEPTANCE_SYSTEM_PROMPT,
|
|
IMPROVE_EXAMPLES,
|
|
TECHNICAL_EXAMPLES,
|
|
SIMPLIFY_EXAMPLES,
|
|
ACCEPTANCE_EXAMPLES,
|
|
type EnhancementMode,
|
|
} from '@/lib/enhancement-prompts.js';
|
|
|
|
const ENHANCEMENT_MODES: EnhancementMode[] = [
|
|
'improve',
|
|
'technical',
|
|
'simplify',
|
|
'acceptance',
|
|
'ux-reviewer',
|
|
];
|
|
|
|
describe('enhancement-prompts.ts', () => {
|
|
describe('System Prompt Constants', () => {
|
|
it('should have non-empty improve system prompt', () => {
|
|
expect(IMPROVE_SYSTEM_PROMPT).toBeDefined();
|
|
expect(IMPROVE_SYSTEM_PROMPT.length).toBeGreaterThan(100);
|
|
expect(IMPROVE_SYSTEM_PROMPT).toContain('ANALYZE');
|
|
expect(IMPROVE_SYSTEM_PROMPT).toContain('CLARIFY');
|
|
});
|
|
|
|
it('should have non-empty technical system prompt', () => {
|
|
expect(TECHNICAL_SYSTEM_PROMPT).toBeDefined();
|
|
expect(TECHNICAL_SYSTEM_PROMPT.length).toBeGreaterThan(100);
|
|
expect(TECHNICAL_SYSTEM_PROMPT).toContain('technical');
|
|
});
|
|
|
|
it('should have non-empty simplify system prompt', () => {
|
|
expect(SIMPLIFY_SYSTEM_PROMPT).toBeDefined();
|
|
expect(SIMPLIFY_SYSTEM_PROMPT.length).toBeGreaterThan(100);
|
|
expect(SIMPLIFY_SYSTEM_PROMPT).toContain('simplify');
|
|
});
|
|
|
|
it('should have non-empty acceptance system prompt', () => {
|
|
expect(ACCEPTANCE_SYSTEM_PROMPT).toBeDefined();
|
|
expect(ACCEPTANCE_SYSTEM_PROMPT.length).toBeGreaterThan(100);
|
|
expect(ACCEPTANCE_SYSTEM_PROMPT).toContain('acceptance criteria');
|
|
});
|
|
});
|
|
|
|
describe('Example Constants', () => {
|
|
it('should have improve examples with input and output', () => {
|
|
expect(IMPROVE_EXAMPLES).toBeDefined();
|
|
expect(IMPROVE_EXAMPLES.length).toBeGreaterThan(0);
|
|
IMPROVE_EXAMPLES.forEach((example) => {
|
|
expect(example.input).toBeDefined();
|
|
expect(example.output).toBeDefined();
|
|
expect(example.input.length).toBeGreaterThan(0);
|
|
expect(example.output.length).toBeGreaterThan(0);
|
|
});
|
|
});
|
|
|
|
it('should have technical examples with input and output', () => {
|
|
expect(TECHNICAL_EXAMPLES).toBeDefined();
|
|
expect(TECHNICAL_EXAMPLES.length).toBeGreaterThan(0);
|
|
TECHNICAL_EXAMPLES.forEach((example) => {
|
|
expect(example.input).toBeDefined();
|
|
expect(example.output).toBeDefined();
|
|
});
|
|
});
|
|
|
|
it('should have simplify examples with input and output', () => {
|
|
expect(SIMPLIFY_EXAMPLES).toBeDefined();
|
|
expect(SIMPLIFY_EXAMPLES.length).toBeGreaterThan(0);
|
|
SIMPLIFY_EXAMPLES.forEach((example) => {
|
|
expect(example.input).toBeDefined();
|
|
expect(example.output).toBeDefined();
|
|
});
|
|
});
|
|
|
|
it('should have acceptance examples with input and output', () => {
|
|
expect(ACCEPTANCE_EXAMPLES).toBeDefined();
|
|
expect(ACCEPTANCE_EXAMPLES.length).toBeGreaterThan(0);
|
|
ACCEPTANCE_EXAMPLES.forEach((example) => {
|
|
expect(example.input).toBeDefined();
|
|
expect(example.output).toBeDefined();
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('getEnhancementPrompt', () => {
|
|
it('should return config for improve mode', () => {
|
|
const config = getEnhancementPrompt('improve');
|
|
expect(config.systemPrompt).toBe(IMPROVE_SYSTEM_PROMPT);
|
|
expect(config.description).toContain('clear');
|
|
});
|
|
|
|
it('should return config for technical mode', () => {
|
|
const config = getEnhancementPrompt('technical');
|
|
expect(config.systemPrompt).toBe(TECHNICAL_SYSTEM_PROMPT);
|
|
expect(config.description).toContain('technical');
|
|
});
|
|
|
|
it('should return config for simplify mode', () => {
|
|
const config = getEnhancementPrompt('simplify');
|
|
expect(config.systemPrompt).toBe(SIMPLIFY_SYSTEM_PROMPT);
|
|
expect(config.description).toContain('concise');
|
|
});
|
|
|
|
it('should return config for acceptance mode', () => {
|
|
const config = getEnhancementPrompt('acceptance');
|
|
expect(config.systemPrompt).toBe(ACCEPTANCE_SYSTEM_PROMPT);
|
|
expect(config.description).toContain('acceptance');
|
|
});
|
|
|
|
it('should handle case-insensitive mode', () => {
|
|
const config = getEnhancementPrompt('IMPROVE');
|
|
expect(config.systemPrompt).toBe(IMPROVE_SYSTEM_PROMPT);
|
|
});
|
|
|
|
it('should fall back to improve for invalid mode', () => {
|
|
const config = getEnhancementPrompt('invalid-mode');
|
|
expect(config.systemPrompt).toBe(IMPROVE_SYSTEM_PROMPT);
|
|
});
|
|
|
|
it('should fall back to improve for empty string', () => {
|
|
const config = getEnhancementPrompt('');
|
|
expect(config.systemPrompt).toBe(IMPROVE_SYSTEM_PROMPT);
|
|
});
|
|
});
|
|
|
|
describe('getSystemPrompt', () => {
|
|
it('should return correct system prompt for each mode', () => {
|
|
expect(getSystemPrompt('improve')).toBe(IMPROVE_SYSTEM_PROMPT);
|
|
expect(getSystemPrompt('technical')).toBe(TECHNICAL_SYSTEM_PROMPT);
|
|
expect(getSystemPrompt('simplify')).toBe(SIMPLIFY_SYSTEM_PROMPT);
|
|
expect(getSystemPrompt('acceptance')).toBe(ACCEPTANCE_SYSTEM_PROMPT);
|
|
});
|
|
});
|
|
|
|
describe('getExamples', () => {
|
|
it('should return correct examples for each mode', () => {
|
|
expect(getExamples('improve')).toBe(IMPROVE_EXAMPLES);
|
|
expect(getExamples('technical')).toBe(TECHNICAL_EXAMPLES);
|
|
expect(getExamples('simplify')).toBe(SIMPLIFY_EXAMPLES);
|
|
expect(getExamples('acceptance')).toBe(ACCEPTANCE_EXAMPLES);
|
|
});
|
|
|
|
it('should return arrays with example objects', () => {
|
|
const modes: EnhancementMode[] = ['improve', 'technical', 'simplify', 'acceptance'];
|
|
modes.forEach((mode) => {
|
|
const examples = getExamples(mode);
|
|
expect(Array.isArray(examples)).toBe(true);
|
|
expect(examples.length).toBeGreaterThan(0);
|
|
});
|
|
});
|
|
});
|
|
|
|
describe('buildUserPrompt', () => {
|
|
const testText = 'Add a logout button';
|
|
|
|
it('should build prompt with examples by default', () => {
|
|
const prompt = buildUserPrompt('improve', testText);
|
|
expect(prompt).toContain('Example 1:');
|
|
expect(prompt).toContain(testText);
|
|
expect(prompt).toContain('Now, please enhance the following task description:');
|
|
});
|
|
|
|
it('should build prompt without examples when includeExamples is false', () => {
|
|
const prompt = buildUserPrompt('improve', testText, false);
|
|
expect(prompt).not.toContain('Example 1:');
|
|
expect(prompt).toContain(testText);
|
|
expect(prompt).toContain('Please enhance the following task description:');
|
|
});
|
|
|
|
it('should include all examples for improve mode', () => {
|
|
const prompt = buildUserPrompt('improve', testText);
|
|
IMPROVE_EXAMPLES.forEach((example, index) => {
|
|
expect(prompt).toContain(`Example ${index + 1}:`);
|
|
expect(prompt).toContain(example.input);
|
|
});
|
|
});
|
|
|
|
it('should include separator between examples', () => {
|
|
const prompt = buildUserPrompt('improve', testText);
|
|
expect(prompt).toContain('---');
|
|
});
|
|
|
|
it('should work with all enhancement modes', () => {
|
|
ENHANCEMENT_MODES.forEach((mode) => {
|
|
const prompt = buildUserPrompt(mode, testText);
|
|
expect(prompt).toContain(testText);
|
|
expect(prompt.length).toBeGreaterThan(100);
|
|
});
|
|
});
|
|
|
|
it('should preserve the original text exactly', () => {
|
|
const specialText = 'Add feature with special chars: <>&"\'';
|
|
const prompt = buildUserPrompt('improve', specialText);
|
|
expect(prompt).toContain(specialText);
|
|
});
|
|
});
|
|
|
|
describe('isValidEnhancementMode', () => {
|
|
it('should return true for valid modes', () => {
|
|
expect(isValidEnhancementMode('improve')).toBe(true);
|
|
expect(isValidEnhancementMode('technical')).toBe(true);
|
|
expect(isValidEnhancementMode('simplify')).toBe(true);
|
|
expect(isValidEnhancementMode('acceptance')).toBe(true);
|
|
expect(isValidEnhancementMode('ux-reviewer')).toBe(true);
|
|
});
|
|
|
|
it('should return false for invalid modes', () => {
|
|
expect(isValidEnhancementMode('invalid')).toBe(false);
|
|
expect(isValidEnhancementMode('IMPROVE')).toBe(false); // case-sensitive
|
|
expect(isValidEnhancementMode('')).toBe(false);
|
|
expect(isValidEnhancementMode('random')).toBe(false);
|
|
});
|
|
});
|
|
|
|
describe('getAvailableEnhancementModes', () => {
|
|
it('should return all enhancement modes', () => {
|
|
const modes = getAvailableEnhancementModes();
|
|
expect(modes).toHaveLength(ENHANCEMENT_MODES.length);
|
|
ENHANCEMENT_MODES.forEach((mode) => {
|
|
expect(modes).toContain(mode);
|
|
});
|
|
});
|
|
|
|
it('should return an array', () => {
|
|
const modes = getAvailableEnhancementModes();
|
|
expect(Array.isArray(modes)).toBe(true);
|
|
});
|
|
});
|
|
});
|