UNPKG

@gooddata/react-components

Version:

GoodData.UI - A powerful JavaScript library for building analytical applications

184 lines (173 loc) • 6.43 kB
// (C) 2007-2020 GoodData Corporation import { Execution, VisualizationObject } from "@gooddata/typings"; import { getStackByAttribute } from "../stackByAttribute"; import { IUnwrappedAttributeHeaderWithItems } from "../../components/visualizations/typings/chart"; import { IChartConfig } from "../../interfaces/Config"; import { VisualizationTypes } from "../../constants/visualizationTypes"; const dimensions: Execution.IResultDimension[] = [ { headers: [ { attributeHeader: { name: "Region", localIdentifier: "02eed1089e6149d9b448637cf32b2c43", uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/1024", identifier: "label.owner.region", formOf: { name: "Region", uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/1023", identifier: "attr.owner.region", }, }, }, ], }, { headers: [ { measureGroupHeader: { items: [ { measureHeaderItem: { name: "Amount", format: "$#,##0.00", localIdentifier: "82d26962672c436bb183a02a78551918", uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/1279", identifier: "ah1EuQxwaCqs", }, }, ], }, }, ], }, ]; const attributeHeaderItems: Execution.IResultHeaderItem[][][] = [ [ [ { attributeHeaderItem: { name: "East Coast", uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/1023/elements?id=1225", }, }, { attributeHeaderItem: { name: "West Coast", uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/1023/elements?id=1237", }, }, ], ], [], ]; const mdObject: VisualizationObject.IVisualizationObjectContent = { buckets: [ { localIdentifier: "measures", items: [ { measure: { localIdentifier: "82d26962672c436bb183a02a78551918", definition: { measureDefinition: { item: { uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/1279" }, }, }, title: "Amount", }, }, ], }, { localIdentifier: "stack", items: [ { visualizationAttribute: { localIdentifier: "02eed1089e6149d9b448637cf32b2c43", displayForm: { uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/1024" }, }, }, ], }, ], filters: [ { positiveAttributeFilter: { displayForm: { uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/952" }, in: [ "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/949/elements?id=168279", "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/949/elements?id=168282", ], }, }, { negativeAttributeFilter: { displayForm: { uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/1024" }, notIn: [], }, }, ], visualizationClass: { uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/75536" }, }; describe("getStackByAttribute", () => { const expectedStackByAttribute = { name: "Region", localIdentifier: "02eed1089e6149d9b448637cf32b2c43", uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/1024", identifier: "label.owner.region", formOf: { name: "Region", uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/1023", identifier: "attr.owner.region", }, items: [ { attributeHeaderItem: { name: "East Coast", uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/1023/elements?id=1225", }, }, { attributeHeaderItem: { name: "West Coast", uri: "/gdc/md/dfnkvzqa683mz1c29ijdkydrsodm8wjw/obj/1023/elements?id=1237", }, }, ], }; it("should return stackBy attribute for treemap chart", () => { const testDimensions = [dimensions[1], dimensions[0]]; const testAttributeHeaderItems = [attributeHeaderItems[1], attributeHeaderItems[0]]; const testMdObject = { ...mdObject }; testMdObject.buckets[1].localIdentifier = "segment"; const config: IChartConfig = { mdObject: testMdObject, stackMeasuresToPercent: true, type: VisualizationTypes.TREEMAP, }; const stackByAttribute: IUnwrappedAttributeHeaderWithItems = getStackByAttribute( config, testDimensions, testAttributeHeaderItems, ); expect(stackByAttribute).toEqual(expectedStackByAttribute); }); it("should return stackBy attribute for other chart type", () => { const testDimensions = [dimensions[0], dimensions[1]]; const testAttributeHeaderItems = [attributeHeaderItems[0], attributeHeaderItems[1]]; const testMdObject = { ...mdObject }; testMdObject.buckets[1].localIdentifier = "stack"; const config: IChartConfig = { mdObject: testMdObject, stackMeasuresToPercent: true, type: VisualizationTypes.AREA, }; const stackByAttribute: IUnwrappedAttributeHeaderWithItems = getStackByAttribute( config, testDimensions, testAttributeHeaderItems, ); expect(stackByAttribute).toEqual(expectedStackByAttribute); }); });