Files
cn-rdms-web/tests/object-context-normalization.test.ts

57 lines
1.9 KiB
TypeScript
Raw Permalink Normal View History

import assert from 'node:assert/strict';
import { test } from 'node:test';
import { normalizeObjectContext } from '../src/service/api/object-context-normalize';
const projectDomainConfig = {
domainKey: 'project',
mode: 'object-context',
objectType: 'project',
routePathPrefixes: ['/project'],
entryRouteKey: 'project_list',
entryRoutePath: '/project/list',
fallbackDefaultRouteKey: 'project_project_overview',
fallbackDefaultRoutePath: '/project/project/overview',
contextApiPath: '/admin-api/project/project/{id}/context',
contextApiObjectIdParamKey: 'id',
contextApiObjectIdPlacement: 'path',
objectIdQueryKey: 'objectId'
} satisfies App.ObjectContext.DomainConfig;
test('normalizes project context from legacy currentProject and navs payload', () => {
const context = normalizeObjectContext(projectDomainConfig, '2049677988131078145', {
contextScopedMenus: [],
currentProject: {
id: '2049677988131078145',
projectCode: 'CNPJ2026001',
projectName: '研发内部管理系统',
projectType: 'mainline',
productId: '2045487172243963906',
managerUserId: '2034588597520314370',
statusCode: 'pending'
},
currentRole: {
roleId: '2049372079479685122',
roleCode: 'project_manager',
roleName: '项目经理',
guestFlag: false
},
navs: [
{
id: '2049679882031243266',
name: '概览',
path: '/project/project/overview',
icon: 'mdi:home-outline',
sort: 1
}
],
buttons: ['project:project:update']
});
assert.equal(context.objectId, '2049677988131078145');
assert.equal(context.objectName, '研发内部管理系统');
assert.equal(context.contextScopedMenus.length, 1);
assert.equal(context.contextScopedMenus[0].label, '概览');
assert.equal(context.contextScopedMenus[0].routePath, '/project/project/overview');
assert.deepEqual(context.buttonCodes, ['project:project:update']);
});