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`);