Files
qipai/backend/tests/legacy-money.test.mjs
2026-06-18 09:40:40 +08:00

46 lines
1.1 KiB
JavaScript

import assert from 'node:assert/strict';
import {
legacyDecimalToCents,
MYSQL_UNSIGNED_INT_MAX
} from '../dist/db/legacy-money.js';
assert.equal(legacyDecimalToCents('0'), 0);
assert.equal(legacyDecimalToCents('0.01'), 1);
assert.equal(legacyDecimalToCents('12.3'), 1230);
assert.equal(legacyDecimalToCents('12.34'), 1234);
assert.equal(legacyDecimalToCents(12.34), 1234);
assert.equal(legacyDecimalToCents('42949672.95'), MYSQL_UNSIGNED_INT_MAX);
assert.equal(legacyDecimalToCents(null, { nullable: true }), null);
for (const invalidValue of [
'',
' 1.00',
'1.00 ',
'-0.01',
'+1.00',
'1.001',
'1e2',
'NaN',
Number.NaN,
Number.POSITIVE_INFINITY,
{},
null
]) {
assert.throws(
() => legacyDecimalToCents(invalidValue),
/Legacy money/
);
}
assert.throws(
() => legacyDecimalToCents('42949672.96', { field: 'member_order_info.price' }),
/member_order_info\.price.*exceeds/
);
assert.throws(
() => legacyDecimalToCents('1.00', { maxCents: Number.MAX_SAFE_INTEGER + 1 }),
/maxCents/
);
console.log('PASS: legacy DECIMAL money conversion is exact and bounded.');