import assert from 'node:assert/strict' import test from 'node:test' import { isDepositHandlingOverridden, normalizeConsignmentDepositHandling, normalizeWorkerDepositHandling, resolveConsignmentDepositAction, resolveWorkerDepositMode, } from './consignment-deposit-policy.js' test('押金处置选项归一:非法值一律退回按规则自动', () => { assert.equal(normalizeWorkerDepositHandling('refund'), 'refund') assert.equal(normalizeWorkerDepositHandling('forfeit'), 'forfeit') assert.equal(normalizeWorkerDepositHandling('auto'), 'auto') assert.equal(normalizeWorkerDepositHandling('随便写的'), 'auto') assert.equal(normalizeWorkerDepositHandling(undefined), 'auto') assert.equal(normalizeConsignmentDepositHandling('keep_frozen'), 'keep_frozen') assert.equal(normalizeConsignmentDepositHandling('forfeit'), 'forfeit') assert.equal(normalizeConsignmentDepositHandling(null), 'auto') }) test('打手履约押金:自动规则跟随"是否已确认加好友"', () => { // 已确认加好友 → 自动没收 assert.equal(resolveWorkerDepositMode('auto', true), 'forfeit') // 没确认加好友 → 自动全额退还 assert.equal(resolveWorkerDepositMode('auto', false), 'release') assert.equal(resolveWorkerDepositMode(undefined, false), 'release') }) test('打手履约押金:运营显式选择可以推翻自动规则', () => { // 已确认加好友仍然选择退还 assert.equal(resolveWorkerDepositMode('refund', true), 'release') // 没确认加好友也选择扣除 assert.equal(resolveWorkerDepositMode('forfeit', false), 'forfeit') }) test('卖家发布押金:自动规则 = 已确认加好友没收 / 作废退还 / 回库保持冻结', () => { assert.equal( resolveConsignmentDepositAction('auto', { autoForfeit: true, archive: true }), 'forfeit', ) assert.equal( resolveConsignmentDepositAction('auto', { autoForfeit: true, archive: false }), 'forfeit', ) assert.equal( resolveConsignmentDepositAction('auto', { autoForfeit: false, archive: true }), 'release', ) assert.equal( resolveConsignmentDepositAction('auto', { autoForfeit: false, archive: false }), 'keep_frozen', ) }) test('卖家发布押金:显式"保留冻结"不会去退也不会去打款流水', () => { assert.equal( resolveConsignmentDepositAction('keep_frozen', { autoForfeit: true, archive: true }), 'keep_frozen', ) assert.equal( resolveConsignmentDepositAction('forfeit', { autoForfeit: false, archive: true }), 'forfeit', ) }) test('覆盖押金处置时视为需要留原因', () => { assert.equal(isDepositHandlingOverridden({}), false) assert.equal(isDepositHandlingOverridden({ workerDeposit: 'auto' }), false) assert.equal(isDepositHandlingOverridden({ workerDeposit: 'refund' }), true) assert.equal(isDepositHandlingOverridden({ consignmentDeposit: 'keep_frozen' }), true) })