Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EAKRDNzXtRrwmWz9z6PZu3
72 lines
3.1 KiB
TypeScript
72 lines
3.1 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
||
import { columnTitle, documentPageTitle, documentSubtitle, formTitle, formatReportDate, reviewActions, statusBadge } from './reviewView';
|
||
|
||
describe('formatReportDate', () => {
|
||
it('ISO → дд.мм.гггг', () => {
|
||
expect(formatReportDate('2025-09-30')).toBe('30.09.2025');
|
||
});
|
||
it('пусто и мусор', () => {
|
||
expect(formatReportDate(null)).toBeNull();
|
||
expect(formatReportDate('')).toBeNull();
|
||
expect(formatReportDate('сентябрь')).toBe('сентябрь');
|
||
});
|
||
});
|
||
|
||
describe('formTitle', () => {
|
||
it('по типу формы', () => {
|
||
expect(formTitle('BALANCE')).toBe('Бухгалтерский баланс');
|
||
expect(formTitle('INCOME')).toBe('Отчёт о финансовых результатах');
|
||
});
|
||
});
|
||
|
||
describe('documentPageTitle', () => {
|
||
it('ОСВ — просмотр, формы — проверка распознавания', () => {
|
||
expect(documentPageTitle('OSV')).toBe('Просмотр ОСВ');
|
||
expect(documentPageTitle('BALANCE')).toBe('Проверка распознавания');
|
||
});
|
||
});
|
||
|
||
describe('reviewActions', () => {
|
||
it('просмотр, документ на проверке', () => {
|
||
expect(reviewActions('NEEDS_CHECK', false)).toEqual({ canEdit: true, canConfirm: true, canSave: false });
|
||
});
|
||
it('режим правки', () => {
|
||
expect(reviewActions('NEEDS_CHECK', true)).toEqual({ canEdit: false, canConfirm: false, canSave: true });
|
||
});
|
||
it('CONFIRMED и ERROR не редактируются и не подтверждаются', () => {
|
||
expect(reviewActions('CONFIRMED', false)).toEqual({ canEdit: false, canConfirm: false, canSave: false });
|
||
expect(reviewActions('ERROR', false)).toEqual({ canEdit: false, canConfirm: false, canSave: false });
|
||
expect(reviewActions('ERROR', true).canSave).toBe(false);
|
||
});
|
||
});
|
||
|
||
describe('statusBadge', () => {
|
||
it('цвета', () => {
|
||
expect(statusBadge('CONFIRMED')).toEqual({ label: 'Загружен', color: 'green' });
|
||
expect(statusBadge('NEEDS_CHECK')).toEqual({ label: 'Требуется проверка', color: 'orange' });
|
||
expect(statusBadge('ERROR')).toEqual({ label: 'Ошибка', color: 'red' });
|
||
});
|
||
});
|
||
|
||
describe('documentSubtitle', () => {
|
||
it('имя · тип · дата', () => {
|
||
expect(documentSubtitle({ original_name: 'a.pdf', file_type: 'PDF', uploaded_at: '2024-03-12T10:00:00Z' })).toBe(
|
||
'a.pdf · PDF · 12.03.2024',
|
||
);
|
||
});
|
||
it('без даты и имени', () => {
|
||
expect(documentSubtitle({ original_name: null, file_type: 'XLSX', uploaded_at: null })).toBe('XLSX');
|
||
});
|
||
});
|
||
|
||
describe('columnTitle', () => {
|
||
const col = (label: string | null, period_date: string | null) => ({ id: 'c', column_index: 1, label, period_date, is_current: null });
|
||
it('подпись колонки, если распознана', () => {
|
||
expect(columnTitle(col('На 31 декабря 2024 г.', null))).toBe('На 31 декабря 2024 г.');
|
||
});
|
||
it('пустая подпись — дата периода, затем номер', () => {
|
||
expect(columnTitle(col(' ', '2024-12-31'))).toBe('На 31.12.2024');
|
||
expect(columnTitle(col(null, null))).toBe('Колонка 2');
|
||
});
|
||
});
|