- форматтер сумм: проверка числа до сдвига запятой, Intl.StringNumericLiteral (ES2023.Intl) вместо any, без разбора скобок; - запасные имена выгрузок xlsxFilename, отдельные флаги загрузки у двух «Экспорт»; - useNotificationApi мемоизирован, загрузки — useCallback, зависимости эффектов полные; - ячейки: расхождение в скобках, значок пропущенных строк ОСВ, «—» вместо выдуманного нуля; - «Год»/«Период» версии только для чтения; - сервис services/api/intercompanyMatrix.ts с withJsonBody, типы шахматки в types/api.ts, Account.kind. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
36 lines
1.6 KiB
TypeScript
36 lines
1.6 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
||
import { exportFilename, filenameFromContentDisposition, xlsxFilename } from './download';
|
||
|
||
describe('filenameFromContentDisposition', () => {
|
||
it('RFC 5987 filename*', () => {
|
||
expect(filenameFromContentDisposition("attachment; filename*=UTF-8''%D0%A1%D0%B2%D0%BE%D0%B4.xlsx")).toBe('Свод.xlsx');
|
||
});
|
||
it('filename в кавычках', () => {
|
||
expect(filenameFromContentDisposition('attachment; filename="osv.xlsx"')).toBe('osv.xlsx');
|
||
});
|
||
it('filename* важнее filename', () => {
|
||
expect(filenameFromContentDisposition('attachment; filename="a.xlsx"; filename*=UTF-8\'\'b.xlsx')).toBe('b.xlsx');
|
||
});
|
||
it('нет заголовка или имени', () => {
|
||
expect(filenameFromContentDisposition(null)).toBeNull();
|
||
expect(filenameFromContentDisposition('inline')).toBeNull();
|
||
});
|
||
});
|
||
|
||
describe('exportFilename', () => {
|
||
it('безопасное имя', () => {
|
||
expect(exportFilename('ГК «Русский бисквит»/Север', 2024, 'Q3')).toBe('Сводная_ОСВ_ГК_«Русский_бисквит»_Север_2024_Q3.xlsx');
|
||
});
|
||
});
|
||
|
||
describe('xlsxFilename', () => {
|
||
it('префикс, ГК, год и квартал', () => {
|
||
expect(xlsxFilename('Шахматка', { groupName: 'ГК «Русский бисквит»', year: 2024, quarter: 'Q1' })).toBe(
|
||
'Шахматка_ГК_«Русский_бисквит»_2024_Q1.xlsx',
|
||
);
|
||
});
|
||
it('без карточки версии — только префикс', () => {
|
||
expect(xlsxFilename('Результирующая_таблица_ВГО', null)).toBe('Результирующая_таблица_ВГО.xlsx');
|
||
});
|
||
});
|