| /** |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| import { |
| computeStackedYDomain, |
| computeYDomain, |
| getTimeOrNumberFormatter, |
| formatLabel, |
| tryNumify, |
| } from '../src/utils'; |
| |
| const DATA = [ |
| { |
| key: ['East Asia & Pacific'], |
| values: [ |
| { |
| x: -315619200000.0, |
| y: 1031863394.0, |
| }, |
| { |
| x: -283996800000.0, |
| y: 1034767718.0, |
| }, |
| ], |
| }, |
| { |
| key: ['South Asia'], |
| values: [ |
| { |
| x: -315619200000.0, |
| y: 572036107.0, |
| }, |
| { |
| x: -283996800000.0, |
| y: 584143236.0, |
| }, |
| ], |
| }, |
| { |
| key: ['Europe & Central Asia'], |
| values: [ |
| { |
| x: -315619200000.0, |
| y: 660881033.0, |
| }, |
| { |
| x: -283996800000.0, |
| y: 668526708.0, |
| }, |
| ], |
| }, |
| ]; |
| |
| const DATA_WITH_DISABLED_SERIES = [ |
| { |
| disabled: true, |
| key: ['East Asia & Pacific'], |
| values: [ |
| { |
| x: -315619200000.0, |
| y: 1031863394.0, |
| }, |
| { |
| x: -283996800000.0, |
| y: 1034767718.0, |
| }, |
| ], |
| }, |
| { |
| disabled: true, |
| key: ['South Asia'], |
| values: [ |
| { |
| x: -315619200000.0, |
| y: 572036107.0, |
| }, |
| { |
| x: -283996800000.0, |
| y: 584143236.0, |
| }, |
| ], |
| }, |
| { |
| key: ['Europe & Central Asia'], |
| values: [ |
| { |
| x: -315619200000.0, |
| y: 660881033.0, |
| }, |
| { |
| x: -283996800000.0, |
| y: 668526708.0, |
| }, |
| ], |
| }, |
| ]; |
| |
| describe('nvd3/utils', () => { |
| describe('getTimeOrNumberFormatter(format)', () => { |
| it('is a function', () => { |
| expect(typeof getTimeOrNumberFormatter).toBe('function'); |
| }); |
| it('returns a date formatter if format is smart_date', () => { |
| const time = new Date(Date.UTC(2018, 10, 21, 22, 11)); |
| expect(getTimeOrNumberFormatter('smart_date')(time)).toBe('10:11'); |
| }); |
| it('returns a number formatter otherwise', () => { |
| expect(getTimeOrNumberFormatter('.3s')(3000000)).toBe('3.00M'); |
| expect(getTimeOrNumberFormatter()(3000100)).toBe('3M'); |
| }); |
| }); |
| |
| describe('formatLabel()', () => { |
| const verboseMap = { |
| foo: 'Foo', |
| bar: 'Bar', |
| }; |
| |
| it('formats simple labels', () => { |
| expect(formatLabel('foo')).toBe('foo'); |
| expect(formatLabel(['foo'])).toBe('foo'); |
| expect(formatLabel(['foo', 'bar'])).toBe('foo, bar'); |
| }); |
| it('formats simple labels with lookups', () => { |
| expect(formatLabel('foo', verboseMap)).toBe('Foo'); |
| expect(formatLabel('baz', verboseMap)).toBe('baz'); |
| expect(formatLabel(['foo'], verboseMap)).toBe('Foo'); |
| expect(formatLabel(['foo', 'bar', 'baz'], verboseMap)).toBe('Foo, Bar, baz'); |
| }); |
| it('deals with time shift properly', () => { |
| expect(formatLabel(['foo', '1 hour offset'], verboseMap)).toBe('Foo, 1 hour offset'); |
| expect(formatLabel(['foo', 'bar', 'baz', '2 hours offset'], verboseMap)).toBe( |
| 'Foo, Bar, baz, 2 hours offset', |
| ); |
| }); |
| }); |
| |
| describe('tryNumify()', () => { |
| it('tryNumify works as expected', () => { |
| expect(tryNumify(5)).toBe(5); |
| expect(tryNumify('5')).toBe(5); |
| expect(tryNumify('5.1')).toBe(5.1); |
| expect(tryNumify('a string')).toBe('a string'); |
| }); |
| }); |
| |
| describe('computeYDomain()', () => { |
| it('works with invalid data', () => { |
| expect(computeYDomain('foo')).toEqual([0, 1]); |
| }); |
| |
| it('works with all series enabled', () => { |
| expect(computeYDomain(DATA)).toEqual([572036107.0, 1034767718.0]); |
| }); |
| |
| it('works with some series disabled', () => { |
| expect(computeYDomain(DATA_WITH_DISABLED_SERIES)).toEqual([660881033.0, 668526708.0]); |
| }); |
| }); |
| |
| describe('computeStackedYDomain()', () => { |
| it('works with invalid data', () => { |
| expect(computeStackedYDomain('foo')).toEqual([0, 1]); |
| }); |
| |
| it('works with all series enabled', () => { |
| expect(computeStackedYDomain(DATA)).toEqual([0, 2287437662.0]); |
| }); |
| |
| it('works with some series disabled', () => { |
| expect(computeStackedYDomain(DATA_WITH_DISABLED_SERIES)).toEqual([0, 668526708.0]); |
| }); |
| }); |
| }); |