Files
order_site/apps/frontend/tests/consignment-deposit.test.ts
T

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