import {
  NumberFormatterRegistry,
  getNumberFormatterRegistry,
  getNumberFormatter,
  formatNumber,
} from '@superset-ui/core/src';

describe('NumberFormatterRegistrySingleton', () => {
  describe('getNumberFormatterRegistry()', () => {
    it('returns a NumberFormatterRegisry', () => {
      expect(getNumberFormatterRegistry()).toBeInstanceOf(NumberFormatterRegistry);
    });
  });
  describe('getNumberFormatter(format)', () => {
    it('returns a format function', () => {
      const format = getNumberFormatter('.3s');
      expect(format(12345)).toEqual('12.3k');
    });
    it('returns a format function even given invalid format', () => {
      const format = getNumberFormatter('xkcd');
      expect(format(12345)).toEqual('12345 (Invalid format: xkcd)');
    });
    it('falls back to default format if format is not specified', () => {
      const formatter = getNumberFormatter();
      expect(formatter.format(100)).toEqual('100');
    });
  });
  describe('formatNumber(format, value)', () => {
    it('format the given number using the specified format', () => {
      const output = formatNumber('.3s', 12345);
      expect(output).toEqual('12.3k');
    });
    it('falls back to the default formatter if the format is undefined', () => {
      expect(formatNumber(undefined, 1000)).toEqual('1k');
    });
  });
});
