You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

34 lines
1.0 KiB

import {
addMoney,
compareMoney,
formatMoney,
isValidMoneyInput,
moneyEquals,
normalizeMoney,
subtractMoney,
sumMoney
} from '@/utils/budgetMoney'
describe('budget money', () => {
it('normalizes and displays four decimals', () => {
expect(normalizeMoney('12.34')).toBe('12.3400')
expect(formatMoney('0.0001')).toBe('0.0001')
expect(formatMoney(null)).toBe('0.0000')
})
it('calculates without binary floating point drift', () => {
expect(addMoney('0.1000', '0.2000')).toBe('0.3000')
expect(subtractMoney('1.0000', '0.9999')).toBe('0.0001')
expect(sumMoney(['9999999999.9999', '0.0002'])).toBe('10000000000.0001')
expect(moneyEquals('12.34', '12.3400')).toBe(true)
expect(compareMoney('1.0000', '0.9999')).toBe(1)
})
it('rejects over-precision and out-of-range input', () => {
expect(isValidMoneyInput('1.00001')).toBe(false)
expect(isValidMoneyInput('100000000000.0000')).toBe(false)
expect(isValidMoneyInput('1e3')).toBe(false)
expect(() => normalizeMoney('1.00001')).toThrow()
})
})