Files

82 lines
3.6 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 { parseShopGroupList, shopGroupSummary } from '../src/pages/account/shop-group-model.ts'
test('test_task_059_data_group_list_normal_primary_path', () => {
// 正常主路径:解析 Java ShopManageGroupItemVo(camel) 为展示项。
const groups = parseShopGroupList({
success: true,
data: [
{
id: 1,
groupName: '华东组',
leaderUsername: '张伟恒',
memberUserIds: [2, 3],
memberUsernames: ['李四', '王五'],
memberCount: 2,
createdAt: '2026-01-01T00:00:00',
},
],
})
assert.equal(groups.length, 1)
assert.equal(groups[0].name, '华东组')
assert.equal(groups[0].leaderUsername, '张伟恒')
assert.equal(groups[0].memberCount, 2)
assert.deepEqual(groups[0].memberUsernames, ['李四', '王五'])
})
test('test_task_059_data_group_list_normal_variant_input', () => {
// 正常变体:缺组长/组员给空默认;memberCount 缺失按列表长度回退。
const groups = parseShopGroupList([{ id: 2, groupName: '组B', memberUsernames: ['a', 'b'] }])
assert.equal(groups[0].leaderUsername, '')
assert.equal(groups[0].memberCount, 2)
})
test('test_task_059_data_group_list_normal_repeated_operation_is_idempotent', () => {
// 正常重复:解析不改输入、结果稳定。
const payload = [{ id: 3, groupName: 'G', memberCount: 1 }]
assert.deepEqual(parseShopGroupList(payload), parseShopGroupList(payload))
assert.equal(payload[0].memberCount, 1)
})
test('test_task_059_data_group_list_boundary_empty_input', () => {
// 边界空值:空负载/空数组回空列表;空摘要计数为 0。
assert.deepEqual(parseShopGroupList({}), [])
assert.deepEqual(shopGroupSummary([]), { groupCount: 0, memberTotal: 0 })
})
test('test_task_059_data_group_list_boundary_single_item', () => {
// 边界单元素:单分组摘要统计正确。
const groups = parseShopGroupList([{ id: 4, groupName: 'A', memberCount: 3 }])
assert.deepEqual(shopGroupSummary(groups), { groupCount: 1, memberTotal: 3 })
})
test('test_task_059_data_group_list_boundary_limit_or_missing_field', () => {
// 边界上限/缺字段:多分组汇总组员总数;memberCount 缺失按 0。
const groups = parseShopGroupList([
{ id: 1, groupName: 'A', memberCount: 2 },
{ id: 2, groupName: 'B', memberCount: 5 },
])
assert.deepEqual(shopGroupSummary(groups), { groupCount: 2, memberTotal: 7 })
})
test('test_task_059_data_group_list_invalid_input_rejected', () => {
// 异常输入:success=false 抛后端 message;非数组负载回空。
assert.throws(() => parseShopGroupList({ success: false, message: '无权限查看分组' }), /无权限查看分组/)
assert.deepEqual(parseShopGroupList('garbage'), [])
})
test('test_task_059_data_group_list_dependency_failure_returns_actionable_message', () => {
// 依赖失败/加载走 adapterGET shop-manages/groups,页面用 fetch + 摘要,不内联 http。
const mod = readSource('src/pages/account/shop-group-model.ts')
assert.equal(/axios|http\./.test(mod), false, '分组模型保持纯逻辑')
const api = readSource('src/pages/account/shop-group-api.ts')
assert.match(api, /shop-manages\/groups/)
assert.match(api, /parseShopGroupList/)
const page = readSource('src/pages/account/GroupsPage.vue')
assert.match(page, /shop-group-api|fetchShopGroups/, '页面走分组适配接口')
assert.match(page, /filterKeyword|filterLeader/, '分组列表已加名称/组长筛选')
assert.equal(/http\.(get|post)|unwrap\(/.test(page), false, '页面不内联请求')
})