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

71 lines
3.4 KiB
TypeScript

import test from 'node:test'
import assert from 'node:assert/strict'
import { readSource } from './helpers.ts'
import { validateShopGroupForm } from '../src/pages/account/shop-group-model.ts'
// module 13 task 253:数据权限分组页面对齐(新建/编辑/删除 + 组员展示 + 组长锁定)。
test('test_task_253_group_list_normal_primary_path', () => {
const page = readSource('src/pages/account/GroupsPage.vue')
assert.match(page, /新建分组/, '需有新建分组入口')
assert.match(page, /GroupEditorDialog/, '需挂载分组编辑器')
assert.match(page, /组员/, '列表需含组员列')
assert.match(page, /memberUsernames/, '组员列读 memberUsernames')
})
test('test_task_253_group_list_normal_variant_input', () => {
// 组长不可改、仅组长/超管可编辑删除。
const page = readSource('src/pages/account/GroupsPage.vue')
assert.match(page, /canEditOf/, '需有可编辑判定')
assert.match(page, /leaderUserId/, '判定依赖组长 leaderUserId')
const editor = readSource('src/pages/account/GroupEditorDialog.vue')
assert.match(editor, /组长不可更改|组长(创建人)/, '组长语义可见')
})
test('test_task_253_group_list_normal_repeated_operation_is_idempotent', () => {
// 分组名校验幂等。
assert.deepEqual(validateShopGroupForm(''), { groupName: '请输入分组名称' })
assert.deepEqual(validateShopGroupForm(' '), { groupName: '请输入分组名称' })
assert.deepEqual(validateShopGroupForm('A组'), {})
})
test('test_task_253_group_list_boundary_empty_input', () => {
const page = readSource('src/pages/account/GroupsPage.vue')
assert.match(page, /删除成功/, '删除成功提示')
assert.match(page, /openAdminConfirm/, '删除确认走统一确认组件')
const editor = readSource('src/pages/account/GroupEditorDialog.vue')
assert.match(editor, /更新成功/, '更新成功提示')
assert.match(editor, /创建成功/, '创建成功提示')
})
test('test_task_253_group_list_boundary_single_item', () => {
// 单组:无组员显示“无”,超员折叠 +N。
const page = readSource('src/pages/account/GroupsPage.vue')
assert.match(page, /member-none|无/, '无组员占位')
assert.match(page, /slice\(0,\s*10\)/, '超员折叠')
})
test('test_task_253_group_list_boundary_limit_or_missing_field', () => {
// 边界上限:编辑器含 分组名称/组长(创建人)/组员 选择。
const editor = readSource('src/pages/account/GroupEditorDialog.vue')
assert.match(editor, /groupName/, '含分组名称字段')
assert.match(editor, /memberIds/, '含组员选择')
assert.match(editor, /fetchUserList/, '成员候选来自用户列表')
})
test('test_task_253_group_list_invalid_input_rejected', () => {
// 异常:空名不可保存。
const editor = readSource('src/pages/account/GroupEditorDialog.vue')
assert.match(editor, /validateShopGroupForm/, '保存前走分组名校验')
})
test('test_task_253_group_list_dependency_failure_returns_actionable_message', () => {
// 依赖:CRUD 走 /api/admin/shop-manages/groups;模型解析 member/leader ids。
const api = readSource('src/pages/account/shop-group-api.ts')
assert.match(api, /shop-manages\/groups/, '分组端点真实')
assert.match(api, /deleteShopGroup/, '含删除适配')
const model = readSource('src/pages/account/shop-group-model.ts')
assert.match(model, /leaderUserId/, '模型需解析组长 id')
assert.match(model, /memberUserIds/, '模型需解析成员 id')
})