优化后台订单列表展示并支持商品标题与SKU规格
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
import test from 'node:test'
|
||||
import assert from 'node:assert/strict'
|
||||
|
||||
import { mapAdminOrderListItem, summarizeOrderItems } from './admin-order-read-helpers.js'
|
||||
import type { OrderItemRow, OrderListRow } from '../../types/repository/rows.js'
|
||||
|
||||
test('mapAdminOrderListItem formats itemTitle, skuNick, and summary correctly for single item', () => {
|
||||
const order: OrderListRow = {
|
||||
id: 1,
|
||||
provider: '91',
|
||||
platform: 'kuaishou',
|
||||
shop_id: '4269276762',
|
||||
shop_name: '独角兽游戏专营店',
|
||||
platform_order_id: '2625301761098133',
|
||||
order_status: 'paid',
|
||||
pay_status: 'paid',
|
||||
buyer_id: '',
|
||||
buyer_name: '',
|
||||
receiver_contact: '',
|
||||
total_amount: 16900,
|
||||
currency: 'CNY',
|
||||
raw_payload_json: {},
|
||||
paid_at: '2026-09-10T09:15:00.000Z',
|
||||
created_at: '2026-09-10T09:15:00.000Z',
|
||||
updated_at: '2026-09-10T09:15:00.000Z',
|
||||
}
|
||||
|
||||
const orderItems: OrderItemRow[] = [
|
||||
{
|
||||
id: 10,
|
||||
order_id: 1,
|
||||
sku_code: '26079757920762',
|
||||
sku_name: '安卓血宴2钻',
|
||||
quantity: 1,
|
||||
spec_json: JSON.stringify({
|
||||
itemTitle: '和平精英地铁逃生装备满钻低价苏尔南怒嚎暗潮手枪璀璨无暇1到7钻',
|
||||
skuNick: '安卓血宴2钻',
|
||||
}),
|
||||
item_snapshot_json: JSON.stringify({
|
||||
kuaishouSendCode: {
|
||||
itemTitle: '和平精英地铁逃生装备满钻低价苏尔南怒嚎暗潮手枪璀璨无暇1到7钻',
|
||||
skuNick: '安卓血宴2钻',
|
||||
},
|
||||
}),
|
||||
},
|
||||
]
|
||||
|
||||
const mapped = mapAdminOrderListItem(order, { orderItems, tasks: [] })
|
||||
|
||||
assert.equal(mapped.itemTitle, '和平精英地铁逃生装备满钻低价苏尔南怒嚎暗潮手枪璀璨无暇1到7钻')
|
||||
assert.equal(mapped.skuNick, '安卓血宴2钻')
|
||||
assert.equal(
|
||||
mapped.itemSummary,
|
||||
'和平精英地铁逃生装备满钻低价苏尔南怒嚎暗潮手枪璀璨无暇1到7钻 (安卓血宴2钻)',
|
||||
)
|
||||
assert.equal(mapped.itemCount, 1)
|
||||
assert.equal(mapped.totalQuantity, 1)
|
||||
assert.deepEqual(mapped.items, [
|
||||
{
|
||||
itemTitle: '和平精英地铁逃生装备满钻低价苏尔南怒嚎暗潮手枪璀璨无暇1到7钻',
|
||||
skuNick: '安卓血宴2钻',
|
||||
quantity: 1,
|
||||
},
|
||||
])
|
||||
})
|
||||
|
||||
test('mapAdminOrderListItem falls back to order raw_payload_json when orderItems is empty', () => {
|
||||
const order: OrderListRow = {
|
||||
id: 2,
|
||||
provider: '91',
|
||||
platform: 'kuaishou',
|
||||
shop_id: '4269276762',
|
||||
shop_name: '独角兽游戏专营店',
|
||||
platform_order_id: '2625301841249202',
|
||||
order_status: 'paid',
|
||||
pay_status: 'paid',
|
||||
buyer_id: '',
|
||||
buyer_name: '',
|
||||
receiver_contact: '',
|
||||
total_amount: 5200,
|
||||
currency: 'CNY',
|
||||
raw_payload_json: {
|
||||
source: 'kuaishou_send_code',
|
||||
body: {
|
||||
itemTitle: '和平精英地铁逃生装备满钻低价苏尔南怒嚎暗潮手枪',
|
||||
num: 1,
|
||||
ext: '{"skuNick":"安卓血宴1钻"}',
|
||||
},
|
||||
},
|
||||
paid_at: '2026-09-10T09:18:40.000Z',
|
||||
created_at: '2026-09-10T09:18:40.000Z',
|
||||
updated_at: '2026-09-10T09:18:40.000Z',
|
||||
}
|
||||
|
||||
const mapped = mapAdminOrderListItem(order, { orderItems: [], tasks: [] })
|
||||
|
||||
assert.equal(mapped.itemTitle, '和平精英地铁逃生装备满钻低价苏尔南怒嚎暗潮手枪')
|
||||
assert.equal(mapped.skuNick, '安卓血宴1钻')
|
||||
assert.equal(mapped.itemCount, 1)
|
||||
assert.equal(mapped.totalQuantity, 1)
|
||||
assert.equal(mapped.itemSummary, '和平精英地铁逃生装备满钻低价苏尔南怒嚎暗潮手枪 (安卓血宴1钻)')
|
||||
})
|
||||
|
||||
test('summarizeOrderItems formats multiple items cleanly', () => {
|
||||
const items: OrderItemRow[] = [
|
||||
{
|
||||
id: 1,
|
||||
order_id: 1,
|
||||
sku_code: 'SKU1',
|
||||
sku_name: '规格A',
|
||||
quantity: 1,
|
||||
spec_json: { itemTitle: '商品1', skuNick: '规格A' },
|
||||
},
|
||||
{
|
||||
id: 2,
|
||||
order_id: 1,
|
||||
sku_code: 'SKU2',
|
||||
sku_name: '规格B',
|
||||
quantity: 1,
|
||||
spec_json: { itemTitle: '商品2', skuNick: '规格B' },
|
||||
},
|
||||
]
|
||||
|
||||
const summary = summarizeOrderItems(items)
|
||||
assert.equal(summary, '商品1 (规格A) 等 2 项')
|
||||
})
|
||||
Reference in New Issue
Block a user