86 lines
2.2 KiB
TypeScript
86 lines
2.2 KiB
TypeScript
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'), '发布页必须按所选规格字段实时计算押金')
|
|
})
|