YD_Event.Web/scripts/account-management-contract-test.mjs

60 lines
3.8 KiB
JavaScript

import assert from 'node:assert/strict';
import { readFileSync } from 'node:fs';
import { resolve } from 'node:path';
const read = (path) => readFileSync(resolve(process.cwd(), path), 'utf8');
const accountApi = read('src/api/match/account.js');
const unitApi = read('src/api/match/unitaccount.js');
const page = read('src/views/permission/account/index.vue');
const scoringDialog = read('src/views/permission/account/scoring-dialog.vue');
const sysUserService = read('../YD_Event.Admin/YD_Event.Application/User/SysUserService.cs');
const unitService = read('../YD_Event.Admin/YD_Event.Application/Unit/UnitAccountService.cs');
const deploymentSql = read('../YD_Event.Admin/二期需求/dbo.sql');
const menuSeed = JSON.parse(read('../YD_Event.Admin/YD_Event.Core/InitData/sysmenu.txt'));
const roleMenuSeed = JSON.parse(read('../YD_Event.Admin/YD_Event.Core/InitData/sysrolemenu.txt'));
const checks = [
['报名账号查询', accountApi, "http.get('/sysuser/page'"],
['报名账号新增', accountApi, "http.post('/sysuser/user'"],
['报名账号编辑', accountApi, "http.put('/sysuser/user'"],
['报名账号删除', accountApi, "http.delete('/sysuser'"],
['报名账号状态', accountApi, "http.post('/sysuser/setstatus'"],
['报名账号重置密码', accountApi, "http.post('/sysuser/reset'"],
['打分账号查询', unitApi, "http.get('/unitaccount/page'"],
['打分账号新增', unitApi, "http.post('/unitaccount/add'"],
['打分账号编辑', unitApi, "http.put('/unitaccount/edit'"],
['打分账号删除', unitApi, "http.delete('/unitaccount/delete'"],
['打分账号状态', unitApi, "http.post('/unitaccount/setStatus'"],
['打分账号重置密码', unitApi, "http.post('/unitaccount/resetPassword'"],
['报名平台页签', page, 'label="报名平台"'],
['打分系统页签', page, 'label="打分系统"'],
['打分查询固定平台', page, 'Platform: SCORING_PLATFORM'],
['打分禁用确认', page, "confirmDisable('打分系统')"],
['新增打分账号固定平台', scoringDialog, 'platform: SCORING_PLATFORM'],
['新增打分账号自动角色', unitService, 'RoleId = GetRoleId(input.Platform)'],
['报名账号数据域过滤', sysUserService, 'x.UnitPlatform == UnitAccountPlatform.EventSystem'],
['报名账号详情隔离', sysUserService, 'await GetEventSystemUserAsync(id)'],
['报名账号状态隔离', sysUserService, 'public override async Task SetStatus'],
['单位接口阻止普通账号', unitService, '该账号不是单位账号'],
['全局账号查重', unitService, 'x.Account == input.Account'],
['打分账号密码加盐', unitService, '_idGenerator.Encode(user.Id)'],
['上线SQL挂载打分账号按钮', deploymentSql, "(1081,N'打分账号-新增',2,N'system:unit:add',1047"],
['上线SQL停用旧单位菜单', deploymentSql, "WHERE Id=1080 AND Code=N'system:unit' AND DeleteMark=0"],
['上线SQL校验账号管理父级', deploymentSql, 'ParentId=1047 AND DeleteMark=0)=5'],
];
for (const [name, source, expected] of checks) {
assert.ok(source.includes(expected), `${name}:未找到 ${expected}`);
process.stdout.write(`PASS ${name}\n`);
}
const scoringButtonIds = new Set([1081, 1082, 1083, 1084, 1085]);
const scoringButtons = menuSeed.filter((item) => scoringButtonIds.has(item.Id));
assert.equal(scoringButtons.length, 5, '初始化菜单:打分账号按钮数量应为 5');
assert.ok(scoringButtons.every((item) => item.ParentId === 1047), '初始化菜单:打分账号按钮必须挂到账号管理');
assert.ok(!menuSeed.some((item) => item.Id === 1080), '初始化菜单:不应再包含单位管理菜单');
assert.ok(!roleMenuSeed.some((item) => item.MenuId === 1080), '初始化授权:不应再授权单位管理菜单');
process.stdout.write('PASS 初始化菜单与角色授权一致性\n');
process.stdout.write(`账号管理契约测试通过:${checks.length + 1}/${checks.length + 1}\n`);