彻底修复 lewan 自动发货问题-8-8

This commit is contained in:
yml2213
2026-08-08 23:08:05 +08:00
parent 7196752d44
commit 6e41d7e0db
10 changed files with 260 additions and 37 deletions
@@ -58,6 +58,25 @@ test('resolveCloudtentaclesSkuByProductName matches SKU name with logged-in sour
assert.equal(result?.matchMode, 'cloudtentacles_name')
})
test('resolveCloudtentaclesSkuByProductName 多账号匹配不提前固定账号', async () => {
const result = await resolveCloudtentaclesSkuByProductName('商品A', {
listCloudtentaclesSources: () => ({
enabled: true,
sources: [
{ key: 'account-a', enabled: true },
{ key: 'account-b', enabled: true },
],
}),
getCloudtentaclesSessionStateByKey: (key) => ({ token: `token-${key}` }),
listCloudtentaclesSku: async () => ({
items: [{ id: 28, name: '商品A', inventory: 10, price: 100 }],
}),
})
assert.deepEqual(result?.cloudSourceKeys, ['account-a', 'account-b'])
assert.equal(result?.resolvedSourceKey, '')
})
test('resolveCloudtentaclesSkuByProductName prefers override rule with multiple delivery items', async () => {
const result = await resolveCloudtentaclesSkuByProductName('套装1', {
listCloudtentaclesSources: () => ({
@@ -132,6 +151,7 @@ test('resolveCloudtentaclesSkuByProductName prefers override rule with multiple
assert.equal(result?.matchMode, 'cloudtentacles_override')
assert.equal(result?.cloudSkuId, 28)
assert.equal(result?.cloudSkuName, '商品A')
assert.equal(result?.resolvedSourceKey, '')
assert.deepEqual(result?.deliveryItems, [
{
cloudSkuId: 28,
@@ -133,7 +133,9 @@ export async function resolveCloudtentaclesSkuByProductName(
cloudSkuPrice: Number(matchedSku.price || 0) || 0,
cloudSkuInventory: Number(matchedSku.inventory || 0) || 0,
cloudSourceKeys,
resolvedSourceKey: context.sourceKey,
// Matching only discovers compatible accounts. The fulfillment selector
// chooses the least-loaded account immediately before taking a number.
resolvedSourceKey: '',
deliveryItems: [
{
cloudSkuId,
@@ -168,6 +170,7 @@ function buildCloudtentaclesSourceContext(
return {
sourceKey,
accountLabel: String(source.label || sourceKey).trim() || sourceKey,
baseUrl: String(session?.baseUrl || source.baseUrl || '').trim(),
token,
deviceId: normalizeCloudtentaclesDeviceId(session?.deviceId || source.deviceId),
@@ -226,7 +229,7 @@ async function resolveOverrideMatch(
cloudSkuPrice: Number(firstSku.price || 0) || 0,
cloudSkuInventory: Number(firstSku.inventory || 0) || 0,
cloudSourceKeys,
resolvedSourceKey: context.sourceKey,
resolvedSourceKey: rule.sourceKey ? context.sourceKey : '',
deliveryItems,
skuSnapshot: {
overrideRuleId: rule.id,