127 lines
3.9 KiB
TypeScript
127 lines
3.9 KiB
TypeScript
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 项')
|
|
})
|