Files
spliit/src/lib/utils.test.ts
2025-04-21 00:49:43 +02:00

81 lines
1.9 KiB
TypeScript

import { Currency } from './currency'
import { formatCurrency } from './utils'
describe('formatCurrency', () => {
const currency: Currency = {
name: 'Test',
symbol_native: '',
symbol: 'CUR',
code: '',
name_plural: '',
rounding: 0,
decimal_digits: 2,
}
/** For testing decimals */
const partialAmount = 1.23
/** For testing small full amounts */
const smallAmount = 1
/** For testing large full amounts */
const largeAmount = 10000
/** Non-breaking space */
const nbsp = '\xa0'
interface variation {
amount: number
locale: string
result: string
}
/**
* Variations to be tested, chosen as follows
* - `en-US` is a very common i18n fallback
* - `de-DE` exhibited faulty behavior in previous versions
*/
const variations: variation[] = [
{
amount: partialAmount,
locale: `en-US`,
result: `${currency.symbol}1.23`,
},
{
amount: smallAmount,
locale: `en-US`,
result: `${currency.symbol}1.00`,
},
{
amount: largeAmount,
locale: `en-US`,
result: `${currency.symbol}10,000.00`,
},
{
amount: partialAmount,
locale: `de-DE`,
result: `1,23${nbsp}${currency.symbol}`,
},
{
amount: smallAmount,
locale: `de-DE`,
result: `1,00${nbsp}${currency.symbol}`,
},
{
amount: largeAmount,
locale: `de-DE`,
result: `10.000,00${nbsp}${currency.symbol}`,
},
]
for (const variation of variations) {
it(`formats ${variation.amount} in ${variation.locale} without fractions`, () => {
expect(
formatCurrency(currency, variation.amount * 100, variation.locale),
).toBe(variation.result)
})
it(`formats ${variation.amount} in ${variation.locale} with fractions`, () => {
expect(
formatCurrency(currency, variation.amount, variation.locale, true),
).toBe(variation.result)
})
}
})