Files
order_site/apps/frontend/tests/consignment-spec-display.test.ts
T
zhaoxing a5e877b2ff 统一寄卖仓库与提报审核规格展示
- 规格标签只显示值,0 璀璨不再显示「无」
- 仓库列表长规格文本改为纯值一行
- 列表物品名展示层清理历史 0 璀璨残留
- 补充规格展示回归测试
2026-11-14 14:23:09 +08:00

227 lines
6.1 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 assert from 'node:assert/strict'
import test from 'node:test'
import type { ConsignmentSpecField } from '../src/types/consignment.ts'
import {
formatLegacyConsignmentSpec,
resolveConsignmentDisplayItemName,
resolveConsignmentSpecDisplayItems,
resolveConsignmentSpecTagItems,
resolveConsignmentSpecText,
resolveConsignmentSpecValueText,
} from '../src/utils/consignment-spec-display.ts'
function makeSpec(
overrides: Partial<ConsignmentSpecField> & Pick<ConsignmentSpecField, 'key' | 'label'>,
): ConsignmentSpecField {
return {
type: 'text',
required: false,
options: [],
placeholder: '',
helpText: '',
matchMode: 'exact',
wildcardValues: [],
showInItemName: false,
sortOrder: 0,
...overrides,
}
}
const productSpec = makeSpec({
key: 'product',
label: '商品',
type: 'select',
required: true,
sortOrder: 10,
options: [
{ label: '碎梦浮光珍宝礼盒', value: '15', enabled: true },
{ label: '指挥官密钥', value: '9', enabled: true },
],
})
const systemSpec = makeSpec({
key: 'system',
label: '系统',
type: 'select',
sortOrder: 1,
options: [
{ label: '苹果', value: 'ios', enabled: true },
{ label: '安卓', value: 'android', enabled: true },
],
})
const levelSpec = makeSpec({
key: 'diamondLevel',
label: '钻石等级',
type: 'number',
sortOrder: 2,
})
test('动态规格:选项值映射成选项名称(密钥分类 product=15)', () => {
const items = resolveConsignmentSpecDisplayItems([productSpec], { product: '15' })
assert.deepEqual(items, [{ key: 'product', label: '商品', value: '碎梦浮光珍宝礼盒' }])
})
test('动态规格:按模板 sortOrder 排序,空值不展示', () => {
const items = resolveConsignmentSpecDisplayItems([productSpec, levelSpec, systemSpec], {
product: '15',
system: 'ios',
diamondLevel: '',
})
assert.deepEqual(
items.map((item) => item.key),
['system', 'product'],
)
assert.equal(items[0]?.value, '苹果')
})
test('动态规格:没有模板字段时返回空数组', () => {
assert.deepEqual(resolveConsignmentSpecDisplayItems([], { product: '15' }), [])
assert.deepEqual(resolveConsignmentSpecDisplayItems(undefined, undefined), [])
})
test('规格文本:后端 specText 优先', () => {
assert.equal(
resolveConsignmentSpecText({
specText: '商品 碎梦浮光珍宝礼盒',
specs: [productSpec],
specValues: { product: '9' },
}),
'商品 碎梦浮光珍宝礼盒',
)
})
test('规格文本:无 specText 时按模板现拼', () => {
assert.equal(
resolveConsignmentSpecText({ specs: [productSpec], specValues: { product: '15' } }),
'商品 碎梦浮光珍宝礼盒',
)
})
test('规格文本:没有模板规格时回退旧列,0 璀璨不展示', () => {
assert.equal(
resolveConsignmentSpecText({
system: '苹果',
serverZone: '微信区',
series: '暗潮',
diamondLevel: 3,
brillianceCount: 2,
}),
'苹果 / 微信区 / 暗潮 / 3钻 / 2璀璨',
)
assert.equal(formatLegacyConsignmentSpec({ diamondLevel: 1, brillianceCount: 0 }), '1钻')
assert.equal(resolveConsignmentSpecText({}), '-')
})
const diamondSpec = makeSpec({
key: 'diamondLevel',
label: '钻石等级',
type: 'select',
sortOrder: 2,
options: [
{ label: '3钻', value: '3', enabled: true },
{ label: '4钻', value: '4', enabled: true },
],
})
const brillianceSpec = makeSpec({
key: 'brillianceCount',
label: '璀璨数',
type: 'select',
sortOrder: 3,
options: [
{ label: '无', value: '0', enabled: true },
{ label: '1璀璨', value: '1', enabled: true },
{ label: '2璀璨', value: '2', enabled: true },
],
})
test('列表规格标签:只保留值,0 璀璨不占标签位', () => {
const zero = resolveConsignmentSpecTagItems([systemSpec, diamondSpec, brillianceSpec], {
system: 'ios',
diamondLevel: '4',
brillianceCount: '0',
})
assert.deepEqual(
zero.map((item) => item.value),
['苹果', '4钻'],
)
const withBrilliance = resolveConsignmentSpecTagItems([systemSpec, diamondSpec, brillianceSpec], {
system: 'ios',
diamondLevel: '4',
brillianceCount: '2',
})
assert.deepEqual(
withBrilliance.map((item) => item.value),
['苹果', '4钻', '2璀璨'],
)
})
test('列表规格纯值文本:不含字段名,0 璀璨省略', () => {
assert.equal(
resolveConsignmentSpecValueText(
{
specs: [systemSpec, diamondSpec, brillianceSpec],
specValues: { system: 'ios', diamondLevel: '4', brillianceCount: '0' },
},
{ omitZeroBrilliance: true },
),
'苹果 / 4钻',
)
assert.equal(
resolveConsignmentSpecValueText(
{
specs: [systemSpec, diamondSpec, brillianceSpec],
specValues: { system: 'ios', diamondLevel: '4', brillianceCount: '1' },
},
{ omitZeroBrilliance: true },
),
'苹果 / 4钻 / 1璀璨',
)
// 没有动态规格的历史提报/库存回退旧字段,本身就是纯值
assert.equal(
resolveConsignmentSpecValueText({
system: '苹果',
serverZone: '微信区',
series: '暗潮',
diamondLevel: 3,
brillianceCount: 2,
}),
'苹果 / 微信区 / 暗潮 / 3钻 / 2璀璨',
)
})
test('列表物品名:0 璀璨的历史断尾单位只在展示层清掉', () => {
assert.equal(
resolveConsignmentDisplayItemName({
itemName: '安卓暗潮2钻璀璨 苏尔南',
brillianceCount: 0,
}),
'安卓暗潮2钻 苏尔南',
)
assert.equal(
resolveConsignmentDisplayItemName({
itemName: '安卓暗潮2钻0璀璨 苏尔南',
brillianceCount: 0,
}),
'安卓暗潮2钻 苏尔南',
)
assert.equal(
resolveConsignmentDisplayItemName({
itemName: '苹果血宴1钻1璀璨 苏尔南',
brillianceCount: 1,
}),
'苹果血宴1钻1璀璨 苏尔南',
)
// 系列名本身含「璀璨」时不能误删
assert.equal(
resolveConsignmentDisplayItemName({
itemName: '璀璨系列2钻 苏尔南',
brillianceCount: 0,
}),
'璀璨系列2钻 苏尔南',
)
})