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 & Pick, ): 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({}), '-') })