Files
yovision/Sense/ui/tests/navigation.test.cjs

66 lines
2.4 KiB
JavaScript

const assert = require('node:assert/strict')
const test = require('node:test')
const { buildNavigation } = require('../src/layout/navigation.js')
test('selects the layout record when normalized routes contain duplicate root paths', () => {
const routes = [
{ path: '/', name: 'sense-dashboard', children: [], meta: { title: '工作台' } },
{ path: '/devices', name: 'sense-devices', children: [], meta: { title: '设备管理' } },
{
path: '/',
children: [
{ path: 'devices', meta: { title: '设备管理', permission: 'device.read', order: 10 } },
{ path: '', meta: { title: '工作台', order: 0 } },
{ path: 'users', meta: { title: '用户与权限', permission: 'identity.users.read', order: 90 } }
]
}
]
assert.deepEqual(buildNavigation(routes, ['device.read']), [
{ path: '/', title: '工作台', icon: undefined, order: 0 },
{ path: '/devices', title: '设备管理', icon: undefined, order: 10 }
])
})
test('returns no unauthorized or hidden entries', () => {
const routes = [{
path: '/',
children: [
{ path: '', meta: { title: '工作台' } },
{ path: 'users', meta: { title: '用户与权限', permission: 'identity.users.read' } },
{ path: 'internal', meta: { title: '内部页', hidden: true } }
]
}]
assert.deepEqual(buildNavigation(routes), [
{ path: '/', title: '工作台', icon: undefined, order: 0 }
])
})
test('administrator receives every Sense MVP navigation entry', () => {
const entries = [
['', '工作台', null, 0],
['devices', '设备管理', 'device.read', 10],
['admission', '视频接入', 'device.write', 20],
['media', '视频服务', 'media.read', 30],
['liveview', '实时监看', 'media.read', 40],
['areas', '区域与警戒线', 'area.read', 50],
['users', '用户与权限', 'identity.users.read', 90],
['audit', '操作记录', 'identity.audit.read', 91]
]
const routes = [{ path: '/', children: entries.map(([path, title, permission, order]) => ({
path,
meta: { title, permission, order }
})) }]
const permissions = [
'device.read', 'device.write', 'media.read', 'area.read',
'identity.users.read', 'identity.audit.read'
]
assert.deepEqual(buildNavigation(routes, permissions).map((item) => item.title), [
'工作台', '设备管理', '视频接入', '视频服务', '实时监看',
'区域与警戒线', '用户与权限', '操作记录'
])
})