Редактирование заявок у конкретного пользователя (#14)
Tests / frontend-test (push) Successful in 45s
Tests / backend-test (push) Successful in 7m18s

Co-authored-by: gorbenko.pavel <gorbenko.pavel@tansu.kz>
Reviewed-on: http://git.tnsu.kz/gorbenko.pavel/tnsu-approval-route/pulls/14
This commit was merged in pull request #14.
This commit is contained in:
2026-08-19 12:58:07 +00:00
parent 82512eb1db
commit 1ee1b71e3e
36 changed files with 1862 additions and 333 deletions
@@ -9,7 +9,13 @@ beforeEach(() => {
describe('parseRoute', () => {
it('без aatab — вкладка по умолчанию dashboard, всё остальное пусто', () => {
expect(parseRoute('')).toEqual({ tab: 'dashboard', routeId: undefined, resolve: undefined, manage: undefined });
expect(parseRoute('')).toEqual({
tab: 'dashboard',
routeId: undefined,
resolve: undefined,
manage: undefined,
manageByUser: undefined
});
});
it('незнакомое значение aatab тоже откатывается на dashboard', () => {
@@ -19,7 +25,12 @@ describe('parseRoute', () => {
it('manageRequests с aamtype+aamreq — даёт заполненный manage', () => {
const route = parseRoute('?aatab=manageRequests&aamtype=5&aamreq=42');
expect(route.tab).toBe('manageRequests');
expect(route.manage).toEqual({ requestTypeId: '5', requestId: '42' });
expect(route.manage).toEqual({ requestTypeId: '5', requestId: '42', listId: '' });
});
it('manageRequests с aamlist — партиция заявки читается в manage.listId', () => {
const route = parseRoute('?aatab=manageRequests&aamtype=5&aamreq=42&aamlist=%2Fsites%2Fx%2FLists%2FForm2');
expect(route.manage).toEqual({ requestTypeId: '5', requestId: '42', listId: '/sites/x/Lists/Form2' });
});
it('manageRequests без aamreq — manage не собирается (id заявки обязателен)', () => {
@@ -27,6 +38,25 @@ describe('parseRoute', () => {
expect(route.manage).toBeUndefined();
});
it('manageByUser с aabuser — email сотрудника читается в manageByUser', () => {
const route = parseRoute('?aatab=manageByUser&aabuser=ivanov%40tnsu.kz');
expect(route.tab).toBe('manageByUser');
expect(route.manageByUser).toEqual({ userEmail: 'ivanov@tnsu.kz', targetEmail: '' });
});
it('manageByUser с aabtarget — читается и тот, кем заменяют', () => {
const route = parseRoute('?aatab=manageByUser&aabuser=ivanov%40tnsu.kz&aabtarget=petrov%40tnsu.kz');
expect(route.manageByUser).toEqual({ userEmail: 'ivanov@tnsu.kz', targetEmail: 'petrov@tnsu.kz' });
});
it('aabtarget без aabuser игнорируется — сам по себе он экран не определяет', () => {
expect(parseRoute('?aatab=manageByUser&aabtarget=petrov%40tnsu.kz').manageByUser).toBeUndefined();
});
it('aabuser учитывается только при tab=manageByUser', () => {
expect(parseRoute('?aatab=dashboard&aabuser=ivanov%40tnsu.kz').manageByUser).toBeUndefined();
});
it('aaroute учитывается только при tab=routes', () => {
expect(parseRoute('?aatab=routes&aaroute=7').routeId).toBe(7);
expect(parseRoute('?aatab=manageRequests&aaroute=7').routeId).toBeUndefined();
@@ -78,14 +108,14 @@ describe('parseRoute', () => {
describe('navigate', () => {
it('после navigate() параметры читаются обратно тем же parseRoute (round-trip)', () => {
navigate({ tab: 'manageRequests', manage: { requestTypeId: '3', requestId: '10' } });
navigate({ tab: 'manageRequests', manage: { requestTypeId: '3', requestId: '10', listId: '/sites/x/Lists/Form' } });
const roundTripped = parseRoute(window.location.search);
expect(roundTripped.tab).toBe('manageRequests');
expect(roundTripped.manage).toEqual({ requestTypeId: '3', requestId: '10' });
expect(roundTripped.manage).toEqual({ requestTypeId: '3', requestId: '10', listId: '/sites/x/Lists/Form' });
});
it('navigate на dashboard полностью убирает параметры вкладки из адреса', () => {
navigate({ tab: 'manageRequests', manage: { requestTypeId: '3', requestId: '10' } });
navigate({ tab: 'manageRequests', manage: { requestTypeId: '3', requestId: '10', listId: '/sites/x/Lists/Form' } });
navigate({ tab: 'dashboard' });
expect(window.location.search).toBe('');
});
@@ -96,6 +126,13 @@ describe('navigate', () => {
expect(window.history.length).toBe(initialLength + 1);
});
it('round-trip для manageByUser (оба сотрудника)', () => {
navigate({ tab: 'manageByUser', manageByUser: { userEmail: 'ivanov@tnsu.kz', targetEmail: 'petrov@tnsu.kz' } });
const roundTripped = parseRoute(window.location.search);
expect(roundTripped.tab).toBe('manageByUser');
expect(roundTripped.manageByUser).toEqual({ userEmail: 'ivanov@tnsu.kz', targetEmail: 'petrov@tnsu.kz' });
});
it('round-trip для resolve.departmentId', () => {
navigate({
tab: 'resolve',