Files
huangzd1997 2077f871f8 task-50(账号/权限页面): 实现用户菜单授权提交
buildUserColumnPermissionPayload 序列化勾选 id 为 {columnIds}(去重升序、空=清空),
镜像 Java UserColumnPermissionUpdateRequest;submitUserMenuAuth PUT /api/admin/
permission-users/{userId}/columns(menuType=admin) 整树替换,success=false 由 unwrap 抛后端 message。
8 用例全过,363 单测 + build 绿。
2026-09-05 15:07:57 +08:00

57 lines
2.7 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import test from 'node:test'
import assert from 'node:assert/strict'
import { readSource } from './helpers.ts'
import { ADMIN_MENU_TYPE, buildUserColumnPermissionPayload } from '../src/pages/account/user-menu-auth.ts'
test('test_task_050_user_menu_auth_submit_normal_primary_path', () => {
// 正常主路径:勾选的 column id 序列化为 {columnIds}(去重升序),镜像后端请求体。
assert.deepEqual(buildUserColumnPermissionPayload([3, 1, 2]), { columnIds: [1, 2, 3] })
})
test('test_task_050_user_menu_auth_submit_normal_variant_input', () => {
// 正常变体:空勾选 = 清空授权(合法提交 {columnIds: []})。
assert.deepEqual(buildUserColumnPermissionPayload([]), { columnIds: [] })
})
test('test_task_050_user_menu_auth_submit_normal_repeated_operation_is_idempotent', () => {
// 正常重复:序列化不改输入、每次产出独立数组不共享引用。
const input = [5, 4]
const first = buildUserColumnPermissionPayload(input)
assert.deepEqual(buildUserColumnPermissionPayload(input), first)
input.push(6)
assert.deepEqual(first.columnIds, [4, 5])
})
test('test_task_050_user_menu_auth_submit_boundary_empty_input', () => {
// 边界空值:null/undefined 输入视为清空,不崩溃。
assert.deepEqual(buildUserColumnPermissionPayload(null), { columnIds: [] })
assert.deepEqual(buildUserColumnPermissionPayload(undefined), { columnIds: [] })
})
test('test_task_050_user_menu_auth_submit_boundary_single_item', () => {
// 边界单元素:单 id 提交。
assert.deepEqual(buildUserColumnPermissionPayload([7]), { columnIds: [7] })
})
test('test_task_050_user_menu_auth_submit_boundary_limit_or_missing_field', () => {
// 边界上限/非法项:负数/0/小数/非数字被过滤,重复去重。
assert.deepEqual(buildUserColumnPermissionPayload([2, 1, 2, -1, 0, 3.7, 'x' as never]), {
columnIds: [1, 2, 3],
})
})
test('test_task_050_user_menu_auth_submit_invalid_input_rejected', () => {
// 异常输入:请求体只含 columnIds(admin 菜单 id),不含越权字段。
assert.deepEqual(Object.keys(buildUserColumnPermissionPayload([1])).sort(), ['columnIds'])
})
test('test_task_050_user_menu_auth_submit_dependency_failure_returns_actionable_message', () => {
// 依赖失败/提交走 adapterPUT permission-users/{id}/columns(menuType=admin),后端失败消息不被吞。
const api = readSource('src/pages/account/user-menu-auth-api.ts')
assert.match(api, /http\.put/)
assert.match(api, /permission-users/)
assert.match(api, /buildUserColumnPermissionPayload/)
assert.match(api, /menuType:\s*ADMIN_MENU_TYPE/)
assert.match(api, /unwrap|parseUserGranted|Promise\.reject|throw/) // 失败仍会向上抛、可提示
})