| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249 |
- /**
- * 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 {
- groupByLocation,
- getChartConfigs,
- parseSelectedChart,
- getGeojsonColumns,
- createColumnName,
- groupByLocationGenericX,
- stripGeomFromColnamesAndTypes,
- stripGeomColumnFromLabelMap,
- } from '../../src/util/transformPropsUtil';
- import {
- nonTimeSeriesChartData,
- groupedTimeseriesChartData,
- geom1,
- geom2,
- groupedTimeseriesLabelMap,
- } from '../testData';
- describe('transformPropsUtil', () => {
- const groupedTimeseriesParams = {
- x_axis: 'mydate',
- };
- const groupedTimeseriesQueryData = {
- label_map: groupedTimeseriesLabelMap,
- };
- describe('getGeojsonColumns', () => {
- it('gets the GeoJSON columns', () => {
- const columns = ['foo', 'bar', geom1];
- const result = getGeojsonColumns(columns);
- expect(result).toHaveLength(1);
- expect(result[0]).toEqual(2);
- });
- it('gets multiple GeoJSON columns', () => {
- const columns = ['foo', geom2, 'bar', geom1];
- const result = getGeojsonColumns(columns);
- expect(result).toHaveLength(2);
- expect(result[0]).toEqual(1);
- expect(result[1]).toEqual(3);
- });
- it('returns empty array when no GeoJSON is included', () => {
- const columns = ['foo', 'bar'];
- const result = getGeojsonColumns(columns);
- expect(result).toHaveLength(0);
- });
- });
- describe('createColumnName', () => {
- it('creates a columns name', () => {
- const columns = ['foo', 'bar'];
- const result = createColumnName(columns, []);
- expect(result).toEqual('foo, bar');
- });
- it('ignores items provided by ignoreIdx', () => {
- const columns = ['foo', 'bar', 'baz'];
- const ignoreIdx = [1];
- const result = createColumnName(columns, ignoreIdx);
- expect(result).toEqual('foo, baz');
- });
- });
- describe('groupByLocationGenericX', () => {
- it('groups in the correct count of geometries', () => {
- const result = groupByLocationGenericX(
- groupedTimeseriesChartData,
- groupedTimeseriesParams,
- groupedTimeseriesQueryData,
- );
- const countOfGeometries = Object.keys(result).length;
- expect(countOfGeometries).toEqual(2);
- });
- it('groups items by same geometry', () => {
- const result = groupByLocationGenericX(
- groupedTimeseriesChartData,
- groupedTimeseriesParams,
- groupedTimeseriesQueryData,
- );
- const allGeom1 = result[geom1].length === 2;
- const allGeom2 = result[geom2].length === 2;
- expect(allGeom1 && allGeom2).toBe(true);
- });
- });
- describe('groupByLocation', () => {
- it('groups in the correct count of geometries', () => {
- const geometryColumn = 'geom';
- const result = groupByLocation(nonTimeSeriesChartData, geometryColumn);
- const countOfGeometries = Object.keys(result).length;
- expect(countOfGeometries).toEqual(2);
- });
- it('groups items by same geometry', () => {
- const geometryColumn = 'geom';
- const result = groupByLocation(nonTimeSeriesChartData, geometryColumn);
- const allGeom1 = result[geom1].length === 6;
- const allGeom2 = result[geom2].length === 4;
- expect(allGeom1 && allGeom2).toBe(true);
- });
- });
- describe('stripGeomFromColnamesAndTypes', () => {
- it('strips the geom from colnames with geom column', () => {
- const queryData = {
- colnames: ['foo', 'geom'],
- coltypes: [0, 0],
- };
- const result = stripGeomFromColnamesAndTypes(queryData, 'geom');
- expect(result).toEqual({
- colnames: ['foo'],
- coltypes: [0],
- });
- });
- it('strips the geom from colnames with grouped columns', () => {
- const queryData = {
- colnames: ['foo', `bar, ${geom1}`],
- coltypes: [0, 0],
- };
- const result = stripGeomFromColnamesAndTypes(queryData, 'geom');
- expect(result).toEqual({
- colnames: ['foo', 'bar'],
- coltypes: [0, 0],
- });
- });
- it('strips the geom from colnames with grouped columns without geom', () => {
- const queryData = {
- colnames: ['foo', `bar, baz`],
- coltypes: [0, 0],
- };
- const result = stripGeomFromColnamesAndTypes(queryData, 'geom');
- expect(result).toEqual({
- colnames: ['foo', 'bar, baz'],
- coltypes: [0, 0],
- });
- });
- });
- describe('stripGeomColumnFromLabelMap', () => {
- it('strips the geom column from label_map', () => {
- const labelMap = {
- [`apple, ${geom1}`]: ['apple', geom1],
- [`${geom2}, lemon`]: [geom2, 'lemon'],
- geom: ['geom'],
- };
- const result = stripGeomColumnFromLabelMap(labelMap, 'geom');
- expect(result).toEqual({
- apple: ['apple'],
- lemon: ['lemon'],
- });
- });
- });
- describe('getChartConfigs', () => {
- let chartTransformer: jest.MockedFunction<any>;
- const geomColumn = 'geom';
- const pieChartConfig = {
- params: {},
- viz_type: 'pie',
- };
- const chartProps: any = {
- queriesData: [
- {
- data: nonTimeSeriesChartData,
- },
- ],
- };
- beforeEach(() => {
- chartTransformer = jest.fn();
- });
- it('calls the transformProps function for every location', () => {
- getChartConfigs(pieChartConfig, geomColumn, chartProps, chartTransformer);
- expect(chartTransformer).toHaveBeenCalledTimes(2);
- });
- it('returns a geojson', () => {
- const result = getChartConfigs(
- pieChartConfig,
- geomColumn,
- chartProps,
- chartTransformer,
- );
- expect(result).toEqual(
- expect.objectContaining({
- type: 'FeatureCollection',
- features: expect.arrayContaining([
- expect.objectContaining({
- type: 'Feature',
- }),
- ]),
- }),
- );
- });
- it('returns a feature for each location', () => {
- const result = getChartConfigs(
- pieChartConfig,
- geomColumn,
- chartProps,
- chartTransformer,
- );
- expect(result.features).toHaveLength(2);
- expect(result.features[0].geometry).toEqual(JSON.parse(geom1));
- expect(result.features[1].geometry).toEqual(JSON.parse(geom2));
- });
- });
- describe('parseSelectedChart', () => {
- it('parses the inline stringified JSON', () => {
- const selectedChartObject = {
- id: 278,
- params:
- '{"adhoc_filters":[],"applied_time_extras":{},"datasource":"24__table","viz_type":"pie","time_range":"No filter","groupby":["nuclide"],"metric":{"expressionType":"SIMPLE","column":{"advanced_data_type":null,"certification_details":null,"certified_by":null,"column_name":"nuclide","description":null,"expression":null,"filterable":true,"groupby":true,"id":772,"is_certified":false,"is_dttm":false,"python_date_format":null,"type":"TEXT","type_generic":1,"verbose_name":null,"warning_markdown":null},"aggregate":"COUNT","sqlExpression":null,"isNew":false,"datasourceWarning":false,"hasCustomLabel":false,"label":"COUNT(nuclide)","optionName":"metric_k6d9mt9zujc_7v9szd1i0pl"},"dashboards":[]}',
- slice_name: 'pie',
- viz_type: 'pie',
- };
- const selectedChartString = JSON.stringify(selectedChartObject);
- const result = parseSelectedChart(selectedChartString);
- const expectedParams = JSON.parse(selectedChartObject.params);
- expect(result.params).toEqual(expectedParams);
- });
- });
- });
|