pkg-components
Version:
553 lines (494 loc) • 12.8 kB
text/typescript
import { formatValue } from '../formatValue';
describe('formatValue', () => {
it('should return empty if blank value', () => {
expect(
formatValue({
value: '',
})
).toEqual('');
});
it('should add group separator', () => {
expect(
formatValue({
value: '1234567',
groupSeparator: '/',
})
).toEqual('1/234/567');
});
it('should handle comma separator for decimals', () => {
expect(
formatValue({
value: '1234567,89',
decimalSeparator: ',',
groupSeparator: '.',
})
).toEqual('1.234.567,89');
});
it('should handle - as separator for decimals', () => {
expect(
formatValue({
value: '1234567-89',
decimalSeparator: '-',
groupSeparator: '.',
})
).toEqual('1.234.567-89');
});
it('should handle empty decimal separator', () => {
expect(
formatValue({
value: '123456789',
decimalSeparator: '',
groupSeparator: '',
})
).toEqual('123456789');
});
it('should NOT add separator if "disableGroupSeparators" is true', () => {
expect(
formatValue({
value: '1234567',
disableGroupSeparators: true,
})
).toEqual('1234567');
});
it('should NOT add separator if "disableGroupSeparators" is true even if decimal and group separators specified', () => {
expect(
formatValue({
value: '1234567',
decimalSeparator: '.',
groupSeparator: ',',
disableGroupSeparators: true,
})
).toEqual('1234567');
});
it('should add prefix', () => {
expect(
formatValue({
value: '123',
prefix: '£',
})
).toEqual('£123');
});
it('should include decimal separator if last char', () => {
expect(
formatValue({
value: '1234567.',
groupSeparator: ',',
decimalSeparator: '.',
})
).toEqual('1,234,567.');
expect(
formatValue({
value: '1234567,',
groupSeparator: '.',
decimalSeparator: ',',
})
).toEqual('1.234.567,');
});
it('should include decimals', () => {
expect(
formatValue({
value: '1234.567',
groupSeparator: ',',
decimalSeparator: '.',
})
).toEqual('1,234.567');
});
it('should format value', () => {
expect(
formatValue({
value: '1234567.89',
groupSeparator: ',',
decimalSeparator: '.',
prefix: '£',
})
).toEqual('£1,234,567.89');
});
it('should handle decimals 999999', () => {
expect(
formatValue({
value: '1.99999',
intlConfig: { locale: 'en-GB', currency: 'GBP' },
})
).toEqual('£1.99999');
expect(
formatValue({
value: '1.99999',
})
).toEqual('1.99999');
});
it('should handle 0 value', () => {
expect(
formatValue({
value: '0',
prefix: '£',
})
).toEqual('£0');
expect(
formatValue({
decimalSeparator: '.',
groupSeparator: ',',
disableGroupSeparators: false,
decimalScale: 2,
prefix: '£',
value: '0',
})
).toEqual('£0.00');
});
it('should pad decimal values with decimalScale', () => {
expect(
formatValue({
decimalSeparator: '.',
groupSeparator: ',',
disableGroupSeparators: false,
decimalScale: 2,
prefix: '£',
value: '0.1',
})
).toEqual('£0.10');
expect(
formatValue({
decimalSeparator: '.',
groupSeparator: ',',
disableGroupSeparators: false,
decimalScale: 4,
prefix: '£',
value: '0.01',
})
).toEqual('£0.0100');
});
it('should trim decimal values with decimalScale', () => {
const value = String(9.99 / 0.33);
expect(
formatValue({
value,
decimalScale: 2,
intlConfig: { locale: 'en-AU', currency: 'AUD' },
})
).toEqual('$30.27');
expect(
formatValue({
value,
decimalScale: 1,
intlConfig: { locale: 'en-AU', currency: 'AUD' },
})
).toEqual('$30.2');
expect(
formatValue({
value,
decimalScale: 0,
intlConfig: { locale: 'en-AU', currency: 'AUD' },
})
).toEqual('$30');
});
it('should prefix decimal values correctly with zero', () => {
expect(
formatValue({
decimalSeparator: '.',
groupSeparator: ',',
decimalScale: 2,
prefix: '$',
value: '.02',
})
).toEqual('$0.02');
});
describe('negative values', () => {
it('should handle negative values', () => {
expect(
formatValue({
value: '-1234',
groupSeparator: ',',
decimalSeparator: '.',
prefix: '£',
})
).toEqual('-£1,234');
});
it('should return negative sign if only negative sign', () => {
expect(
formatValue({
value: '-',
prefix: '£',
})
).toEqual('-');
});
});
it('should handle negative value and "-" as groupSeparator', () => {
expect(
formatValue({
value: '-1234',
groupSeparator: '-',
prefix: '£',
})
).toEqual('-£1-234');
});
it('should handle negative value and "-" as decimalSeparator', () => {
expect(
formatValue({
value: '-12-34',
decimalSeparator: '-',
prefix: '£',
})
).toEqual('-£12-34');
});
it('should handle negative value and "-" as groupSeparator', () => {
expect(
formatValue({
value: '-123456',
groupSeparator: '-',
prefix: '£',
})
).toEqual('-£123-456');
});
describe('intlConfig', () => {
it('should handle intlConfig passed in', () => {
expect(
formatValue({
value: '-500000',
intlConfig: { locale: 'en-IN', currency: 'INR' },
})
).toEqual('-₹5,00,000');
expect(
formatValue({
value: '123456.79',
intlConfig: { locale: 'zh-CN', currency: 'CNY' },
})
).toEqual('¥123,456.79');
expect(
formatValue({
value: '-123',
intlConfig: { locale: 'nl-NL', currency: 'EUR' },
})
).toEqual('€\xa0-123');
expect(
formatValue({
value: '-123',
intlConfig: { locale: 'nl-NL', currency: 'EUR' },
prefix: '€',
})
).toEqual('€\xa0-123');
});
it('should able to omit intlConfig.currency', () => {
expect(
formatValue({
value: '-500000',
intlConfig: { locale: 'en-IN' },
})
).toEqual('-5,00,000');
expect(
formatValue({
value: '123456.79',
intlConfig: { locale: 'zh-CN' },
})
).toEqual('123,456.79');
});
it('should handle suffix', () => {
expect(
formatValue({
value: '1',
decimalSeparator: ',',
intlConfig: { locale: 'de-DE', currency: 'EUR' },
})
).toEqual(`1\xa0€`);
});
it('should handle suffix ending with decimal separator', () => {
expect(
formatValue({
value: '1,',
decimalSeparator: ',',
intlConfig: { locale: 'de-DE', currency: 'EUR' },
})
).toEqual(`1,\xa0€`);
});
it('should handle suffix ending with decimal separator and decimals', () => {
expect(
formatValue({
value: '123,00',
decimalSeparator: ',',
intlConfig: { locale: 'de-DE', currency: 'EUR' },
})
).toEqual(`123,00\xa0€`);
expect(
formatValue({
value: '123,98',
decimalSeparator: ',',
intlConfig: { locale: 'de-DE', currency: 'EUR' },
})
).toEqual(`123,98\xa0€`);
});
it('should override locale if prefix passed in', () => {
expect(
formatValue({
value: '345',
intlConfig: { locale: 'en-US', currency: 'USD' },
prefix: '₹',
})
).toEqual('₹345');
expect(
formatValue({
value: '123',
intlConfig: { locale: 'en-US', currency: 'USD' },
prefix: '$',
})
).toEqual('$123');
expect(
formatValue({
value: '-123',
intlConfig: { locale: 'en-US', currency: 'USD' },
prefix: '$',
})
).toEqual('-$123');
});
it('should override locale if groupSeparator passed in', () => {
expect(
formatValue({
value: '-123456',
intlConfig: { locale: 'en-IN', currency: 'INR' },
groupSeparator: '-',
})
).toEqual('-₹1-23-456');
});
it('should override locale if decimalSeparator passed in', () => {
expect(
formatValue({
value: '654321-00',
intlConfig: { locale: 'zh-CN', currency: 'CNY' },
decimalSeparator: '-',
})
).toEqual('¥654,321-00');
});
it('should override locale if disableGroupSeparators passed in', () => {
expect(
formatValue({
value: '987654321',
intlConfig: { locale: 'zh-CN', currency: 'CNY' },
decimalSeparator: '.',
groupSeparator: ',',
disableGroupSeparators: true,
})
).toEqual('¥987654321');
});
});
describe('custom suffix', () => {
it('should handle custom suffix', () => {
expect(
formatValue({
value: '123',
suffix: '$',
})
).toEqual(`123$`);
expect(
formatValue({
value: '0',
suffix: ' %',
})
).toEqual(`0 %`);
});
it('should handle custom suffix with negative', () => {
expect(
formatValue({
value: '-123.99',
suffix: '$',
})
).toEqual(`-123.99$`);
});
it('should handle custom suffix with decimalScale', () => {
expect(
formatValue({
value: '123',
decimalSeparator: '.',
decimalScale: 3,
suffix: '$',
})
).toEqual(`123.000$`);
expect(
formatValue({
value: '123.456',
decimalSeparator: '.',
decimalScale: 2,
suffix: '$',
})
).toEqual(`123.45$`);
});
it('should handle custom suffix ending with decimal separator', () => {
expect(
formatValue({
value: '123.',
decimalSeparator: '.',
suffix: '$',
})
).toEqual(`123.$`);
});
it('should handle custom suffix ending with decimal separator and decimals', () => {
expect(
formatValue({
value: '123.45',
decimalSeparator: '.',
suffix: '$',
})
).toEqual(`123.45$`);
expect(
formatValue({
value: '123.0',
decimalSeparator: '.',
suffix: '$',
})
).toEqual(`123.0$`);
});
it('should override intl config suffix', () => {
expect(
formatValue({
value: '123.98',
decimalSeparator: '.',
suffix: '$',
intlConfig: { locale: 'de-DE', currency: 'EUR' },
})
).toEqual(`123.98$`);
expect(
formatValue({
value: '-123.98',
decimalSeparator: '.',
suffix: '$',
intlConfig: { locale: 'de-DE', currency: 'EUR' },
})
).toEqual(`-123.98$`);
});
it('should handle custom suffix and prefix', () => {
expect(
formatValue({
value: '123.98',
decimalSeparator: '.',
suffix: '$',
prefix: '£',
})
).toEqual(`£123.98$`);
});
it('should handle custom suffix and prefix with intl config', () => {
expect(
formatValue({
value: '123.98',
decimalSeparator: '.',
suffix: '$',
prefix: '£',
intlConfig: { locale: 'de-DE', currency: 'EUR' },
})
).toEqual(`£123.98$`);
});
it('should add decimals if intlConfig has no currency provided, decimalScale defined and the input value is X.00', () => {
expect(
formatValue({
value: '123.00',
intlConfig: { locale: 'en-US' },
decimalScale: 2,
})
).toEqual(`123.00`);
});
it('should add decimals if intlConfig has no currency provided, decimalScale defined and the input value is X.00 (de-DE)', () => {
expect(
formatValue({
value: '123.00',
intlConfig: { locale: 'de-DE' },
decimalScale: 2,
})
).toEqual(`123,00`);
});
});
});