Files
kefu/admin-web/apps/web-antd/tests/group-navigation.test.mjs
T
2026-11-03 10:58:43 +08:00

25 lines
2.1 KiB
JavaScript

import assert from 'node:assert/strict';
import {readFile} from 'node:fs/promises';
import {pathToFileURL} from 'node:url';
import {resolve} from 'node:path';
import test from 'node:test';
const ts=await import(process.env.KEFU_SSO_TYPESCRIPT?pathToFileURL(process.env.KEFU_SSO_TYPESCRIPT+'/lib/typescript.js').href:'typescript');
const moduleUrl=source=>`data:text/javascript;base64,${Buffer.from(source).toString('base64')}`;
const compile=source=>ts.transpileModule(source,{compilerOptions:{module:ts.ModuleKind.ESNext,target:ts.ScriptTarget.ES2022}}).outputText;
const {default:routes}=await import(moduleUrl(compile(await readFile(new URL('../src/router/routes/modules/console.ts',import.meta.url),'utf8'))));
const enginePath=process.env.KEFU_SSO_WORKSPACE?pathToFileURL(resolve(process.env.KEFU_SSO_WORKSPACE,'packages/utils/src/helpers/generate-routes-frontend.ts')):new URL('../../../packages/utils/src/helpers/generate-routes-frontend.ts',import.meta.url);
const engine=await readFile(enginePath,'utf8');
const tree=ts.createSourceFile('engine.ts',engine,ts.ScriptTarget.Latest,true);
const functions=tree.statements.filter(node=>ts.isFunctionDeclaration(node)&&['hasAuthority','menuHasVisibleWithForbidden'].includes(node.name?.text)).map(node=>node.getText(tree)).join('\n');
const {hasAuthority}=await import(moduleUrl(compile(functions+'\nexport {hasAuthority};')));
test('基础角色只显示我的账号,业务目录使用实际Vben权限算法按子页面读权限开放',()=>{
const visible=permissions=>routes.filter(route=>!route.meta?.hideInMenu&&hasAuthority(route,permissions)).map(route=>route.name);
assert.deepEqual(visible([]),['GroupAccount']);
assert.deepEqual(visible(['model:read']),['GroupAccount','ModelCenter']);
assert.deepEqual(visible(['config:read']),['GroupAccount','DesktopCenter']);
assert.deepEqual(visible(['im:content:read']),['GroupAccount','ArchiveCenter']);
assert.deepEqual(visible(['user:read']),['GroupAccount','SystemCenter']);
const all=[...new Set(routes.flatMap(route=>(route.children||[]).flatMap(child=>child.meta?.authority||[])))];
assert.equal(visible(all).length,6);
});