mirror of
https://github.com/apache/superset.git
synced 2024-09-19 12:09:42 -04:00
a80453d945
* fix: dashboard filter scope bug * add extra comments per review
386 lines
9.9 KiB
JavaScript
386 lines
9.9 KiB
JavaScript
/**
|
|
* 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 getFilterScopeFromNodesTree from 'src/dashboard/util/getFilterScopeFromNodesTree';
|
|
|
|
describe('getFilterScopeFromNodesTree', () => {
|
|
it('should return empty scope', () => {
|
|
const nodes = [];
|
|
expect(
|
|
getFilterScopeFromNodesTree({
|
|
filterKey: '107_region',
|
|
nodes,
|
|
checkedChartIds: [],
|
|
}),
|
|
).toEqual({});
|
|
});
|
|
|
|
it('should return scope for simple grid', () => {
|
|
const nodes = [
|
|
{
|
|
label: 'All dashboard',
|
|
type: 'ROOT',
|
|
value: 'ROOT_ID',
|
|
children: [
|
|
{
|
|
value: 104,
|
|
label: 'Life Expectancy VS Rural %',
|
|
type: 'CHART',
|
|
},
|
|
{ value: 105, label: 'Rural Breakdown', type: 'CHART' },
|
|
{
|
|
value: 106,
|
|
label: "World's Pop Growth",
|
|
type: 'CHART',
|
|
},
|
|
{
|
|
label: 'Time Filter',
|
|
showCheckbox: false,
|
|
type: 'CHART',
|
|
value: 108,
|
|
},
|
|
],
|
|
},
|
|
];
|
|
const checkedChartIds = [104, 106];
|
|
expect(
|
|
getFilterScopeFromNodesTree({
|
|
filterKey: '108___time_range',
|
|
nodes,
|
|
checkedChartIds,
|
|
}),
|
|
).toEqual({
|
|
scope: ['ROOT_ID'],
|
|
immune: [105],
|
|
});
|
|
});
|
|
|
|
describe('should return scope for tabbed dashboard', () => {
|
|
// this is a commonly used layout for dashboard:
|
|
// - Tab 1
|
|
// - filter_107
|
|
// - chart_106
|
|
// - Tab 2
|
|
// - filter_108
|
|
// - chart_104
|
|
// - Row Tab
|
|
// - chart_105
|
|
// - chart_103
|
|
// - New Tab
|
|
// - chart_101
|
|
// - chart_102
|
|
const nodes = [
|
|
{
|
|
label: 'All dashboard',
|
|
type: 'ROOT',
|
|
value: 'ROOT_ID',
|
|
children: [
|
|
{
|
|
label: 'Tab 1',
|
|
type: 'TAB',
|
|
value: 'TAB-Rb5aaqKWgG',
|
|
children: [
|
|
{
|
|
label: 'Geo Filters',
|
|
showCheckbox: false,
|
|
type: 'CHART',
|
|
value: 107,
|
|
},
|
|
{
|
|
label: "World's Pop Growth",
|
|
showCheckbox: true,
|
|
type: 'CHART',
|
|
value: 106,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Tab 2',
|
|
type: 'TAB',
|
|
value: 'TAB-w5Fp904Rs',
|
|
children: [
|
|
{
|
|
label: 'Time Filter',
|
|
showCheckbox: true,
|
|
type: 'CHART',
|
|
value: 108,
|
|
},
|
|
{
|
|
label: 'Life Expectancy VS Rural %',
|
|
showCheckbox: true,
|
|
type: 'CHART',
|
|
value: 104,
|
|
},
|
|
{
|
|
label: 'Row Tab 1',
|
|
type: 'TAB',
|
|
value: 'TAB-E4mJaZ-uQM',
|
|
children: [
|
|
{
|
|
value: 105,
|
|
label: 'Rural Breakdown',
|
|
type: 'CHART',
|
|
showCheckbox: true,
|
|
},
|
|
{
|
|
value: 103,
|
|
label: '% Rural',
|
|
type: 'CHART',
|
|
showCheckbox: true,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
value: 'TAB-rLYu-Cryu',
|
|
label: 'New Tab',
|
|
type: 'TAB',
|
|
children: [
|
|
{
|
|
value: 102,
|
|
label: 'Most Populated Countries',
|
|
type: 'CHART',
|
|
showCheckbox: true,
|
|
},
|
|
{
|
|
value: 101,
|
|
label: "World's Population",
|
|
type: 'CHART',
|
|
showCheckbox: true,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
// this is another commonly used layout for dashboard:
|
|
// - filter_109
|
|
// - Tab 1
|
|
// - Row Tab 1
|
|
// - filter_107
|
|
// - chart_106
|
|
// - Tab 2
|
|
// - filter_108
|
|
// - chart_104
|
|
// - Row Tab
|
|
// - chart_105
|
|
// - chart_103
|
|
// - New Tab
|
|
// - chart_101
|
|
// - chart_102
|
|
const nodes2 = [
|
|
{
|
|
label: 'All dashboard',
|
|
type: 'ROOT',
|
|
value: 'ROOT_ID',
|
|
children: [
|
|
{
|
|
label: 'Time Filter',
|
|
showCheckbox: true,
|
|
type: 'CHART',
|
|
value: 109,
|
|
},
|
|
{
|
|
label: 'Tab 1',
|
|
type: 'TAB',
|
|
value: 'TAB-Rb5aaqKWgG',
|
|
children: [
|
|
{
|
|
label: 'Row Tab 1',
|
|
type: 'TAB',
|
|
value: 'TAB-row-tab1',
|
|
children: [
|
|
{
|
|
label: 'Geo Filters',
|
|
showCheckbox: false,
|
|
type: 'CHART',
|
|
value: 107,
|
|
},
|
|
{
|
|
label: "World's Pop Growth",
|
|
showCheckbox: true,
|
|
type: 'CHART',
|
|
value: 106,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
{
|
|
label: 'Tab 2',
|
|
type: 'TAB',
|
|
value: 'TAB-w5Fp904Rs',
|
|
children: [
|
|
{
|
|
label: 'Time Filter',
|
|
showCheckbox: true,
|
|
type: 'CHART',
|
|
value: 108,
|
|
},
|
|
{
|
|
label: 'Life Expectancy VS Rural %',
|
|
showCheckbox: true,
|
|
type: 'CHART',
|
|
value: 104,
|
|
},
|
|
{
|
|
label: 'Row Tab 1',
|
|
type: 'TAB',
|
|
value: 'TAB-E4mJaZ-uQM',
|
|
children: [
|
|
{
|
|
value: 105,
|
|
label: 'Rural Breakdown',
|
|
type: 'CHART',
|
|
showCheckbox: true,
|
|
},
|
|
{
|
|
value: 103,
|
|
label: '% Rural',
|
|
type: 'CHART',
|
|
showCheckbox: true,
|
|
},
|
|
],
|
|
},
|
|
{
|
|
value: 'TAB-rLYu-Cryu',
|
|
label: 'New Tab',
|
|
type: 'TAB',
|
|
children: [
|
|
{
|
|
value: 102,
|
|
label: 'Most Populated Countries',
|
|
type: 'CHART',
|
|
showCheckbox: true,
|
|
},
|
|
{
|
|
value: 101,
|
|
label: "World's Population",
|
|
type: 'CHART',
|
|
showCheckbox: true,
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
],
|
|
},
|
|
];
|
|
|
|
it('root level tab scope', () => {
|
|
const checkedChartIds = [106];
|
|
expect(
|
|
getFilterScopeFromNodesTree({
|
|
filterKey: '107_region',
|
|
nodes,
|
|
checkedChartIds,
|
|
}),
|
|
).toEqual({
|
|
scope: ['TAB-Rb5aaqKWgG'],
|
|
immune: [],
|
|
});
|
|
});
|
|
|
|
it('global scope', () => {
|
|
const checkedChartIds = [106, 104, 101, 102, 103, 105];
|
|
expect(
|
|
getFilterScopeFromNodesTree({
|
|
filterKey: '107_country_name',
|
|
nodes,
|
|
checkedChartIds,
|
|
}),
|
|
).toEqual({
|
|
scope: ['ROOT_ID'],
|
|
immune: [108],
|
|
});
|
|
});
|
|
|
|
it('row level tab scope', () => {
|
|
const checkedChartIds = [103, 105];
|
|
expect(
|
|
getFilterScopeFromNodesTree({
|
|
filterKey: '108___time_range',
|
|
nodes,
|
|
checkedChartIds,
|
|
}),
|
|
).toEqual({
|
|
scope: ['TAB-E4mJaZ-uQM'],
|
|
immune: [],
|
|
});
|
|
});
|
|
|
|
it('mixed row level and root level scope', () => {
|
|
const checkedChartIds = [103, 105, 106];
|
|
expect(
|
|
getFilterScopeFromNodesTree({
|
|
filterKey: '107_region',
|
|
nodes,
|
|
checkedChartIds,
|
|
}),
|
|
).toEqual({
|
|
scope: ['TAB-Rb5aaqKWgG', 'TAB-E4mJaZ-uQM'],
|
|
immune: [],
|
|
});
|
|
});
|
|
|
|
it('mixed row level tab and chart scope', () => {
|
|
const checkedChartIds = [103, 105, 102];
|
|
expect(
|
|
getFilterScopeFromNodesTree({
|
|
filterKey: '107_region',
|
|
nodes,
|
|
checkedChartIds,
|
|
}),
|
|
).toEqual({
|
|
scope: ['TAB-E4mJaZ-uQM', 'TAB-rLYu-Cryu'],
|
|
immune: [101],
|
|
});
|
|
});
|
|
|
|
it('exclude sub-tab', () => {
|
|
const checkedChartIds = [103, 104, 105];
|
|
expect(
|
|
getFilterScopeFromNodesTree({
|
|
filterKey: '108___time_range',
|
|
nodes,
|
|
checkedChartIds,
|
|
}),
|
|
).toEqual({
|
|
scope: ['TAB-w5Fp904Rs'],
|
|
immune: [102, 101],
|
|
});
|
|
});
|
|
|
|
it('exclude top-tab', () => {
|
|
const checkedChartIds = [106, 109];
|
|
expect(
|
|
getFilterScopeFromNodesTree({
|
|
filterKey: '107_region',
|
|
nodes: nodes2,
|
|
checkedChartIds,
|
|
}),
|
|
).toEqual({
|
|
scope: ['ROOT_ID'],
|
|
immune: [105, 103, 102, 101, 108, 104],
|
|
});
|
|
});
|
|
});
|
|
});
|