Files
order_site/apps/frontend/tests/consignment-spec-display.test.ts
T

113 lines
3.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,
resolveConsignmentSpecDisplayItems,
resolveConsignmentSpecText,
} 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({}), '-')
})