Files
brain/tools/secretary-extract.test.mjs
T

33 lines
1.4 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import { buildExtractionPrompt, parseExtractionResponse } from './secretary-extract.mjs';
describe('buildExtractionPrompt', () => {
it('включает дела и обмен в запрос', () => {
const { system, user } = buildExtractionPrompt({
lastExchange: { user: 'привет', assistant: 'ответ', actions: [{ tool: 'Read' }] },
worksIndex: [{ slug: 'sec', title: 'Секретарь', goal: 'память сути' }],
});
expect(system).toContain('JSON');
expect(user).toContain('sec');
expect(user).toContain('привет');
expect(user).toContain('Read');
});
it('без дел — помечает отсутствие', () => {
const { user } = buildExtractionPrompt({ lastExchange: {}, worksIndex: [] });
expect(user).toContain('нет открытых дел');
});
});
describe('parseExtractionResponse', () => {
it('парсит JSON в обёртке с хвостовой запятой', () => {
const out = parseExtractionResponse('```json\n{ "work":"sec", "decisions":[{"text":"A","turns":[7]}], }\n```');
expect(out.work).toBe('sec');
expect(out.decisions[0].text).toBe('A');
expect(out.supersede).toEqual([]);
});
it('мусор → null', () => {
expect(parseExtractionResponse('не json вовсе')).toBeNull();
expect(parseExtractionResponse('')).toBeNull();
});
});