5d7035875c
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
44 lines
1.8 KiB
JavaScript
44 lines
1.8 KiB
JavaScript
import { describe, it, expect } from 'vitest';
|
|
import { parseNegotiationSection } 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([]);
|
|
});
|
|
});
|