import { abbrValue, parseAbbrValue } from '../parseAbbrValue';

describe('abbrValue', () => {
  it('should not convert value under 1000', () => {
    expect(abbrValue(999)).toEqual('999');
  });

  it('should convert thousand to k', () => {
    expect(abbrValue(1000)).toEqual('1k');
    expect(abbrValue(1500)).toEqual('1.5k');
    expect(abbrValue(10000)).toEqual('10k');
  });

  it('should work with comma as decimal separator', () => {
    expect(abbrValue(1500, ',')).toEqual('1,5k');
  });

  it('should work with decimal places option', () => {
    expect(abbrValue(123456, '.')).toEqual('0.123456M');
    expect(abbrValue(123456, '.', 2)).toEqual('0.12M');
  });
});

describe('parseAbbrValue', () => {
  it('should return undefined if cannot parse', () => {
    expect(parseAbbrValue('1km')).toEqual(undefined);
    expect(parseAbbrValue('2mb')).toEqual(undefined);
    expect(parseAbbrValue('3a')).toEqual(undefined);
  });

  it('should return undefined if no abbreviation', () => {
    expect(parseAbbrValue('1.23')).toEqual(undefined);
    expect(parseAbbrValue('100')).toEqual(undefined);
    expect(parseAbbrValue('20000')).toEqual(undefined);
  });

  it('should return undefined for only letter', () => {
    expect(parseAbbrValue('k')).toBeUndefined();
    expect(parseAbbrValue('m')).toBeUndefined();
    expect(parseAbbrValue('b')).toBeUndefined();
  });

  it('should return 0 for 0', () => {
    expect(parseAbbrValue('0k')).toEqual(0);
    expect(parseAbbrValue('0m')).toEqual(0);
    expect(parseAbbrValue('0b')).toEqual(0);
  });

  it('should parse k', () => {
    expect(parseAbbrValue('1k')).toEqual(1000);
    expect(parseAbbrValue('1.k')).toEqual(1000);
    expect(parseAbbrValue('2K')).toEqual(2000);
    expect(parseAbbrValue('1.1239999k')).toEqual(1123.9999);
    expect(parseAbbrValue('1.5k')).toEqual(1500);
    expect(parseAbbrValue('50.12K')).toEqual(50120);
    expect(parseAbbrValue('100K')).toEqual(100000);
  });

  it('should parse m', () => {
    expect(parseAbbrValue('1m')).toEqual(1000000);
    expect(parseAbbrValue('1.m')).toEqual(1000000);
    expect(parseAbbrValue('1.5m')).toEqual(1500000);
    expect(parseAbbrValue('45.123456m')).toEqual(45123456);
    expect(parseAbbrValue('83.5m')).toEqual(83500000);
    expect(parseAbbrValue('100M')).toEqual(100000000);
  });

  it('should parse b', () => {
    expect(parseAbbrValue('1b')).toEqual(1000000000);
    expect(parseAbbrValue('1.b')).toEqual(1000000000);
    expect(parseAbbrValue('1.5b')).toEqual(1500000000);
    expect(parseAbbrValue('65.5513b')).toEqual(65551300000);
    expect(parseAbbrValue('100B')).toEqual(100000000000);
  });

  it('should work with comma as decimal separator', () => {
    expect(parseAbbrValue('1,2k', ',')).toEqual(1200);
    expect(parseAbbrValue('2,3m', ',')).toEqual(2300000);
  });
});
