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

64 lines
3.2 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import { detectSecretaryCommand, secretaryModeFileName, resolveCaseActivation, fluffyPipelineOn } from './secretary-flag.mjs';
describe('detectSecretaryCommand', () => {
it('распознаёт включение', () => {
expect(detectSecretaryCommand('включи секретаря пожалуйста')).toBe('on');
});
it('распознаёт выключение', () => {
expect(detectSecretaryCommand('всё, выключи секретаря')).toBe('off');
});
it('нет команды — null', () => {
expect(detectSecretaryCommand('давай продолжим работу')).toBeNull();
});
it('цитата в кавычках не срабатывает', () => {
expect(detectSecretaryCommand('фраза «включи секретаря» это команда')).toBeNull();
});
});
describe('secretaryModeFileName — флажок по сессии', () => {
it('имя файла флажка содержит id сессии', () => {
expect(secretaryModeFileName('abc-123')).toBe('secretary-mode-abc-123.json');
});
it('без сессии — unknown', () => {
expect(secretaryModeFileName()).toBe('secretary-mode-unknown.json');
});
});
describe('resolveCaseActivation — сверка имени дела со списком существующих', () => {
const existing = ['general', 'создание-секретаря', 'строительство-секретаря'];
it('точное совпадение — активировать существующее', () => {
expect(resolveCaseActivation('создание-секретаря', existing))
.toEqual({ action: 'activate', work: 'создание-секретаря' });
});
it('нет похожих — активировать как новое (имя как ввёл)', () => {
expect(resolveCaseActivation('биллинг', existing))
.toEqual({ action: 'activate', work: 'биллинг' });
});
it('опечатка (правка ≤2) — переспросить с кандидатом', () => {
const r = resolveCaseActivation('создание-секретар', existing);
expect(r.action).toBe('confirm');
expect(r.candidates).toContain('создание-секретаря');
});
it('сокращение (подстрока) — переспросить', () => {
const r = resolveCaseActivation('создание', existing);
expect(r.action).toBe('confirm');
expect(r.candidates).toContain('создание-секретаря');
});
it('пустой список дел — активировать как новое', () => {
expect(resolveCaseActivation('новое', [])).toEqual({ action: 'activate', work: 'новое' });
});
});
describe('fluffyPipelineOn', () => {
it('по умолчанию выключен', () => {
expect(fluffyPipelineOn({})).toBe(false);
});
it('включается env SECRETARY_FLUFFY=1', () => {
expect(fluffyPipelineOn({ SECRETARY_FLUFFY: '1' })).toBe(true);
});
it('включается env SECRETARY_FLUFFY=true', () => {
expect(fluffyPipelineOn({ SECRETARY_FLUFFY: 'true' })).toBe(true);
});
});