37 lines
2.1 KiB
TypeScript
37 lines
2.1 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
|
import type { PermissionDescriptor, RoleRecord } from '../src/api'
|
|
import {
|
|
filterRoles, groupPermissionPage, hasSystemAction, shouldAcceptRoleResponse,
|
|
} from '../src/components/RolePermissionsPanel'
|
|
|
|
const roles: RoleRecord[] = [
|
|
{ roleId: 'role_engineer', name: '软件工程师', description: '研发', enabled: true, roleVersion: 1, bindingCount: 2, permissions: [] },
|
|
{ roleId: 'role_reviewer', name: '审核工程师', description: '质量', enabled: false, roleVersion: 1, bindingCount: 1, permissions: [] },
|
|
]
|
|
|
|
const catalog: PermissionDescriptor[] = [
|
|
{ actionId: 'project.create', label: '创建项目', description: '', group: '项目入口', scope: 'system', protected: false },
|
|
{ actionId: 'document.read', label: '读取文档', description: '', group: '文档动作', scope: 'project', protected: false },
|
|
{ actionId: 'document.author', label: '编制文档', description: '', group: '文档动作', scope: 'project', protected: false },
|
|
]
|
|
|
|
describe('role permission UI helpers', () => {
|
|
it('combines exact or fuzzy search with the role status filter', () => {
|
|
expect(filterRoles(roles, '软件工程师', 'exact', 'enabled').map(role => role.roleId)).toEqual(['role_engineer'])
|
|
expect(filterRoles(roles, '工程师', 'fuzzy', 'all').map(role => role.roleId)).toEqual(['role_engineer', 'role_reviewer'])
|
|
expect(filterRoles(roles, '', 'fuzzy', 'disabled').map(role => role.roleId)).toEqual(['role_reviewer'])
|
|
})
|
|
|
|
it('groups and pages matrix columns without changing their stable action IDs', () => {
|
|
expect(groupPermissionPage(catalog, '文档动作', 0, 1).map(item => item.actionId)).toEqual(['document.read'])
|
|
expect(groupPermissionPage(catalog, '文档动作', 1, 1).map(item => item.actionId)).toEqual(['document.author'])
|
|
})
|
|
|
|
it('drops late results and checks explicit system actions', () => {
|
|
expect(shouldAcceptRoleResponse(4, 3)).toBe(false)
|
|
expect(shouldAcceptRoleResponse(4, 4)).toBe(true)
|
|
expect(hasSystemAction(['system.roles.view'], 'system.roles.view')).toBe(true)
|
|
expect(hasSystemAction(['system.roles.view'], 'system.permissions.manage')).toBe(false)
|
|
})
|
|
})
|