Files
simkeep/tests/money.test.js
T
2026-10-06 15:49:27 +08:00

21 lines
1.4 KiB
JavaScript

import assert from 'node:assert/strict';
let money;
try {money=await import('../money.js');} catch {}
assert.ok(money,'Exact currency helpers must exist');
const {normalizeAmount,sumMoney,balanceAfter,formatMoney}=money;
assert.equal(normalizeAmount('00019.9','USD'),'19.90');
assert.equal(normalizeAmount('1000.00','JPY'),'1000');
assert.equal(normalizeAmount('1.234','KWD'),'1.234');
for(const [amount,currency] of [['1.001','USD'],['1.1','JPY'],['-1','USD'],['1e3','USD'],['NaN','USD'],['1000000000','USD'],['1','ZZZ']]) {
assert.throws(()=>normalizeAmount(amount,currency));
}
assert.deepEqual(sumMoney([{currency:'USD',amount:'0.10'},{currency:'USD',amount:'0.20'},{currency:'JPY',amount:'1000'}]),[{currency:'JPY',amount:'1000'},{currency:'USD',amount:'0.30'}]);
assert.equal(balanceAfter([{currency:'USD',amount:'0.30'}],{currency:'USD',amount:'0.10'},'deduct').amount,'0.20');
assert.throws(()=>balanceAfter([],{currency:'USD',amount:'0.10'},'deduct'));
assert.throws(()=>balanceAfter([{currency:'USD',amount:'0.30'}],{currency:'USD',amount:'0.31'},'deduct'));
assert.equal(balanceAfter([],{currency:'HKD',amount:'5.50'},'credit').amount,'5.50');
assert.equal(formatMoney({currency:'USD',amount:'1250.50'}),'USD 1,250.50');
assert.equal(formatMoney({currency:'JPY',amount:'1000'}),'JPY 1,000');
assert.equal(formatMoney(null),'未填写');
console.log('Money: 18 checks passed');