import { describe, expect, it } from 'vitest'; import type { DocumentBrief, FileOut } from '../../types/api'; import { buildDocumentRows } from './documentRows'; const doc = (over: Partial = {}): DocumentBrief => ({ id: 'd1', document_type: 'BALANCE', osv_account_code: null, period_year: 2024, period_quarter: 'Q1', is_cumulative: false, status: 'CONFIRMED', period_check: 'UNKNOWN', counterparty_check: null, locator: null, comments_count: 0, ...over, }); const file = (over: Partial = {}): FileOut => ({ id: 'f1', legal_entity_id: 'le', original_name: 'Баланс_2024_К1.pdf', file_type: 'PDF', status: 'PROCESSED', version_no: 1, size_bytes: 10, uploaded_at: '2024-03-12T10:00:00Z', job: null, documents: [], ...over, }); describe('buildDocumentRows', () => { it('документ ББ из PDF', () => { const rows = buildDocumentRows([file({ documents: [doc()] })]); expect(rows).toHaveLength(1); expect(rows[0]).toMatchObject({ key: 'd1', documentId: 'd1', name: 'Баланс_2024_К1.pdf', subtitle: 'Бух. баланс · PDF · 12.03.2024', period: '2024 К1', periodCheck: 'UNKNOWN', counterpartyCheck: null, status: 'success', statusLabel: 'Загружен', linkable: true, fileType: 'PDF', }); }); it('два документа одного файла — две строки', () => { const rows = buildDocumentRows([ file({ file_type: 'XLSX', documents: [ doc({ id: 'a', document_type: 'OSV', osv_account_code: '60' }), doc({ id: 'b', document_type: 'OSV', osv_account_code: '62', status: 'NEEDS_CHECK' }), ], }), ]); expect(rows.map((r) => r.key)).toEqual(['a', 'b']); expect(rows[0].subtitle).toBe('ОСВ 60 · XLSX · 12.03.2024'); expect(rows[1].status).toBe('warning'); expect(rows[1].statusLabel).toBe('Требуется проверка'); }); it('файл PROCESSING без документов', () => { const rows = buildDocumentRows([file({ status: 'PROCESSING' })]); expect(rows).toHaveLength(1); expect(rows[0]).toMatchObject({ key: 'f1', documentId: null, period: '—', subtitle: 'PDF · 12.03.2024', status: 'processing', statusLabel: 'Обработка', linkable: false, }); }); it('файл ERROR с причиной', () => { const rows = buildDocumentRows([ file({ status: 'ERROR', job: { id: 'j', status: 'FAILED', error_code: 'E1', error_message: 'сообщение', mapping_error: null, warnings: [], mapping_warnings: [], finished_at: null, } as FileOut['job'], }), ]); expect(rows[0]).toMatchObject({ status: 'error', statusLabel: 'Ошибка', errorReason: 'сообщение', linkable: false }); }); it('расшифровка — «Прочий документ», не кликается', () => { const rows = buildDocumentRows([file({ documents: [doc({ id: 'x', document_type: 'DISCLOSURE' })] })]); expect(rows[0].subtitle).toBe('Прочий документ · PDF · 12.03.2024'); expect(rows[0].linkable).toBe(false); }); });