superset/superset-frontend/plugins/plugin-chart-echarts/test/Gauge/transformProps.test.ts
2022-05-04 09:55:22 -03:00

345 lines
9.0 KiB
TypeScript

/**
* 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 { ChartProps, SqlaFormData, supersetTheme } from '@superset-ui/core';
import transformProps from '../../src/Gauge/transformProps';
import { EchartsGaugeChartProps } from '../../src/Gauge/types';
describe('Echarts Gauge transformProps', () => {
const baseFormData: SqlaFormData = {
datasource: '26__table',
viz_type: 'gauge_chart',
metric: 'count',
adhocFilters: [],
rowLimit: 10,
minVal: 0,
maxVal: 100,
startAngle: 225,
endAngle: -45,
colorScheme: 'SUPERSET_DEFAULT',
fontSize: 14,
numberFormat: 'SMART_NUMBER',
valueFormatter: '{value}',
showPointer: true,
animation: true,
showAxisTick: false,
showSplitLine: false,
splitNumber: 10,
showProgress: true,
overlap: true,
roundCap: false,
};
it('should transform chart props for no group by column', () => {
const formData: SqlaFormData = { ...baseFormData, groupby: [] };
const queriesData = [
{
colnames: ['count'],
data: [
{
count: 16595,
},
],
},
];
const chartPropsConfig = {
formData,
width: 800,
height: 600,
queriesData,
theme: supersetTheme,
};
const chartProps = new ChartProps(chartPropsConfig);
expect(transformProps(chartProps as EchartsGaugeChartProps)).toEqual(
expect.objectContaining({
width: 800,
height: 600,
echartOptions: expect.objectContaining({
series: expect.arrayContaining([
expect.objectContaining({
data: [
{
value: 16595,
name: '',
itemStyle: {
color: '#1f77b4',
},
title: {
offsetCenter: ['0%', '20%'],
fontSize: 14,
},
detail: {
offsetCenter: ['0%', '32.6%'],
fontSize: 16.8,
},
},
],
}),
]),
}),
}),
);
});
it('should transform chart props for single group by column', () => {
const formData: SqlaFormData = {
...baseFormData,
groupby: ['year'],
};
const queriesData = [
{
colnames: ['year', 'count'],
data: [
{
year: 1988,
count: 15,
},
{
year: 1995,
count: 219,
},
],
},
];
const chartPropsConfig = {
formData,
width: 800,
height: 600,
queriesData,
theme: supersetTheme,
};
const chartProps = new ChartProps(chartPropsConfig);
expect(transformProps(chartProps as EchartsGaugeChartProps)).toEqual(
expect.objectContaining({
width: 800,
height: 600,
echartOptions: expect.objectContaining({
series: expect.arrayContaining([
expect.objectContaining({
data: [
{
value: 15,
name: 'year: 1988',
itemStyle: {
color: '#1f77b4',
},
title: {
offsetCenter: ['0%', '20%'],
fontSize: 14,
},
detail: {
offsetCenter: ['0%', '32.6%'],
fontSize: 16.8,
},
},
{
value: 219,
name: 'year: 1995',
itemStyle: {
color: '#ff7f0e',
},
title: {
offsetCenter: ['0%', '48%'],
fontSize: 14,
},
detail: {
offsetCenter: ['0%', '60.6%'],
fontSize: 16.8,
},
},
],
}),
]),
}),
}),
);
});
it('should transform chart props for multiple group by columns', () => {
const formData: SqlaFormData = {
...baseFormData,
groupby: ['year', 'platform'],
};
const queriesData = [
{
colnames: ['year', 'platform', 'count'],
data: [
{
year: 2011,
platform: 'PC',
count: 140,
},
{
year: 2008,
platform: 'PC',
count: 76,
},
],
},
];
const chartPropsConfig = {
formData,
width: 800,
height: 600,
queriesData,
theme: supersetTheme,
};
const chartProps = new ChartProps(chartPropsConfig);
expect(transformProps(chartProps as EchartsGaugeChartProps)).toEqual(
expect.objectContaining({
width: 800,
height: 600,
echartOptions: expect.objectContaining({
series: expect.arrayContaining([
expect.objectContaining({
data: [
{
value: 140,
name: 'year: 2011, platform: PC',
itemStyle: {
color: '#1f77b4',
},
title: {
offsetCenter: ['0%', '20%'],
fontSize: 14,
},
detail: {
offsetCenter: ['0%', '32.6%'],
fontSize: 16.8,
},
},
{
value: 76,
name: 'year: 2008, platform: PC',
itemStyle: {
color: '#ff7f0e',
},
title: {
offsetCenter: ['0%', '48%'],
fontSize: 14,
},
detail: {
offsetCenter: ['0%', '60.6%'],
fontSize: 16.8,
},
},
],
}),
]),
}),
}),
);
});
it('should transform chart props for intervals', () => {
const formData: SqlaFormData = {
...baseFormData,
groupby: ['year', 'platform'],
intervals: '50,100',
intervalColorIndices: '1,2',
};
const queriesData = [
{
colnames: ['year', 'platform', 'count'],
data: [
{
year: 2011,
platform: 'PC',
count: 140,
},
{
year: 2008,
platform: 'PC',
count: 76,
},
],
},
];
const chartPropsConfig = {
formData,
width: 800,
height: 600,
queriesData,
theme: supersetTheme,
};
const chartProps = new ChartProps(chartPropsConfig);
expect(transformProps(chartProps as EchartsGaugeChartProps)).toEqual(
expect.objectContaining({
width: 800,
height: 600,
echartOptions: expect.objectContaining({
series: expect.arrayContaining([
expect.objectContaining({
axisLine: {
lineStyle: {
width: 14,
color: [
[0.5, '#1f77b4'],
[1, '#ff7f0e'],
],
},
roundCap: false,
},
data: [
{
value: 140,
name: 'year: 2011, platform: PC',
itemStyle: {
color: '#1f77b4',
},
title: {
offsetCenter: ['0%', '20%'],
fontSize: 14,
},
detail: {
offsetCenter: ['0%', '32.6%'],
fontSize: 16.8,
},
},
{
value: 76,
name: 'year: 2008, platform: PC',
itemStyle: {
color: '#ff7f0e',
},
title: {
offsetCenter: ['0%', '48%'],
fontSize: 14,
},
detail: {
offsetCenter: ['0%', '60.6%'],
fontSize: 16.8,
},
},
],
}),
]),
}),
}),
);
});
});