import { describe, expect, it } from 'vitest'; import type { HeaderFieldOut, StatementOut, ValueOut } from '../../types/api'; import { countReviewValues } from './reviewCounters'; const v = (extra: Partial = {}): ValueOut => ({ id: 'v', column_id: 'c1', column_index: 0, amount: '1.00', string_value: null, text: null, confidence: '100', is_recognized: true, is_modified: false, original_amount: null, needs_review: false, is_confirmed: false, ...extra, }); const field = (extra: Partial = {}): HeaderFieldOut => ({ value: 'x', original_value: 'x', verified: null, modified: null, ...extra, }); const statement = (values: ValueOut[], header: Partial = {}) => ({ header: { inn: field(), report_date: field(), units: field(), organization_name_modified: false, needs_review_fields: [], ...header, }, lines: [{ id: 'l1', values }], }) as unknown as StatementOut; describe('countReviewValues', () => { it('чистая форма — нули', () => { expect(countReviewValues(statement([v(), v()]))).toEqual({ changed: 0, needsReview: 0 }); }); it('на проверку — needs_review без подтверждения и без правки (как подсветка ячейки)', () => { const values = [ v({ needs_review: true }), v({ needs_review: true, is_confirmed: true }), v({ needs_review: true, is_modified: true }), // достроенная сервером ячейка: is_recognized = null, на проверку не считается v({ id: null, is_recognized: null, amount: null }), ]; expect(countReviewValues(statement(values))).toEqual({ changed: 1, needsReview: 1 }); }); it('шапка: правки полей и наименования, поля из needs_review_fields без подтверждения', () => { const s = statement([], { inn: field({ modified: true }), report_date: field({ verified: true }), organization_name_modified: true, needs_review_fields: ['report_date', 'units'], }); expect(countReviewValues(s)).toEqual({ changed: 2, needsReview: 1 }); }); });