d3154a48b8
session-model.parseCurrentUser 兼容 data:{item}/{item}/直接对象信封并校验 id;
session.ts fetchCurrentUser 复用;启用 allowImportingTsExtensions;npm run test:live
用 admin 账号真实登录打 18080 验证 current-user 与菜单树(023/024 live 全绿)。
65 lines
2.9 KiB
TypeScript
65 lines
2.9 KiB
TypeScript
import test from 'node:test'
|
|
import assert from 'node:assert/strict'
|
|
import { readSource } from './helpers.ts'
|
|
import { parseCurrentUser } from '../src/api/session-model.ts'
|
|
|
|
test('test_task_023_current_user_adapter_normal_primary_path', () => {
|
|
// 正常主路径:Java data:{item} 信封解出当前用户。
|
|
const user = parseCurrentUser({
|
|
success: true,
|
|
data: { item: { id: 1, username: 'admin', role: 'super_admin' } },
|
|
})
|
|
assert.equal(user.id, 1)
|
|
assert.equal(user.username, 'admin')
|
|
assert.equal(user.role, 'super_admin')
|
|
})
|
|
|
|
test('test_task_023_current_user_adapter_normal_variant_input', () => {
|
|
// 正常变体:无 data 的 {item} 信封同样可解。
|
|
const user = parseCurrentUser({ success: true, item: { id: 3, username: '张伟恒', role: 'admin' } })
|
|
assert.equal(user.username, '张伟恒')
|
|
assert.equal(user.role, 'admin')
|
|
})
|
|
|
|
test('test_task_023_current_user_adapter_normal_repeated_operation_is_idempotent', () => {
|
|
// 正常重复:解析不修改输入、结果稳定。
|
|
const payload = { success: true, data: { item: { id: 2, username: 'u', role: 'normal' } } }
|
|
assert.deepEqual(parseCurrentUser(payload), parseCurrentUser(payload))
|
|
assert.deepEqual(payload, { success: true, data: { item: { id: 2, username: 'u', role: 'normal' } } })
|
|
})
|
|
|
|
test('test_task_023_current_user_adapter_boundary_empty_input', () => {
|
|
// 边界空值:响应缺 id 视为无效并抛可操作错误。
|
|
assert.throws(() => parseCurrentUser({ success: true, data: { item: {} } }), /缺少有效 id/)
|
|
assert.throws(() => parseCurrentUser(null), /缺少有效 id|请求失败/)
|
|
})
|
|
|
|
test('test_task_023_current_user_adapter_boundary_single_item', () => {
|
|
// 边界单元素:单用户最小字段即可。
|
|
const user = parseCurrentUser({ data: { item: { id: 9, username: 'root', role: 'super_admin' } } })
|
|
assert.equal(user.username, 'root')
|
|
})
|
|
|
|
test('test_task_023_current_user_adapter_boundary_limit_or_missing_field', () => {
|
|
// 边界上限/缺字段:success=false 被拒绝并带后端 message。
|
|
assert.throws(
|
|
() => parseCurrentUser({ success: false, message: '未登录', code: 401 }),
|
|
/未登录/,
|
|
)
|
|
})
|
|
|
|
test('test_task_023_current_user_adapter_invalid_input_rejected', () => {
|
|
// 异常输入:缺 role/username 不应崩溃;缺 id 拒绝。
|
|
const user = parseCurrentUser({ data: { item: { id: 5, username: '', role: '' } } })
|
|
assert.equal(user.username, '')
|
|
assert.throws(() => parseCurrentUser({ data: { item: { username: 'no-id' } } }), /缺少有效 id/)
|
|
})
|
|
|
|
test('test_task_023_current_user_adapter_dependency_failure_returns_actionable_message', () => {
|
|
// 依赖失败:会话请求适配消费同一解析器;纯解析模块不含 axios 副作用。
|
|
const session = readSource('src/api/session.ts')
|
|
assert.match(session, /parseCurrentUser/)
|
|
const model = readSource('src/api/session-model.ts')
|
|
assert.match(model, /import \{ unwrap \} from '\.\/envelope(?:\.ts)?'/)
|
|
})
|