抽离后台平台配置领域匹配辅助逻辑

This commit is contained in:
yml
2026-05-04 14:53:37 +08:00
parent 244aa0ed1d
commit 34eb54f906
3 changed files with 341 additions and 129 deletions
@@ -0,0 +1,197 @@
import test from 'node:test'
import assert from 'node:assert/strict'
import {
applyOptionalStringField,
findMatchingObservedBinding,
mapAdminAgisoMessagingDefaults,
mapAdminAgisoShopConfigItem,
mapAdminFulfillmentBindingConfigItem,
mapAdminObservedProductItem,
matchesObservedProduct,
resolveFulfillmentBindingMatchShopId,
} from './admin-platform-config-domain.js'
test('mapAdminAgisoMessagingDefaults normalizes escaped newlines', () => {
assert.deepEqual(
mapAdminAgisoMessagingDefaults({
messageTemplate: ' hello\\nworld ',
autoDeliveryMessageTemplate: ' done\\nnow ',
}),
{
messageTemplate: 'hello\nworld',
autoDeliveryMessageTemplate: 'done\nnow',
},
)
})
test('mapAdminAgisoShopConfigItem masks secrets and reports configured flags', () => {
assert.deepEqual(
mapAdminAgisoShopConfigItem('1001', {
shopName: ' 店铺A ',
accessToken: 'abcdef1234567890',
enabled: true,
messageTemplate: ' hi\\nall ',
autoDeliveryMessageTemplate: ' ok ',
appSecret: 'secret-1',
apiVersion: ' v2 ',
sendMessageEndpoint: ' /send ',
}),
{
shopId: '1001',
shopName: '店铺A',
accessToken: 'abcdef1234567890',
accessTokenMasked: 'abcdef****567890',
enabled: true,
messageTemplate: 'hi\nall',
autoDeliveryMessageTemplate: 'ok',
appSecretConfigured: true,
apiVersion: 'v2',
sendMessageEndpoint: '/send',
},
)
})
test('applyOptionalStringField updates and clears normalized template fields', () => {
const target = { messageTemplate: 'old' }
applyOptionalStringField(target, 'messageTemplate', { messageTemplate: ' next\\nline ' })
assert.deepEqual(target, { messageTemplate: 'next\nline' })
applyOptionalStringField(target, 'messageTemplate', { messageTemplate: ' ' })
assert.deepEqual(target, {})
})
test('mapAdminFulfillmentBindingConfigItem normalizes binding shape', () => {
assert.deepEqual(
mapAdminFulfillmentBindingConfigItem({
provider: ' agiso ',
platform: ' xianyu ',
shopId: ' shop-1 ',
skuCode: ' sku-1 ',
priority: '80',
match: {
externalSkuCode: ' ext-1 ',
},
}),
{
provider: 'agiso',
platform: 'xianyu',
shopId: 'shop-1',
shopName: '',
khhaoShopId: '',
skuCode: 'sku-1',
skuName: '',
profileKey: '',
enabled: true,
priority: 80,
config: {},
match: {
externalSkuCode: 'ext-1',
externalItemId: '',
externalSkuName: '',
config: {},
},
},
)
})
test('resolveFulfillmentBindingMatchShopId prefers khhaoShopId for khhao kuaishou bindings', () => {
assert.equal(
resolveFulfillmentBindingMatchShopId({
provider: 'khhao',
platform: 'kuaishou',
shopId: 'shop-a',
khhaoShopId: 'khhao-1',
}),
'khhao-1',
)
assert.equal(
resolveFulfillmentBindingMatchShopId({
provider: 'agiso',
platform: 'xianyu',
shopId: 'shop-a',
khhaoShopId: 'khhao-1',
}),
'shop-a',
)
})
test('matchesObservedProduct honors provider platform shop and external fields', () => {
const binding = {
provider: 'agiso',
platform: 'xianyu',
shopId: 'shop-1',
match: {
externalSkuCode: 'sku-ext-1',
externalItemId: '',
externalSkuName: '',
},
}
assert.equal(
matchesObservedProduct(binding, {
provider: 'agiso',
platform: 'xianyu',
shopId: 'shop-1',
externalSkuCode: 'sku-ext-1',
}),
true,
)
assert.equal(
matchesObservedProduct(binding, {
provider: 'agiso',
platform: 'xianyu',
shopId: 'shop-2',
externalSkuCode: 'sku-ext-1',
}),
false,
)
})
test('mapAdminObservedProductItem attaches matched binding summary', () => {
const bindings = [
{
provider: 'agiso',
platform: 'xianyu',
shopId: 'shop-1',
skuCode: 'sku-1',
skuName: 'SKU 1',
profileKey: 'profile-1',
match: {
externalSkuCode: 'ext-1',
},
},
]
const observed = {
provider: 'agiso',
platform: 'xianyu',
shopId: 'shop-1',
shopName: '店铺1',
externalItemId: '',
externalSkuCode: 'ext-1',
externalSkuName: '礼包1',
latestSeenAt: '2026-05-04T10:00:00.000Z',
orderItemCount: 2,
}
assert.deepEqual(findMatchingObservedBinding(bindings, observed), bindings[0])
assert.deepEqual(mapAdminObservedProductItem(observed, bindings), {
provider: 'agiso',
platform: 'xianyu',
shopId: 'shop-1',
shopName: '店铺1',
externalItemId: '',
externalSkuCode: 'ext-1',
externalSkuName: '礼包1',
latestSeenAt: '2026-05-04T10:00:00.000Z',
orderItemCount: 2,
configured: true,
matchedBinding: {
skuCode: 'sku-1',
skuName: 'SKU 1',
profileKey: 'profile-1',
},
})
})