0ecb1ded78
Tests / frontend-test (push) Successful in 1m15s
Обсуждение заявки поверх штатных комментариев 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
49 lines
2.1 KiB
TypeScript
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'));
|
|
});
|
|
});
|