71 lines
3.4 KiB
TypeScript
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')
|
|
})
|