UNPKG

@gooddata/react-components

Version:

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

293 lines (262 loc) • 11.2 kB
// (C) 2007-2020 GoodData Corporation import { Execution } from "@gooddata/typings"; import * as fixtures from "../../../stories/test_data/fixtures"; import { STACK_BY_DIMENSION_INDEX, VIEW_BY_DIMENSION_INDEX, } from "../../components/visualizations/chart/constants"; import { EXECUTION_RESPONSE_1A_2M, EXECUTION_RESULT_1A_2M, } from "../../components/visualizations/table/fixtures/1attribute2measures"; import { findAttributeInDimension, findInDimensionHeaders, findMeasureGroupInDimensions, findMeasureHeaderByLocalIdentifier, getHeaderItemName, getAttributeHeadersInDimension, getMeasureGroupHeaderItemsInDimension, getNthAttributeHeader, getNthAttributeLocalIdentifier, getNthAttributeName, getNthDimensionHeaders, } from "../executionResultHelper"; import { getExecutionResponse } from "../../../stories/data/geoChart"; describe("findInDimensionHeaders", () => { it("should call supplied callback for all headers in all dimensions until it returns a non null value", () => { const mockCallback = jest.fn(); mockCallback.mockReturnValue(null); const sampleDimensions = fixtures.barChartWithStackByAndViewByAttributes.executionResponse.dimensions; const headerCount = sampleDimensions[VIEW_BY_DIMENSION_INDEX].headers.length + sampleDimensions[STACK_BY_DIMENSION_INDEX].headers.length; const returnValue = findInDimensionHeaders(sampleDimensions, mockCallback); expect(returnValue).toBeNull(); expect(mockCallback).toHaveBeenCalledTimes(headerCount); }); it("should return the first non-null value of it`s callback value", () => { const mockCallback = jest.fn(); mockCallback.mockReturnValue(42); const sampleDimensions = fixtures.barChartWithStackByAndViewByAttributes.executionResponse.dimensions; const returnValue = findInDimensionHeaders(sampleDimensions, mockCallback); expect(returnValue).toBe(42); expect(mockCallback).toHaveBeenCalledTimes(1); }); }); describe("findMeasureGroupInDimensions", () => { const sampleDimensions = fixtures.barChartWithStackByAndViewByAttributes.executionResponse.dimensions; it("should return the measure group header", () => { const returnValue = findMeasureGroupInDimensions(sampleDimensions); const expectedValue = sampleDimensions[VIEW_BY_DIMENSION_INDEX].headers[1].measureGroupHeader; expect(returnValue).toBe(expectedValue); }); it("should throw an error if measureGroup is not the last header on it's dimension", () => { const invalidDimensions = [ { ...sampleDimensions[VIEW_BY_DIMENSION_INDEX], headers: [ ...sampleDimensions[VIEW_BY_DIMENSION_INDEX].headers, ...sampleDimensions[STACK_BY_DIMENSION_INDEX].headers, ], }, ]; expect(findMeasureGroupInDimensions.bind(this, invalidDimensions)).toThrow(); }); }); describe("findAttributeInDimension", () => { const { dimensions } = fixtures.barChartWithStackByAndViewByAttributes.executionResponse; const { headerItems } = fixtures.barChartWithStackByAndViewByAttributes.executionResult; it("should return the view by attribute header with header items", () => { const returnValue = findAttributeInDimension( dimensions[VIEW_BY_DIMENSION_INDEX], headerItems[VIEW_BY_DIMENSION_INDEX], ); const expectedValue = { ...dimensions[VIEW_BY_DIMENSION_INDEX].headers[0].attributeHeader, items: headerItems[VIEW_BY_DIMENSION_INDEX][0], }; expect(returnValue).toEqual(expectedValue); }); it("should return the stack by attribute header with header items", () => { const returnValue = findAttributeInDimension( dimensions[STACK_BY_DIMENSION_INDEX], headerItems[STACK_BY_DIMENSION_INDEX], ); const expectedValue = { ...dimensions[STACK_BY_DIMENSION_INDEX].headers[0].attributeHeader, items: headerItems[STACK_BY_DIMENSION_INDEX][0], }; expect(returnValue).toEqual(expectedValue); }); }); describe("findMeasureHeaderByLocalIdentifier", () => { const measureHeader1 = { measureHeaderItem: { uri: "m1uri", identifier: "m1id", localIdentifier: "m1", name: "m1name", format: "$#,##0.00", }, }; const measureHeader2 = { measureHeaderItem: { uri: "m2uri", identifier: "m2id", localIdentifier: "m2", name: "m2name", format: "$#,##0.00", }, }; const executionResponse: Execution.IExecutionResponse = { dimensions: [ { headers: [], }, { headers: [ { measureGroupHeader: { items: [measureHeader1, measureHeader2], }, }, ], }, ], links: { executionResult: "" }, }; it("should find header by local identifier in execution response", () => { expect(findMeasureHeaderByLocalIdentifier(executionResponse, "m1")).toEqual(measureHeader1); }); // tslint:disable-next-line:max-line-length it("should not find header by local identifier in execution response when local identifier does not match any measure", () => { expect(findMeasureHeaderByLocalIdentifier(executionResponse, "foo")).toBe(null); }); // tslint:disable-next-line:max-line-length it("should not find header by local identifier in execution response no measure headers present", () => { const emptyExecutionResponse: Execution.IExecutionResponse = { dimensions: [ { headers: [], }, ], links: { executionResult: "" }, }; expect(findMeasureHeaderByLocalIdentifier(emptyExecutionResponse, "foo")).toBe(null); }); }); describe("getNthAttributeHeader", () => { it("should return first header", () => { const attributeHeaders = EXECUTION_RESPONSE_1A_2M.dimensions[0] .headers as Execution.IAttributeHeader[]; expect(getNthAttributeHeader(attributeHeaders, 0)).toBe(attributeHeaders[0].attributeHeader); }); it("should return null if attribute header not found", () => { const attributeHeaders = EXECUTION_RESPONSE_1A_2M.dimensions[0] .headers as Execution.IAttributeHeader[]; expect(getNthAttributeHeader(attributeHeaders, 1)).toBe(null); }); }); describe("getNthAttributeLocalIdentifier", () => { it("should return local identifier of first header", () => { const attributeHeaders = EXECUTION_RESPONSE_1A_2M.dimensions[0] .headers as Execution.IAttributeHeader[]; expect(getNthAttributeLocalIdentifier(attributeHeaders, 0)).toBe( attributeHeaders[0].attributeHeader.localIdentifier, ); }); it("should return null if attribute header not found", () => { const attributeHeaders = EXECUTION_RESPONSE_1A_2M.dimensions[0] .headers as Execution.IAttributeHeader[]; expect(getNthAttributeLocalIdentifier(attributeHeaders, 1)).toBe(null); }); }); describe("getNthAttributeName", () => { it("should return name of first header", () => { const attributeHeaders = EXECUTION_RESPONSE_1A_2M.dimensions[0] .headers as Execution.IAttributeHeader[]; expect(getNthAttributeName(attributeHeaders, 0)).toBe( attributeHeaders[0].attributeHeader.formOf.name, ); }); it("should return null if attribute header not found", () => { const attributeHeaders = EXECUTION_RESPONSE_1A_2M.dimensions[0] .headers as Execution.IAttributeHeader[]; expect(getNthAttributeName(attributeHeaders, 1)).toBe(null); }); }); describe("getNthDimensionHeaders", () => { it("should return first header", () => { const executionResponse = EXECUTION_RESPONSE_1A_2M; expect(getNthDimensionHeaders(executionResponse, 0)).toBe(executionResponse.dimensions[0].headers); }); it("should return null if dimension not found", () => { const executionResponse = EXECUTION_RESPONSE_1A_2M; expect(getNthDimensionHeaders(executionResponse, 3)).toBe(null); }); }); describe("getHeaderItemName", () => { it("should return header name", () => { const headerItems = EXECUTION_RESULT_1A_2M.headerItems as Execution.IResultHeaderItem[][][]; expect(getHeaderItemName(headerItems[0][0][0])).toBe("Wile E. Coyote"); }); it("should return empty header name", () => { const headerItems = EXECUTION_RESULT_1A_2M.headerItems as Execution.IResultHeaderItem[][][]; expect(getHeaderItemName(headerItems[1][0][0])).toBe(""); }); }); describe("getHeadersInDimension", () => { const executionResponse = getExecutionResponse(true, true, true, true, true); it("should return attribute headers", () => { const { dimensions } = executionResponse; const attributeHeaders = getAttributeHeadersInDimension(dimensions); expect(attributeHeaders).toEqual([ { formOf: { identifier: "attr.state", name: "State", uri: "any-uri" }, identifier: "label.state", localIdentifier: "a_state", name: "State", uri: "/gdc/md/projectId/obj/1", }, { formOf: { identifier: "attr.type", name: "Type", uri: "any-uri" }, identifier: "label.type", localIdentifier: "a_type", name: "Type", uri: "/gdc/md/projectId/obj/2", }, { formOf: { identifier: "attr.state", name: "State", uri: "any-uri" }, identifier: "label.state", localIdentifier: "a_state_tooltip_text", name: "State", uri: "/gdc/md/projectId/obj/3", }, ]); }); it("should return measure group header", () => { const { dimensions } = executionResponse; const measureHeaderItems = getMeasureGroupHeaderItemsInDimension(dimensions); expect(measureHeaderItems).toEqual([ { measureHeaderItem: { format: "#,##0", identifier: "measure.population", localIdentifier: "m_population", name: "Population", uri: "/gdc/md/projectId/obj/4", }, }, { measureHeaderItem: { format: "#,##0", identifier: "measure.area", localIdentifier: "m_area", name: "Area", uri: "/gdc/md/projectId/obj/5", }, }, ]); }); });