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) }) })