Files
leaudit-platform-frontend/scripts/test-route-aliases.mjs
T

74 lines
2.1 KiB
JavaScript

import {
listPermissionRouteAliases,
normalizeRoutePathForPermission,
permissionRouteAliasGroups,
} from '../app/utils/route-alias.shared.js';
function assert(condition, message) {
if (!condition) {
throw new Error(message);
}
}
function runAliasExampleChecks() {
const seenInputs = new Set();
for (const group of permissionRouteAliasGroups) {
assert(group.entries.length > 0, `alias group "${group.group}" 不能为空`);
for (const entry of group.entries) {
assert(entry.examples.length > 0, `alias "${entry.source}" 必须提供至少一个 example`);
for (const example of entry.examples) {
assert(!seenInputs.has(example.input), `重复的 alias example 输入: ${example.input}`);
seenInputs.add(example.input);
const actual = normalizeRoutePathForPermission(example.input);
assert(
actual === example.output,
`alias example 校验失败: ${example.input} -> ${actual},预期 ${example.output}`,
);
}
}
}
}
function runNoopChecks() {
const unaffectedPaths = [
'/documents',
'/files/upload',
'/cross-checking/upload',
'/document-types',
];
for (const path of unaffectedPaths) {
const actual = normalizeRoutePathForPermission(path);
assert(actual === path, `不应被改写的路径发生了变化: ${path} -> ${actual}`);
}
}
function runMetadataChecks() {
const aliases = listPermissionRouteAliases();
const signatureSet = new Set();
for (const alias of aliases) {
const signature = `${alias.source}=>${alias.target}`;
assert(!signatureSet.has(signature), `重复的 alias 定义: ${signature}`);
signatureSet.add(signature);
assert(alias.note.trim().length > 0, `alias "${alias.source}" 缺少 note`);
}
}
try {
runAliasExampleChecks();
runNoopChecks();
runMetadataChecks();
console.log(
`route alias checks passed: ${permissionRouteAliasGroups.length} groups, ${listPermissionRouteAliases().length} aliases`,
);
} catch (error) {
console.error(`route alias checks failed: ${error.message}`);
process.exit(1);
}