import { displayFileName, fileStamp, sanitizeFileName, storedFileName } from './chatFileNames'; describe('sanitizeFileName', () => { it('заменяет запрещённые SharePoint символы', () => { expect(sanitizeFileName('от 24/08 №1: акт*.pdf')).toBe('от 24_08 №1_ акт_.pdf'); }); it('убирает точки в конце — такое имя SharePoint не принимает', () => { expect(sanitizeFileName('акт...')).toBe('акт'); }); it('пустое имя заменяет заглушкой, а не пустой строкой', () => { expect(sanitizeFileName(' ')).toBe('файл'); }); it('длинное имя обрезает, сохраняя расширение', () => { const long = `${'я'.repeat(200)}.pdf`; const result = sanitizeFileName(long); expect(result.length).toBeLessThanOrEqual(120); expect(result.endsWith('.pdf')).toBe(true); }); }); describe('storedFileName / displayFileName', () => { it('складское имя разбирается обратно в исходное', () => { const stored = storedFileName('20260824-153012', 1, 'акт приёмки.pdf'); expect(stored).toBe('20260824-153012-1__акт приёмки.pdf'); expect(displayFileName(stored)).toBe('акт приёмки.pdf'); }); it('двойное подчёркивание в исходном имени не ломает разбор', () => { const stored = storedFileName('20260824-153012', 2, 'акт__итог.pdf'); expect(displayFileName(stored)).toBe('акт__итог.pdf'); }); it('файл, положенный в библиотеку не порталом, показывается как есть', () => { expect(displayFileName('справка.pdf')).toBe('справка.pdf'); }); it('файлы одного сообщения получают разные имена', () => { const stamp = fileStamp(new Date(2026, 7, 24, 15, 30, 12)); expect(stamp).toBe('20260824-153012'); expect(storedFileName(stamp, 1, 'скан.jpg')).not.toBe(storedFileName(stamp, 2, 'скан.jpg')); }); });