Files
crawler-plugin/admin-frontend-vue/tests/task-51.test.ts
T

64 lines
3.2 KiB
TypeScript
Raw 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 { deleteBlockReason, deleteConfirmMessage, isDeletableUser } from '../src/pages/account/user-delete-model.ts'
import type { AdminUser } from '../src/types/admin.ts'
test('test_task_051_user_delete_normal_primary_path', () => {
// 正常主路径:非超管且非当前登录账号可删除,确认文案带用户名。
const row: AdminUser = { id: 3, username: '运营一', role: 'normal' }
assert.equal(isDeletableUser(row, 1), true)
assert.equal(deleteBlockReason(row, 1), undefined)
assert.match(deleteConfirmMessage(row), /运营一/)
})
test('test_task_051_user_delete_normal_variant_input', () => {
// 正常变体:admin 角色用户亦可删除(仅超管/自己受限)。
assert.equal(isDeletableUser({ id: 4, username: 'mgr', role: 'admin' }, 1), true)
assert.equal(deleteConfirmMessage({ id: 4, username: 'mgr', role: 'admin' }), '确定删除用户 "mgr" 吗?')
})
test('test_task_051_user_delete_normal_repeated_operation_is_idempotent', () => {
// 正常重复:纯函数结果稳定、不改输入。
const row: AdminUser = { id: 5, username: 'u', role: 'normal' }
assert.equal(deleteBlockReason(row, 1), deleteBlockReason(row, 1))
assert.equal(row.role, 'normal')
})
test('test_task_051_user_delete_boundary_empty_input', () => {
// 边界空值:缺用户行给可操作原因;空用户名不崩溃。
assert.match(deleteBlockReason(null, 1) || '', /用户/)
assert.equal(isDeletableUser(null, 1), false)
})
test('test_task_051_user_delete_boundary_single_item', () => {
// 边界单元素:单条普通用户可删除。
assert.equal(isDeletableUser({ id: 7, username: 'a', role: 'normal' }, 2), true)
})
test('test_task_051_user_delete_boundary_limit_or_missing_field', () => {
// 边界上限/缺当前 id:未带当前 id 时仅超管受限。
assert.equal(isDeletableUser({ id: 8, username: 'b', role: 'normal' }, undefined), true)
assert.match(deleteBlockReason({ id: 9, username: 'root', role: 'super_admin' }, 1) || '', /超级管理员/)
})
test('test_task_051_user_delete_invalid_input_rejected', () => {
// 异常输入:不能删自己、不能删超管。
assert.match(deleteBlockReason({ id: 1, username: 'me', role: 'normal' }, 1) || '', /当前登录/)
assert.equal(isDeletableUser({ id: 1, username: 'me', role: 'normal' }, 1), false)
assert.equal(isDeletableUser({ id: 9, username: 'root', role: 'super_admin' }, 2), false)
})
test('test_task_051_user_delete_dependency_failure_returns_actionable_message', () => {
// 依赖失败/删除走 adapter:页面不再内联 http.deleteusers.ts 负责 DELETE + 解包。
const mod = readSource('src/pages/account/user-delete-model.ts')
assert.equal(/axios|http\./.test(mod), false, '删除模型保持纯逻辑')
const page = readSource('src/pages/account/UsersPage.vue')
assert.match(page, /deleteUser/)
assert.equal(/http\.delete/.test(page), false, '页面不再内联删除请求')
const users = readSource('src/api/users.ts')
assert.match(users, /deleteUser/)
assert.match(users, /http\.delete/)
assert.match(users, /api\/admin\/user/)
})