Files
redash/client/app/visualizations/chart/plotly/prepareData.test.js
Levko Kravets 2c98f0425d Allow the user to decide how to handle null values in charts (#4071)
* getredash/redash#2629 Refactor Chart visualization, add option for handling NULL values (keep/convert to 0.0)

* Handle null values in line/area stacking code; some cleanup

* Handle edge case: line/area stacking when last value of one of series is missing

* Mjnor update to line/area stacking code

* Fix line/area normalize to percents feature

* Unit tests

* Refine tests; add tests for prepareLayout function

* Tests for prepareData (heatmap) function

* Tests for prepareData (pie) function

* Tests for prepareData (bar, line, area) function

* Tests for prepareData (scatter, bubble) function

* Tests for prepareData (box) function

* Remove unused file
2019-09-09 13:00:26 +03:00

161 lines
6.5 KiB
JavaScript

/* eslint-disable global-require, import/no-unresolved */
import prepareData from './prepareData';
function cleanSeries(series) {
return series.map(({ sourceData, ...rest }) => rest);
}
describe('Visualizations', () => {
describe('Chart', () => {
describe('prepareData', () => {
describe('heatmap', () => {
test('default', () => {
const { input, output } = require('./fixtures/prepareData/heatmap/default');
const series = prepareData(input.data, input.options);
expect(series).toEqual(output.series);
});
test('sorted', () => {
const { input, output } = require('./fixtures/prepareData/heatmap/sorted');
const series = prepareData(input.data, input.options);
expect(series).toEqual(output.series);
});
test('reversed', () => {
const { input, output } = require('./fixtures/prepareData/heatmap/reversed');
const series = prepareData(input.data, input.options);
expect(series).toEqual(output.series);
});
test('sorted & reversed', () => {
const { input, output } = require('./fixtures/prepareData/heatmap/sorted');
const series = prepareData(input.data, input.options);
expect(series).toEqual(output.series);
});
test('with labels', () => {
const { input, output } = require('./fixtures/prepareData/heatmap/with-labels');
const series = prepareData(input.data, input.options);
expect(series).toEqual(output.series);
});
});
describe('pie', () => {
test('default', () => {
const { input, output } = require('./fixtures/prepareData/pie/default');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
test('without X mapped', () => {
const { input, output } = require('./fixtures/prepareData/pie/without-x');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
test('without labels', () => {
const { input, output } = require('./fixtures/prepareData/pie/without-labels');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
test('custom tooltip', () => {
const { input, output } = require('./fixtures/prepareData/pie/custom-tooltip');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
});
describe('bar (column)', () => {
test('default', () => {
const { input, output } = require('./fixtures/prepareData/bar/default');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
test('stacked', () => {
const { input, output } = require('./fixtures/prepareData/bar/stacked');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
test('normalized values', () => {
const { input, output } = require('./fixtures/prepareData/bar/normalized');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
});
describe('lines & area', () => {
test('default', () => {
const { input, output } = require('./fixtures/prepareData/line-area/default');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
test('stacked', () => {
const { input, output } = require('./fixtures/prepareData/line-area/stacked');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
test('normalized values', () => {
const { input, output } = require('./fixtures/prepareData/line-area/normalized');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
test('stacked & normalized values', () => {
const { input, output } = require('./fixtures/prepareData/line-area/normalized-stacked');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
test('keep missing values', () => {
const { input, output } = require('./fixtures/prepareData/line-area/keep-missing-values');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
test('convert missing values to 0', () => {
const { input, output } = require('./fixtures/prepareData/line-area/missing-values-0');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
});
describe('scatter', () => {
test('default', () => {
const { input, output } = require('./fixtures/prepareData/scatter/default');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
test('without labels', () => {
const { input, output } = require('./fixtures/prepareData/scatter/without-labels');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
});
describe('bubble', () => {
test('default', () => {
const { input, output } = require('./fixtures/prepareData/bubble/default');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
});
describe('box', () => {
test('default', () => {
const { input, output } = require('./fixtures/prepareData/box/default');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
test('with points', () => {
const { input, output } = require('./fixtures/prepareData/box/with-points');
const series = cleanSeries(prepareData(input.data, input.options));
expect(series).toEqual(output.series);
});
});
});
});
});