Files
request-portal/src/webparts/requestPortal/shared/chat/chatFileNames.test.ts
T
gorbenko.pavel 0ecb1ded78
Tests / frontend-test (push) Successful in 1m15s
чат по заявке через комментарии к строке списка (#14)
Обсуждение заявки поверх штатных комментариев SharePoint (PnPjs
item.comments) — без новых колонок и провижининга, права на переписку
раздаёт сам SharePoint по правам на элемент.

Встроено в ApproveFeature и EditFeature (единственные входы в просмотр
заявки для всех типов), поэтому доступно автору, всем согласующим
(включая уже решивших и ещё не дошедших до своего шага) и исполнителям,
а не только текущему шагу маршрута, как DecisionPanel.

Автора комментария всегда ставит реальная учётка — отладочная подмена
личности на запись в SharePoint не влияет, в UI есть предупреждение.

---------

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/timur.gorodetskiy/request-portal/pulls/14
2026-08-24 11:37:34 +00:00

49 lines
2.1 KiB
TypeScript

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'));
});
});