superset/superset-frontend/plugins/plugin-chart-echarts/test/Tree/transformProps.test.ts

426 lines
11 KiB
TypeScript
Raw Normal View History

/**
* 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, supersetTheme } from '@superset-ui/core';
import transformProps from '../../src/Tree/transformProps';
import { EchartsTreeChartProps } from '../../src/Tree/types';
chore(frontend-tests): Spelling (#19853) * spelling: against Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: been Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: charts Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: clicking Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: columns Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: duplicate Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: especially Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: extensions Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: fields Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: filter Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: for Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: label Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: labeled Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: nativefilter Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: registry Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: render Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: resizable Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: response Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: successful Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: transform Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unfortunately Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: until Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: virtual Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: wrapper Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
2022-04-26 13:35:01 -04:00
describe('EchartsTree transformProps', () => {
const formData = {
colorScheme: 'bnbColors',
datasource: '3__table',
granularity_sqla: 'ds',
metric: 'count',
id: 'id_column',
parent: 'relation_column',
name: 'name_column',
rootNodeId: '1',
};
const chartPropsConfig = {
formData,
width: 800,
height: 600,
theme: supersetTheme,
};
chore(frontend-tests): Spelling (#19853) * spelling: against Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: been Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: charts Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: clicking Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: columns Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: duplicate Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: especially Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: extensions Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: fields Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: filter Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: for Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: label Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: labeled Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: nativefilter Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: registry Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: render Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: resizable Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: response Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: successful Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: transform Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unfortunately Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: until Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: virtual Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: wrapper Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
2022-04-26 13:35:01 -04:00
it('should transform when parent present before child', () => {
const queriesData = [
{
colnames: ['id_column', 'relation_column', 'name_column', 'count'],
data: [
{
id_column: '1',
relation_column: null,
name_column: 'root',
count: 10,
},
{
id_column: '2',
relation_column: '1',
name_column: 'first_child',
count: 10,
},
{
id_column: '3',
relation_column: '2',
name_column: 'second_child',
count: 10,
},
{
id_column: '4',
relation_column: '3',
name_column: 'third_child',
count: 10,
},
],
},
];
const chartProps = new ChartProps({ ...chartPropsConfig, queriesData });
expect(transformProps(chartProps as EchartsTreeChartProps)).toEqual(
expect.objectContaining({
width: 800,
height: 600,
echartOptions: expect.objectContaining({
series: expect.arrayContaining([
expect.objectContaining({
data: [
{
name: 'root',
children: [
{
name: 'first_child',
value: 10,
children: [
{
name: 'second_child',
value: 10,
children: [
{ name: 'third_child', value: 10, children: [] },
],
},
],
},
],
},
],
}),
]),
}),
}),
);
});
chore(frontend-tests): Spelling (#19853) * spelling: against Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: been Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: charts Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: clicking Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: columns Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: duplicate Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: especially Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: extensions Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: fields Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: filter Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: for Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: label Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: labeled Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: nativefilter Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: registry Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: render Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: resizable Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: response Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: successful Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: transform Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: unfortunately Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: until Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: virtual Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> * spelling: wrapper Signed-off-by: Josh Soref <jsoref@users.noreply.github.com> Co-authored-by: Josh Soref <jsoref@users.noreply.github.com>
2022-04-26 13:35:01 -04:00
it('should transform when child is present before parent', () => {
const queriesData = [
{
colnames: ['id_column', 'relation_column', 'name_column', 'count'],
data: [
{
id_column: '1',
relation_column: null,
name_column: 'root',
count: 10,
},
{
id_column: '2',
relation_column: '4',
name_column: 'second_child',
count: 20,
},
{
id_column: '3',
relation_column: '4',
name_column: 'second_child',
count: 30,
},
{
id_column: '4',
relation_column: '1',
name_column: 'first_child',
count: 40,
},
],
},
];
const chartProps = new ChartProps({ ...chartPropsConfig, queriesData });
expect(transformProps(chartProps as EchartsTreeChartProps)).toEqual(
expect.objectContaining({
width: 800,
height: 600,
echartOptions: expect.objectContaining({
series: expect.arrayContaining([
expect.objectContaining({
data: [
{
name: 'root',
children: [
{
name: 'first_child',
value: 40,
children: [
{
name: 'second_child',
value: 20,
children: [],
},
{
name: 'second_child',
value: 30,
children: [],
},
],
},
],
},
],
}),
]),
}),
}),
);
});
it('ignore node if not attached to root', () => {
const formData = {
colorScheme: 'bnbColors',
datasource: '3__table',
granularity_sqla: 'ds',
metric: 'count',
id: 'id_column',
parent: 'relation_column',
name: 'name_column',
rootNodeId: '2',
};
const chartPropsConfig = {
formData,
width: 800,
height: 600,
theme: supersetTheme,
};
const queriesData = [
{
colnames: ['id_column', 'relation_column', 'name_column', 'count'],
data: [
{
id_column: '1',
relation_column: null,
name_column: 'root',
count: 10,
},
{
id_column: '2',
relation_column: '1',
name_column: 'first_child',
count: 10,
},
{
id_column: '3',
relation_column: '2',
name_column: 'second_child',
count: 10,
},
{
id_column: '4',
relation_column: '3',
name_column: 'third_child',
count: 20,
},
],
},
];
const chartProps = new ChartProps({ ...chartPropsConfig, queriesData });
expect(transformProps(chartProps as EchartsTreeChartProps)).toEqual(
expect.objectContaining({
width: 800,
height: 600,
echartOptions: expect.objectContaining({
series: expect.arrayContaining([
expect.objectContaining({
data: [
{
name: 'first_child',
children: [
{
name: 'second_child',
value: 10,
children: [
{
name: 'third_child',
value: 20,
children: [],
},
],
},
],
},
],
}),
]),
}),
}),
);
});
it('should transform props if name column is not specified', () => {
const formData = {
colorScheme: 'bnbColors',
datasource: '3__table',
granularity_sqla: 'ds',
metric: 'count',
id: 'id_column',
parent: 'relation_column',
rootNodeId: '1',
};
const chartPropsConfig = {
formData,
width: 800,
height: 600,
theme: supersetTheme,
};
const queriesData = [
{
colnames: ['id_column', 'relation_column', 'count'],
data: [
{
id_column: '1',
relation_column: null,
count: 10,
},
{
id_column: '2',
relation_column: '1',
count: 10,
},
{
id_column: '3',
relation_column: '2',
count: 10,
},
{
id_column: '4',
relation_column: '3',
count: 20,
},
],
},
];
const chartProps = new ChartProps({ ...chartPropsConfig, queriesData });
expect(transformProps(chartProps as EchartsTreeChartProps)).toEqual(
expect.objectContaining({
width: 800,
height: 600,
echartOptions: expect.objectContaining({
series: expect.arrayContaining([
expect.objectContaining({
data: [
{
name: '1',
children: [
{
name: '2',
value: 10,
children: [
{
name: '3',
value: 10,
children: [
{
name: '4',
value: 20,
children: [],
},
],
},
],
},
],
},
],
}),
]),
}),
}),
);
});
it('should find root node with null parent when root node name is not provided', () => {
const formData = {
colorScheme: 'bnbColors',
datasource: '3__table',
granularity_sqla: 'ds',
metric: 'count',
id: 'id_column',
parent: 'relation_column',
name: 'name_column',
};
const chartPropsConfig = {
formData,
width: 800,
height: 600,
theme: supersetTheme,
};
const queriesData = [
{
colnames: ['id_column', 'relation_column', 'name_column', 'count'],
data: [
{
id_column: '2',
relation_column: '4',
name_column: 'second_child',
count: 20,
},
{
id_column: '3',
relation_column: '4',
name_column: 'second_child',
count: 30,
},
{
id_column: '4',
relation_column: '1',
name_column: 'first_child',
count: 40,
},
{
id_column: '1',
relation_column: null,
name_column: 'root',
count: 10,
},
],
},
];
const chartProps = new ChartProps({ ...chartPropsConfig, queriesData });
expect(transformProps(chartProps as EchartsTreeChartProps)).toEqual(
expect.objectContaining({
width: 800,
height: 600,
echartOptions: expect.objectContaining({
series: expect.arrayContaining([
expect.objectContaining({
data: [
{
name: 'root',
children: [
{
name: 'first_child',
value: 40,
children: [
{
name: 'second_child',
value: 20,
children: [],
},
{
name: 'second_child',
value: 30,
children: [],
},
],
},
],
},
],
}),
]),
}),
}),
);
});
});