397777089e
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
40 lines
2.0 KiB
JavaScript
40 lines
2.0 KiB
JavaScript
import { describe, it, expect } from 'vitest';
|
|
import { CADENCE, checksForEvent, oversizeSignal } from './conversation-cadence.mjs';
|
|
|
|
describe('checksForEvent (§3 — какие проверки когда)', () => {
|
|
it('на каждый ответ — лёгкий проход всплывшей нужды + полнота', () => {
|
|
expect(checksForEvent('answer')).toEqual(['emerge-light', 'coverage']);
|
|
});
|
|
it('при пересборке плана — полная верность + полнота', () => {
|
|
expect(checksForEvent('replan')).toEqual(['verity-full', 'coverage']);
|
|
});
|
|
it('неизвестное событие → []', () => {
|
|
expect(checksForEvent('xyz')).toEqual([]);
|
|
});
|
|
it('CADENCE заморожен (нельзя мутировать политику)', () => {
|
|
expect(Object.isFrozen(CADENCE)).toBe(true);
|
|
});
|
|
});
|
|
|
|
describe('oversizeSignal (§3 — план распух → дроби, не блок)', () => {
|
|
it('мало вопросов/тем → не oversize', () => {
|
|
expect(oversizeSignal({ questionCount: 3, themeCount: 1 })).toEqual({ oversize: false, reasons: [] });
|
|
});
|
|
it('десятки вопросов (≥20) → oversize (дроби на волны)', () => {
|
|
const r = oversizeSignal({ questionCount: 22, themeCount: 1 });
|
|
expect(r.oversize).toBe(true);
|
|
expect(r.reasons.some((x) => /волн/i.test(x))).toBe(true);
|
|
});
|
|
it('дюжина вопросов (12) при дефолте 20 → НЕ oversize', () => {
|
|
expect(oversizeSignal({ questionCount: 12, themeCount: 1 }).oversize).toBe(false);
|
|
});
|
|
it('несколько независимых тем → oversize (дроби на под-разговоры)', () => {
|
|
const r = oversizeSignal({ questionCount: 2, themeCount: 4 });
|
|
expect(r.oversize).toBe(true);
|
|
expect(r.reasons.some((x) => /под-разговор/i.test(x))).toBe(true);
|
|
});
|
|
it('пороги — ручки (инъекция)', () => {
|
|
expect(oversizeSignal({ questionCount: 5 }, { questionThreshold: 4 }).oversize).toBe(true);
|
|
});
|
|
});
|