From b297956947e25508973f1031059a087d2846a511 Mon Sep 17 00:00:00 2001 From: KHMakoto Date: Mon, 26 Oct 2020 17:47:29 -0700 Subject: [PATCH 1/2] Charting: Adding tests for VerticalStackedBarChart. --- .../VerticalStackedBarChart.test.tsx | 229 ++ .../VerticalStackedBarChart.test.tsx.snap | 2428 +++++++++++++++++ 2 files changed, 2657 insertions(+) create mode 100644 packages/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.test.tsx create mode 100644 packages/react-charting/src/components/VerticalStackedBarChart/__snapshots__/VerticalStackedBarChart.test.tsx.snap diff --git a/packages/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.test.tsx b/packages/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.test.tsx new file mode 100644 index 00000000000000..9fd598aad866b3 --- /dev/null +++ b/packages/react-charting/src/components/VerticalStackedBarChart/VerticalStackedBarChart.test.tsx @@ -0,0 +1,229 @@ +jest.mock('react-dom'); +import * as React from 'react'; +import { resetIds } from '../../Utilities'; +import * as renderer from 'react-test-renderer'; +import { mount, ReactWrapper } from 'enzyme'; +import { DefaultPalette } from '@fluentui/react/lib/Styling'; +import { + IVSChartDataPoint, + IVerticalStackedBarChartProps, + VerticalStackedBarChart, + IVerticalStackedChartProps, +} from '../../index'; +import { IVerticalStackedBarChartState, VerticalStackedBarChartBase } from './VerticalStackedBarChart.base'; + +// Wrapper of the VerticalStackedBarChart to be tested. +let wrapper: + | ReactWrapper + | undefined; + +function sharedBeforeEach() { + resetIds(); +} + +function sharedAfterEach() { + if (wrapper) { + wrapper.unmount(); + wrapper = undefined; + } + + // Do this after unmounting the wrapper to make sure if any timers cleaned up on unmount are + // cleaned up in fake timers world + // eslint-disable-next-line @typescript-eslint/no-explicit-any + if ((global.setTimeout as any).mock) { + jest.useRealTimers(); + } +} + +const firstChartPoints: IVSChartDataPoint[] = [ + { + legend: 'Metadata1', + data: 40, + color: DefaultPalette.accent, + xAxisCalloutData: '2020/04/30', + yAxisCalloutData: '40%', + }, + { + legend: 'Metadata2', + data: 5, + color: DefaultPalette.blueMid, + xAxisCalloutData: '2020/04/30', + yAxisCalloutData: '5%', + }, +]; + +const secondChartPoints: IVSChartDataPoint[] = [ + { + legend: 'Metadata1', + data: 30, + color: DefaultPalette.accent, + xAxisCalloutData: '2020/04/30', + yAxisCalloutData: '30%', + }, + { + legend: 'Metadata2', + data: 20, + color: DefaultPalette.blueMid, + xAxisCalloutData: '2020/04/30', + yAxisCalloutData: '20%', + }, +]; + +const chartPoints: IVerticalStackedChartProps[] = [ + { chartData: firstChartPoints, xAxisPoint: 0 }, + { chartData: secondChartPoints, xAxisPoint: 20 }, +]; + +describe('VerticalStackedBarChart snapShot testing', () => { + it('renders VerticalStackedBarChart correctly', () => { + const component = renderer.create(); + const tree = component.toJSON(); + expect(tree).toMatchSnapshot(); + }); + + it('renders hideLegend correctly', () => { + const component = renderer.create(); + const tree = component.toJSON(); + expect(tree).toMatchSnapshot(); + }); + + it('renders hideTooltip correctly', () => { + const component = renderer.create(); + const tree = component.toJSON(); + expect(tree).toMatchSnapshot(); + }); + + it('renders enabledLegendsWrapLines correctly', () => { + const component = renderer.create(); + const tree = component.toJSON(); + expect(tree).toMatchSnapshot(); + }); + + it('renders showXAxisLablesTooltip correctly', () => { + const component = renderer.create(); + const tree = component.toJSON(); + expect(tree).toMatchSnapshot(); + }); + + it('renders wrapXAxisLables correctly', () => { + const component = renderer.create(); + const tree = component.toJSON(); + expect(tree).toMatchSnapshot(); + }); + + it('renders isCalloutForStack correctly', () => { + const component = renderer.create(); + const tree = component.toJSON(); + expect(tree).toMatchSnapshot(); + }); + + it('renders yAxisTickFormat correctly', () => { + const component = renderer.create(); + const tree = component.toJSON(); + expect(tree).toMatchSnapshot(); + }); +}); + +describe('VerticalStackedBarChart - basic props', () => { + beforeEach(sharedBeforeEach); + afterEach(sharedAfterEach); + + it('Should not mount legend when hideLegend true ', () => { + wrapper = mount(); + const hideLegendDOM = wrapper.getDOMNode().querySelectorAll('[class^="legendContainer"]'); + expect(hideLegendDOM!.length).toBe(0); + }); + + it('Should mount legend when hideLegend false ', () => { + wrapper = mount(); + const hideLegendDOM = wrapper.getDOMNode().querySelectorAll('[class^="legendContainer"]'); + expect(hideLegendDOM).toBeDefined(); + }); + + it('Should mount callout when hideTootip false ', () => { + wrapper = mount(); + const hideTooltipDom = wrapper.getDOMNode().querySelectorAll('[class^="ms-Layer"]'); + expect(hideTooltipDom).toBeDefined(); + }); + + it('Should not mount callout when hideTootip true ', () => { + wrapper = mount(); + const hideTooltipDom = wrapper.getDOMNode().querySelectorAll('[class^="ms-Layer"]'); + expect(hideTooltipDom.length).toBe(0); + }); + + it('Should render onRenderCalloutPerStack ', () => { + wrapper = mount( + + props ? ( +
+

