47 lines
1.8 KiB
TypeScript
47 lines
1.8 KiB
TypeScript
import { describe, it, expect } from 'vitest';
|
|
import { buildPrompt, PROMPT_VERSION } from '@main/ai/prompt.js';
|
|
|
|
describe('prompt', () => {
|
|
it('PROMPT_VERSION is 4', () => {
|
|
expect(PROMPT_VERSION).toBe(4);
|
|
});
|
|
|
|
it('buildPrompt with empty vocab omits vocabulary line entirely', () => {
|
|
const out = buildPrompt('hello', '2026-05-02', [], []);
|
|
expect(out).not.toContain('vocabulary');
|
|
expect(out).not.toContain('Prefer reusing');
|
|
});
|
|
|
|
it('buildPrompt with vocab includes Prefer instruction + comma-separated list', () => {
|
|
const out = buildPrompt('hello', '2026-05-02', [], ['design', 'meeting', 'qa']);
|
|
expect(out).toContain('Existing vocabulary tags');
|
|
expect(out).toContain('design, meeting, qa');
|
|
expect(out).toContain('Prefer reusing');
|
|
});
|
|
|
|
it('vocab block appears after header and before JSON rules', () => {
|
|
const out = buildPrompt('hello', '2026-05-02', [], ['design']);
|
|
const headerIdx = out.indexOf("Today's date");
|
|
const vocabIdx = out.indexOf('Existing vocabulary');
|
|
const jsonRulesIdx = out.indexOf('Return a JSON object');
|
|
expect(headerIdx).toBeGreaterThan(-1);
|
|
expect(vocabIdx).toBeGreaterThan(headerIdx);
|
|
expect(jsonRulesIdx).toBeGreaterThan(vocabIdx);
|
|
});
|
|
});
|
|
|
|
describe('buildPrompt with notebooks', () => {
|
|
it('notebooks 목록이 prompt 에 포함됨', () => {
|
|
const p = buildPrompt('hi', '2026-05-14', [], [], ['기본', '회사']);
|
|
expect(p).toContain('기본');
|
|
expect(p).toContain('회사');
|
|
expect(p).toContain('notebook_match');
|
|
});
|
|
|
|
it('notebooks 빈 배열 시 notebook 섹션 생략', () => {
|
|
const p = buildPrompt('hi', '2026-05-14', [], [], []);
|
|
expect(p).not.toContain('notebook_match');
|
|
expect(p).not.toContain('사용 가능한 노트북');
|
|
});
|
|
});
|