UNPKG

@gooddata/react-components

Version:

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

343 lines (323 loc) • 13 kB
// (C) 2007-2020 GoodData Corporation import { Execution } from "@gooddata/typings"; import * as fixtures from "../../../../../stories/test_data/fixtures"; import { assortDimensionHeaders, headerToGrid, identifyHeader, identifyResponseHeader, getRowHeaders, getFields, getColumnHeaders, getMinimalRowData, mergeHeaderEndIndex, shouldMergeHeaders, } from "../agGridHeaders"; describe("identifyHeader", () => { it("should return correct field key for an attribute header", () => { expect( identifyHeader( fixtures.pivotTableWithColumnAndRowAttributes.executionResult.headerItems[0][0][0], ), ).toBe("a_2210_6340109"); }); it("should return correct field key for a measure header", () => { expect( identifyHeader( fixtures.pivotTableWithColumnAndRowAttributes.executionResult.headerItems[1][2][0], ), ).toBe("m_0"); }); }); describe("identifyResponseHeader", () => { it("should return correct field key for an attribute response header", () => { expect( identifyResponseHeader( fixtures.pivotTableWithColumnAndRowAttributes.executionResponse.dimensions[0].headers[0], ), ).toBe("a_2211"); }); }); describe("headerToGrid", () => { it("should return correct grid header for an attribute header with correct prefix", () => { expect( headerToGrid( fixtures.pivotTableWithColumnAndRowAttributes.executionResult.headerItems[0][0][0], "prefix_", ), ).toEqual({ field: "prefix_a_2210_6340109", headerName: "Alabama" }); }); it("should return correct grid header for a measure header with correct prefix", () => { expect( headerToGrid( fixtures.pivotTableWithColumnAndRowAttributes.executionResult.headerItems[1][2][0], "prefix_", ), ).toEqual({ field: "prefix_m_0", headerName: "$ Franchise Fees" }); }); }); describe("getColumnHeaders", () => { it("should return hierarchical column headers", () => { expect( getColumnHeaders( fixtures.pivotTableWithColumnAndRowAttributes.executionResult.headerItems[1], fixtures.pivotTableWithColumnAndRowAttributes.executionResponse.dimensions[1].headers, ), ).toMatchSnapshot(); }); }); describe("getRowHeaders", () => { it("should return an array of grid headers", () => { expect( getRowHeaders( fixtures.pivotTableWithColumnAndRowAttributes.executionResponse.dimensions[0].headers, {}, false, ), ).toEqual([ { field: "a_2211", headerName: "Location State", type: "ROW_ATTRIBUTE_COLUMN", drillItems: [ { attributeHeader: { identifier: "label.restaurantlocation.locationstate", localIdentifier: "state", name: "Location State", uri: "/gdc/md/xms7ga4tf3g3nzucd8380o2bev8oeknp/obj/2211", formOf: { identifier: "attr.restaurantlocation.locationstate", name: "Location State", uri: "/gdc/md/xms7ga4tf3g3nzucd8380o2bev8oeknp/obj/2210", }, }, }, ], }, { field: "a_2205", headerName: "Location Name", type: "ROW_ATTRIBUTE_COLUMN", drillItems: [ { attributeHeader: { identifier: "label.restaurantlocation.locationname", localIdentifier: "location", name: "Location Name", uri: "/gdc/md/xms7ga4tf3g3nzucd8380o2bev8oeknp/obj/2205", formOf: { identifier: "attr.restaurantlocation.locationname", name: "Location Name", uri: "/gdc/md/xms7ga4tf3g3nzucd8380o2bev8oeknp/obj/2204", }, }, }, ], }, ]); }); it("should return an array of grid headers with row group settings and extended by custom options", () => { expect( getRowHeaders( fixtures.pivotTableWithColumnAndRowAttributes.executionResponse.dimensions[0].headers, { type: "custom" }, true, ), ).toEqual([ { field: "a_2211", headerName: "Location State", hide: true, rowGroup: true, type: "custom", drillItems: [ { attributeHeader: { identifier: "label.restaurantlocation.locationstate", localIdentifier: "state", name: "Location State", uri: "/gdc/md/xms7ga4tf3g3nzucd8380o2bev8oeknp/obj/2211", formOf: { identifier: "attr.restaurantlocation.locationstate", name: "Location State", uri: "/gdc/md/xms7ga4tf3g3nzucd8380o2bev8oeknp/obj/2210", }, }, }, ], }, { field: "a_2205", headerName: "Location Name", hide: true, rowGroup: true, type: "custom", drillItems: [ { attributeHeader: { identifier: "label.restaurantlocation.locationname", localIdentifier: "location", name: "Location Name", uri: "/gdc/md/xms7ga4tf3g3nzucd8380o2bev8oeknp/obj/2205", formOf: { identifier: "attr.restaurantlocation.locationname", name: "Location Name", uri: "/gdc/md/xms7ga4tf3g3nzucd8380o2bev8oeknp/obj/2204", }, }, }, ], }, ]); }); }); describe("getFields", () => { it("should return an array of all column fields", () => { expect( getFields(fixtures.pivotTableWithColumnAndRowAttributes.executionResult.headerItems[1]), ).toEqual([ "a_2009_1-a_2071_1-m_0", "a_2009_1-a_2071_1-m_1", "a_2009_1-a_2071_1-m_2", "a_2009_1-a_2071_1-m_3", "a_2009_1-a_2071_2-m_0", "a_2009_1-a_2071_2-m_1", "a_2009_1-a_2071_2-m_2", "a_2009_1-a_2071_2-m_3", "a_2009_1-a_2071_3-m_0", "a_2009_1-a_2071_3-m_1", "a_2009_1-a_2071_3-m_2", "a_2009_1-a_2071_3-m_3", "a_2009_2-a_2071_4-m_0", "a_2009_2-a_2071_4-m_1", "a_2009_2-a_2071_4-m_2", "a_2009_2-a_2071_4-m_3", "a_2009_2-a_2071_5-m_0", "a_2009_2-a_2071_5-m_1", "a_2009_2-a_2071_5-m_2", "a_2009_2-a_2071_5-m_3", "a_2009_2-a_2071_6-m_0", "a_2009_2-a_2071_6-m_1", "a_2009_2-a_2071_6-m_2", "a_2009_2-a_2071_6-m_3", "a_2009_3-a_2071_7-m_0", "a_2009_3-a_2071_7-m_1", "a_2009_3-a_2071_7-m_2", "a_2009_3-a_2071_7-m_3", "a_2009_3-a_2071_8-m_0", "a_2009_3-a_2071_8-m_1", "a_2009_3-a_2071_8-m_2", "a_2009_3-a_2071_8-m_3", "a_2009_3-a_2071_9-m_0", "a_2009_3-a_2071_9-m_1", "a_2009_3-a_2071_9-m_2", "a_2009_3-a_2071_9-m_3", "a_2009_4-a_2071_10-m_0", "a_2009_4-a_2071_10-m_1", "a_2009_4-a_2071_10-m_2", "a_2009_4-a_2071_10-m_3", "a_2009_4-a_2071_11-m_0", "a_2009_4-a_2071_11-m_1", "a_2009_4-a_2071_11-m_2", "a_2009_4-a_2071_11-m_3", "a_2009_4-a_2071_12-m_0", "a_2009_4-a_2071_12-m_1", "a_2009_4-a_2071_12-m_2", "a_2009_4-a_2071_12-m_3", ]); }); }); describe("assortDimensionHeaders", () => { it("should return attribute and measure dimension headers", () => { const dimensions = fixtures.pivotTableWithColumnAndRowAttributes.executionResponse.dimensions; const { attributeHeaders, measureHeaderItems } = assortDimensionHeaders(dimensions); expect(attributeHeaders).toHaveLength(4); expect(attributeHeaders.filter(header => Execution.isAttributeHeader(header))).toHaveLength(4); expect(measureHeaderItems).toHaveLength(4); expect(measureHeaderItems.filter(header => header.hasOwnProperty("measureHeaderItem"))).toHaveLength( 4, ); }); }); describe("getMinimalRowData", () => { it("should return a two-dimensional array of empty values when no measure data are available", () => { expect( getMinimalRowData( [], fixtures.pivotTableWithColumnAndRowAttributes.executionResult.headerItems[0], ), ).toEqual([[null], [null], [null], [null], [null], [null]]); }); it("should return a identical data if measure data is available", () => { const data = [[1], [2], [3]]; expect( getMinimalRowData( data, fixtures.pivotTableWithColumnAndRowAttributes.executionResult.headerItems[0], ), ).toBe(data); }); }); describe("conversion from header matrix to hierarchy", () => { const alabamaHeader = { attributeHeaderItem: { uri: "/gdc/md/xms7ga4tf3g3nzucd8380o2bev8oeknp/obj/2210/elements?id=1", name: "Alabama", }, }; const californiaHeader = { attributeHeaderItem: { uri: "/gdc/md/xms7ga4tf3g3nzucd8380o2bev8oeknp/obj/2210/elements?id=2", name: "California", }, }; const year2017Header = { attributeHeaderItem: { uri: "/gdc/md/xms7ga4tf3g3nzucd8380o2bev8oeknp/obj/2212/elements?id=3", name: "2017", }, }; const costsHeader = { measureHeaderItem: { name: "Costs", order: 1, }, }; const revenuesHeader = { measureHeaderItem: { name: "Revenues", order: 2, }, }; const resultHeaderDimension: Execution.IResultHeaderItem[][] = [ [alabamaHeader, alabamaHeader, californiaHeader, californiaHeader], [year2017Header, year2017Header, year2017Header, year2017Header], [costsHeader, revenuesHeader, costsHeader, revenuesHeader], ]; const stateHeaderIndex = 0; const yearHeaderIndex = 1; const measureGroupHeaderIndex = 2; describe("shouldMergeHeaders", () => { it("should return true for headers that are identical and have no ancestors", () => { expect(shouldMergeHeaders(resultHeaderDimension, stateHeaderIndex, 0)).toBe(true); }); it("should return true for headers that are identical and have identical ancestors", () => { expect(shouldMergeHeaders(resultHeaderDimension, yearHeaderIndex, 0)).toBe(true); }); it("should return false for headers that are identical but have at least one non-identical ancestor", () => { expect(shouldMergeHeaders(resultHeaderDimension, yearHeaderIndex, 1)).toBe(false); }); it("should return false for headers that are not identical", () => { expect(shouldMergeHeaders(resultHeaderDimension, measureGroupHeaderIndex, 0)).toBe(false); }); }); describe("mergeHeaderCount", () => { it("should return correct index of last header in row that can be merged with the current one", () => { expect(mergeHeaderEndIndex(resultHeaderDimension, stateHeaderIndex, 0)).toBe(1); expect(mergeHeaderEndIndex(resultHeaderDimension, stateHeaderIndex, 1)).toBe(1); expect(mergeHeaderEndIndex(resultHeaderDimension, stateHeaderIndex, 2)).toBe(3); expect(mergeHeaderEndIndex(resultHeaderDimension, stateHeaderIndex, 3)).toBe(3); }); }); });