Custom Callout Content

+
+ ) : null + } + />, + ); + const renderedDOM = wrapper.getDOMNode().getElementsByClassName('.onRenderCalloutPerStack'); + expect(renderedDOM).toBeDefined(); + }); + + it('Should not render onRenderCalloutPerStack ', () => { + wrapper = mount(); + const renderedDOM = wrapper.getDOMNode().getElementsByClassName('.onRenderCalloutPerStack'); + expect(renderedDOM!.length).toBe(0); + }); + + it('Should render onRenderCalloutPerDataPoint ', () => { + wrapper = mount( + + props ? ( +
+

Custom Callout Content

+
+ ) : null + } + />, + ); + const renderedDOM = wrapper.getDOMNode().getElementsByClassName('.onRenderCalloutPerDataPoint'); + expect(renderedDOM).toBeDefined(); + }); + + it('Should not render onRenderCalloutPerDataPoint ', () => { + wrapper = mount(); + const renderedDOM = wrapper.getDOMNode().getElementsByClassName('.onRenderCalloutPerDataPoint'); + expect(renderedDOM!.length).toBe(0); + }); +}); + +describe('Render calling with respective to props', () => { + it('No prop changes', () => { + const renderMock = jest.spyOn(VerticalStackedBarChartBase.prototype, 'render'); + const props = { + data: chartPoints, + height: 300, + width: 600, + }; + const component = mount(); + component.setProps({ ...props }); + expect(renderMock).toHaveBeenCalledTimes(2); + renderMock.mockRestore(); + }); + + it('prop changes', () => { + const renderMock = jest.spyOn(VerticalStackedBarChartBase.prototype, 'render'); + const props = { + data: chartPoints, + height: 300, + width: 600, + hideLegend: true, + }; + const component = mount(); + component.setProps({ ...props, hideTooltip: true }); + expect(renderMock).toHaveBeenCalledTimes(2); + renderMock.mockRestore(); + }); +}); diff --git a/packages/react-charting/src/components/VerticalStackedBarChart/__snapshots__/VerticalStackedBarChart.test.tsx.snap b/packages/react-charting/src/components/VerticalStackedBarChart/__snapshots__/VerticalStackedBarChart.test.tsx.snap new file mode 100644 index 00000000000000..0c77764e96fa27 --- /dev/null +++ b/packages/react-charting/src/components/VerticalStackedBarChart/__snapshots__/VerticalStackedBarChart.test.tsx.snap @@ -0,0 +1,2428 @@ +// Jest Snapshot v1, https://goo.gl/fbAQLP + +exports[`VerticalStackedBarChart snapShot testing renders VerticalStackedBarChart correctly 1`] = ` + +`; + +exports[`VerticalStackedBarChart snapShot testing renders enabledLegendsWrapLines correctly 1`] = ` + +`; + +exports[`VerticalStackedBarChart snapShot testing renders hideLegend correctly 1`] = ` + +`; + +exports[`VerticalStackedBarChart snapShot testing renders hideTooltip correctly 1`] = ` + +`; + +exports[`VerticalStackedBarChart snapShot testing renders isCalloutForStack correctly 1`] = ` + +`; + +exports[`VerticalStackedBarChart snapShot testing renders showXAxisLablesTooltip correctly 1`] = ` + +`; + +exports[`VerticalStackedBarChart snapShot testing renders wrapXAxisLables correctly 1`] = ` + +`; + +exports[`VerticalStackedBarChart snapShot testing renders yAxisTickFormat correctly 1`] = ` + +`; From 41301b45248eeac1ad10fb19dd702a9f0eca05bd Mon Sep 17 00:00:00 2001 From: KHMakoto Date: Mon, 26 Oct 2020 17:48:27 -0700 Subject: [PATCH 2/2] Change files --- ...-2020-10-26-17-48-27-verticalStackedBarChartTests.json | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 change/@fluentui-react-charting-2020-10-26-17-48-27-verticalStackedBarChartTests.json diff --git a/change/@fluentui-react-charting-2020-10-26-17-48-27-verticalStackedBarChartTests.json b/change/@fluentui-react-charting-2020-10-26-17-48-27-verticalStackedBarChartTests.json new file mode 100644 index 00000000000000..8f72307fd257f5 --- /dev/null +++ b/change/@fluentui-react-charting-2020-10-26-17-48-27-verticalStackedBarChartTests.json @@ -0,0 +1,8 @@ +{ + "type": "none", + "comment": "Charting: Adding tests for VerticalStackedBarChart.", + "packageName": "@fluentui/react-charting", + "email": "humbertomakotomorimoto@gmail.com", + "dependentChangeType": "none", + "date": "2020-10-27T00:48:27.433Z" +}