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