重构订单履约发货流程
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import test from 'node:test'
|
||||
|
||||
import { planFulfillmentTaskForOrderItem } from './planner.js'
|
||||
import type { OrderItemRow, OrderRow } from '../../types/repository/rows.js'
|
||||
|
||||
test('planFulfillmentTaskForOrderItem 为 cloudtentacles 商品生成 cloud 履约计划', async () => {
|
||||
const plan = await planFulfillmentTaskForOrderItem({
|
||||
order: createOrder(),
|
||||
item: createOrderItem({
|
||||
sku_code: '荣耀勋章礼包(30个)',
|
||||
sku_name: '荣耀勋章礼包(30个)',
|
||||
item_snapshot_json: {
|
||||
cloudtentacles: {
|
||||
matchMode: 'cloudtentacles_name',
|
||||
normalizedProductName: '荣耀勋章礼包(30个)',
|
||||
cloudSourceKeys: ['account-a'],
|
||||
cloudSkuId: 74,
|
||||
cloudSkuName: '荣耀勋章礼包(30个)',
|
||||
},
|
||||
},
|
||||
}),
|
||||
getProfileByKey: async (profileKey) => ({
|
||||
id: 9,
|
||||
profile_key: profileKey,
|
||||
name: '快手 cloud 履约',
|
||||
executor_key: profileKey,
|
||||
requires_claim: true,
|
||||
auto_dispatch: true,
|
||||
}),
|
||||
})
|
||||
|
||||
assert.ok(plan)
|
||||
assert.equal(plan.executorKey, 'kuaishou_ct_assisted')
|
||||
assert.equal(plan.requiresClaim, false)
|
||||
assert.equal(plan.autoDispatch, false)
|
||||
assert.equal(plan.context.profileKey, 'kuaishou_ct_assisted')
|
||||
assert.equal(
|
||||
(plan.context.kuaishouCloudFulfillment as any).binding.resolvedSourceKey,
|
||||
'account-a',
|
||||
)
|
||||
assert.equal((plan.context.kuaishouCloudFulfillment as any).binding.skuId, 74)
|
||||
assert.equal(plan.context.kuaishouFeifei, null)
|
||||
})
|
||||
|
||||
test('planFulfillmentTaskForOrderItem 为 feifei 商品生成 feifei 履约计划', async () => {
|
||||
const plan = await planFulfillmentTaskForOrderItem({
|
||||
order: createOrder(),
|
||||
item: createOrderItem({
|
||||
sku_code: 'FF-1001',
|
||||
sku_name: '测试皮肤',
|
||||
item_snapshot_json: {
|
||||
kuaishouFeifei: {
|
||||
productCode: 'FF-1001',
|
||||
skuName: '测试皮肤',
|
||||
matchMode: 'kuaishou_feifei_name',
|
||||
},
|
||||
},
|
||||
}),
|
||||
getProfileByKey: async (profileKey) => ({
|
||||
id: 10,
|
||||
profile_key: profileKey,
|
||||
name: 'kuaishou-feifei 履约',
|
||||
executor_key: profileKey,
|
||||
requires_claim: false,
|
||||
auto_dispatch: true,
|
||||
}),
|
||||
})
|
||||
|
||||
assert.ok(plan)
|
||||
assert.equal(plan.executorKey, 'kuaishou_feifei')
|
||||
assert.equal(plan.requiresClaim, true)
|
||||
assert.equal(plan.autoDispatch, false)
|
||||
assert.equal(plan.context.kuaishouCloudFulfillment, null)
|
||||
assert.equal((plan.context.kuaishouFeifei as any).productCode, 'FF-1001')
|
||||
assert.equal((plan.context.kuaishouFeifei as any).productName, '测试皮肤')
|
||||
})
|
||||
|
||||
test('planFulfillmentTaskForOrderItem 未命中平台配置时返回 null', async () => {
|
||||
const plan = await planFulfillmentTaskForOrderItem({
|
||||
order: createOrder(),
|
||||
item: createOrderItem({
|
||||
item_snapshot_json: {
|
||||
cloudtentacles: null,
|
||||
kuaishouFeifei: null,
|
||||
},
|
||||
}),
|
||||
getProfileByKey: async () => null,
|
||||
})
|
||||
|
||||
assert.equal(plan, null)
|
||||
})
|
||||
|
||||
function createOrder(patch: Partial<OrderRow> = {}): OrderRow {
|
||||
return {
|
||||
id: 1,
|
||||
provider: '91kaquan',
|
||||
platform: 'kuaishou',
|
||||
shop_id: '91kaquan',
|
||||
shop_name: '91卡券',
|
||||
platform_order_id: '2614900602069169',
|
||||
order_status: 'paid',
|
||||
pay_status: 'paid',
|
||||
buyer_id: '',
|
||||
buyer_name: '',
|
||||
receiver_contact: '',
|
||||
total_amount: 0,
|
||||
currency: 'CNY',
|
||||
raw_payload_json: '{}',
|
||||
paid_at: '2026-07-08T00:00:00.000Z',
|
||||
created_at: '2026-07-08T00:00:00.000Z',
|
||||
updated_at: '2026-07-08T00:00:00.000Z',
|
||||
...patch,
|
||||
}
|
||||
}
|
||||
|
||||
function createOrderItem(patch: Partial<OrderItemRow> = {}): OrderItemRow {
|
||||
return {
|
||||
id: 10,
|
||||
order_id: 1,
|
||||
sku_code: 'SKU-1',
|
||||
sku_name: '测试商品',
|
||||
quantity: 1,
|
||||
spec_json: '{}',
|
||||
item_snapshot_json: {},
|
||||
created_at: '2026-07-08T00:00:00.000Z',
|
||||
updated_at: '2026-07-08T00:00:00.000Z',
|
||||
...patch,
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user