feat(consignment): 保证金支持按规格选项价格乘寄售数量计算
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
import assert from 'node:assert/strict'
|
||||
import { readFileSync } from 'node:fs'
|
||||
import { fileURLToPath } from 'node:url'
|
||||
import test from 'node:test'
|
||||
|
||||
import { resolveConsignmentDepositFen } from '../src/utils/consignment-deposit.ts'
|
||||
|
||||
const perSpecDeposit = {
|
||||
enabled: true,
|
||||
mode: 'per_spec' as const,
|
||||
fixedAmountFen: 0,
|
||||
unitAmountFen: 0,
|
||||
specKey: 'diamondLevel',
|
||||
specPrices: { '1': 100, '3': 300 },
|
||||
}
|
||||
|
||||
test('按数量(规格):选项价格 × 寄售数量', () => {
|
||||
assert.equal(
|
||||
resolveConsignmentDepositFen({
|
||||
deposit: perSpecDeposit,
|
||||
quantity: 5,
|
||||
specValues: { diamondLevel: '3' },
|
||||
fallbackFen: 2000,
|
||||
}),
|
||||
1500,
|
||||
)
|
||||
})
|
||||
|
||||
test('按数量(规格):未配价格或字段缺失按 0 计,不阻塞发布', () => {
|
||||
assert.equal(
|
||||
resolveConsignmentDepositFen({
|
||||
deposit: perSpecDeposit,
|
||||
quantity: 2,
|
||||
specValues: { diamondLevel: '2' },
|
||||
fallbackFen: 2000,
|
||||
}),
|
||||
0,
|
||||
)
|
||||
assert.equal(
|
||||
resolveConsignmentDepositFen({
|
||||
deposit: perSpecDeposit,
|
||||
quantity: 2,
|
||||
specValues: {},
|
||||
fallbackFen: 2000,
|
||||
}),
|
||||
0,
|
||||
)
|
||||
})
|
||||
|
||||
test('固定 / 按数量 / 关闭保证金的口径保持原样', () => {
|
||||
assert.equal(
|
||||
resolveConsignmentDepositFen({
|
||||
deposit: { ...perSpecDeposit, enabled: false },
|
||||
quantity: 3,
|
||||
specValues: { diamondLevel: '3' },
|
||||
fallbackFen: 2000,
|
||||
}),
|
||||
2000,
|
||||
)
|
||||
assert.equal(
|
||||
resolveConsignmentDepositFen({
|
||||
deposit: { ...perSpecDeposit, mode: 'fixed', fixedAmountFen: 500 },
|
||||
quantity: 3,
|
||||
fallbackFen: 2000,
|
||||
}),
|
||||
500,
|
||||
)
|
||||
assert.equal(
|
||||
resolveConsignmentDepositFen({
|
||||
deposit: { ...perSpecDeposit, mode: 'per_quantity', unitAmountFen: 200 },
|
||||
quantity: 3,
|
||||
fallbackFen: 2000,
|
||||
}),
|
||||
600,
|
||||
)
|
||||
})
|
||||
|
||||
test('打手端发布页:保证金按规格价格实时计算', () => {
|
||||
const page = readFileSync(
|
||||
fileURLToPath(new URL('../src/pages/worker/WorkerConsignmentPage.tsx', import.meta.url)),
|
||||
'utf8',
|
||||
)
|
||||
assert.ok(page.includes('resolveConsignmentDepositFen('), '发布页押金必须走统一的规格保证金计算')
|
||||
assert.ok(page.includes('deposit.specKey'), '发布页必须按所选规格字段实时计算押金')
|
||||
})
|
||||
@@ -124,3 +124,14 @@ test('寄卖配置:未售出时长支持一位小数', () => {
|
||||
assert.ok(block.includes('precision={1}'), '未售出时长必须支持一位小数')
|
||||
assert.ok(block.includes('min={0.1}'), '未售出时长下限应为 0.1 小时')
|
||||
})
|
||||
|
||||
test('寄卖配置:保证金支持按数量(规格),弹窗内配置选项价格', () => {
|
||||
const panel = read('../src/pages/admin/panels/ConsignmentConfigPanel.tsx')
|
||||
assert.ok(
|
||||
panel.includes("{ value: 'per_spec', label: '按数量(规格)' }"),
|
||||
'保证金模式必须包含「按数量(规格)」',
|
||||
)
|
||||
assert.ok(panel.includes('title="按数量(规格)保证金"'), '必须提供规格价格配置弹窗')
|
||||
assert.ok(panel.includes('specPricesYuan'), '选项价格必须写回配置')
|
||||
assert.ok(panel.includes('填充全部选项'), '弹窗必须支持批量填充选项价格')
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user