| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134 |
- /*
- * 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 { TimeGranularity } from '@superset-ui/core';
- import buildQuery from '../../src/plugin/buildQuery';
- import { PivotTableQueryFormData } from '../../src/types';
- const formData: PivotTableQueryFormData = {
- groupbyRows: ['row1', 'row2'],
- groupbyColumns: ['col1', 'col2'],
- metrics: ['metric1', 'metric2'],
- tableRenderer: 'Table With Subtotal',
- colOrder: 'key_a_to_z',
- rowOrder: 'key_a_to_z',
- aggregateFunction: 'Sum',
- transposePivot: true,
- rowSubtotalPosition: true,
- colSubtotalPosition: true,
- colTotals: true,
- colSubTotals: true,
- rowTotals: true,
- rowSubTotals: true,
- valueFormat: 'SMART_NUMBER',
- datasource: '5__table',
- viz_type: 'my_chart',
- width: 800,
- height: 600,
- combineMetric: false,
- verboseMap: {},
- columnFormats: {},
- currencyFormats: {},
- metricColorFormatters: [],
- dateFormatters: {},
- setDataMask: () => {},
- legacy_order_by: 'count',
- order_desc: true,
- margin: 0,
- time_grain_sqla: TimeGranularity.MONTH,
- temporal_columns_lookup: { col1: true },
- currencyFormat: { symbol: 'USD', symbolPosition: 'prefix' },
- };
- test('should build groupby with series in form data', () => {
- const queryContext = buildQuery(formData);
- const [query] = queryContext.queries;
- expect(query.columns).toEqual([
- {
- columnType: 'BASE_AXIS',
- expressionType: 'SQL',
- label: 'col1',
- sqlExpression: 'col1',
- timeGrain: 'P1M',
- },
- 'col2',
- 'row1',
- 'row2',
- ]);
- });
- test('should work with old charts', () => {
- const modifiedFormData = {
- ...formData,
- time_grain_sqla: TimeGranularity.MONTH,
- granularity_sqla: 'col1',
- };
- const queryContext = buildQuery(modifiedFormData);
- const [query] = queryContext.queries;
- expect(query.columns).toEqual([
- {
- timeGrain: 'P1M',
- columnType: 'BASE_AXIS',
- sqlExpression: 'col1',
- label: 'col1',
- expressionType: 'SQL',
- },
- 'col2',
- 'row1',
- 'row2',
- ]);
- });
- test('should prefer extra_form_data.time_grain_sqla over formData.time_grain_sqla', () => {
- const modifiedFormData = {
- ...formData,
- extra_form_data: { time_grain_sqla: TimeGranularity.QUARTER },
- };
- const queryContext = buildQuery(modifiedFormData);
- const [query] = queryContext.queries;
- expect(query.columns?.[0]).toEqual({
- timeGrain: TimeGranularity.QUARTER,
- columnType: 'BASE_AXIS',
- sqlExpression: 'col1',
- label: 'col1',
- expressionType: 'SQL',
- });
- });
- test('should fallback to formData.time_grain_sqla if extra_form_data.time_grain_sqla is not set', () => {
- const queryContext = buildQuery(formData);
- const [query] = queryContext.queries;
- expect(query.columns?.[0]).toEqual({
- timeGrain: formData.time_grain_sqla,
- columnType: 'BASE_AXIS',
- sqlExpression: 'col1',
- label: 'col1',
- expressionType: 'SQL',
- });
- });
- test('should not omit extras.time_grain_sqla from queryContext so dashboards apply them', () => {
- const modifiedFormData = {
- ...formData,
- extra_form_data: { time_grain_sqla: TimeGranularity.QUARTER },
- };
- const queryContext = buildQuery(modifiedFormData);
- const [query] = queryContext.queries;
- expect(query.extras?.time_grain_sqla).toEqual(TimeGranularity.QUARTER);
- });
|