Files
brain/tools/negotiation-section.test.mjs

59 lines
2.5 KiB
JavaScript

import { describe, it, expect } from 'vitest';
import { parseNegotiationSection, arbitrationRequested } from './negotiation-section.mjs';
const PLAN = `# План
## Цель
Сделать X.
## Переговоры
### Круг 1
Не согласен с замечанием про шаг 2: он атомарен.
### Круг 2
Принял про шаг 4, переписал.
## Шаги
- [ ] ...`;
describe('parseNegotiationSection', () => {
it('достаёт круги с дословным текстом позиции', () => {
const r = parseNegotiationSection(PLAN);
expect(r).toEqual([
{ round: 1, position: 'Не согласен с замечанием про шаг 2: он атомарен.', mentor: '', judge: '' },
{ round: 2, position: 'Принял про шаг 4, переписал.', mentor: '', judge: '' },
]);
});
it('делит доводы по дорожкам M/J внутри круга', () => {
const plan = `## Переговоры
### Круг 1
**Наставнику:** не согласен с пунктом 2, он атомарен
**Судье:** критерий в разделе K
## Шаги`;
const r = parseNegotiationSection(plan);
expect(r[0].mentor).toBe('не согласен с пунктом 2, он атомарен');
expect(r[0].judge).toBe('критерий в разделе K');
});
it('нет раздела → пустой массив', () => {
expect(parseNegotiationSection('# План\n## Цель\nY')).toEqual([]);
});
it('последний круг (для арбитража) = max по round', () => {
const r = parseNegotiationSection(PLAN);
expect(r[r.length - 1].round).toBe(2);
});
it('не падает на мусоре', () => {
expect(parseNegotiationSection(null)).toEqual([]);
});
});
describe('arbitrationRequested (SP2d)', () => {
it('нет маркера → пусто', () => {
expect(arbitrationRequested('# План\n## Переговоры\n### Круг 1\n**Судье:** x')).toBe('');
});
it('маркер с причиной → причина', () => {
expect(arbitrationRequested('## Переговоры\n**Арбитраж:** тупик по §4')).toBe('тупик по §4');
});
it('маркер без причины → truthy (дефолт)', () => {
expect(arbitrationRequested('**Арбитраж:**')).toBeTruthy();
});
it('не строка → пусто', () => {
expect(arbitrationRequested(null)).toBe('');
});
});