Skip to content

Commit 797a4d7

Browse files
authored
Merge pull request #2001 from fedspendingtransparency/FDG-8063
FDG-8063 Improve Code Coverage - revenue circle chart
2 parents f00176e + bbebad1 commit 797a4d7

File tree

1 file changed

+69
-1
lines changed

1 file changed

+69
-1
lines changed

src/layouts/explainer/sections/government-revenue/sources-of-federal-revenue/sources-of-revenue-circle-chart/sources-of-revenue-circle-chart.spec.js

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,15 @@
1-
import { render, waitFor } from '@testing-library/react';
1+
import { render, waitFor, fireEvent, act } from '@testing-library/react';
22
import React from 'react';
33
import SourcesOfRevenueCircleChart from './sources-of-revenue-circle-chart';
44
import userEvent from '@testing-library/user-event';
55
import { sourcesOfRevenueCircleChartMatcher } from '../../../../explainer-helpers/government-revenue/government-revenue-test-helper';
66
import { setGlobalFetchMatchingResponse } from '../../../../../../utils/mock-utils';
7+
import Analytics from '../../../../../../utils/analytics/analytics';
8+
9+
// Mock Analytics to track calls
10+
jest.mock('../../../../../../utils/analytics/analytics', () => ({
11+
event: jest.fn(),
12+
}));
713

814
class ResizeObserver {
915
observe() {}
@@ -13,10 +19,12 @@ class ResizeObserver {
1319

1420
describe('Circle chart', () => {
1521
window.ResizeObserver = ResizeObserver;
22+
1623
beforeAll(() => {
1724
jest.spyOn(console, 'warn').mockImplementation(() => {});
1825
setGlobalFetchMatchingResponse(jest, sourcesOfRevenueCircleChartMatcher);
1926
});
27+
2028
afterAll(() => {
2129
jest.resetModules();
2230
global.fetch.mockReset();
@@ -66,4 +74,64 @@ describe('Circle chart', () => {
6674
expect(await getByText('corporate income taxes is $2.43 T', { exact: false })).toBeInTheDocument();
6775
await waitFor(() => expect(getByText('making up 11%', { exact: false })).toBeInTheDocument());
6876
});
77+
78+
it('ignores keyboard interaction if key is not "Enter"', async () => {
79+
const { getAllByText, getByText } = render(<SourcesOfRevenueCircleChart />);
80+
await waitFor(() => expect(getByText('Corporate')).toBeInTheDocument());
81+
82+
const labelText = getByText('Corporate').closest('text');
83+
labelText.focus();
84+
85+
fireEvent.keyPress(labelText, { key: 'A', code: 'KeyA' });
86+
87+
expect(await getAllByText('Individual Income Taxes')).toHaveLength(2);
88+
});
89+
90+
it('updates the header on keyboard "Enter" interaction with a label', async () => {
91+
const { getAllByText, getByText } = render(<SourcesOfRevenueCircleChart />);
92+
await waitFor(() => expect(getByText('Corporate')).toBeInTheDocument());
93+
94+
const labelText = getByText('Corporate').closest('text');
95+
96+
labelText.focus();
97+
fireEvent.keyPress(labelText, { key: 'Enter', code: 'Enter', charCode: 13 });
98+
99+
expect(await getAllByText('Corporate Income Taxes', { exact: false })).toHaveLength(2);
100+
});
101+
102+
it('resets the chart to default view when mouse leaves the chart area', async () => {
103+
const { getAllByText, getByText, getByTestId, getByRole } = render(<SourcesOfRevenueCircleChart />);
104+
await waitFor(() => expect(getByText('Corporate')).toBeInTheDocument());
105+
106+
const corporateIncomeTaxesCircle = getByRole('img').children[1].children[1];
107+
userEvent.hover(corporateIncomeTaxesCircle);
108+
expect(await getAllByText('Corporate Income Taxes', { exact: false })).toHaveLength(3);
109+
110+
const chartParent = getByTestId('chartParent');
111+
userEvent.unhover(chartParent);
112+
113+
expect(await getAllByText('Individual Income Taxes')).toHaveLength(2);
114+
});
115+
116+
it('tracks analytics event on chart hover', async () => {
117+
jest.useFakeTimers();
118+
const { getByTestId, getByText } = render(<SourcesOfRevenueCircleChart />);
119+
await waitFor(() => expect(getByText('Corporate')).toBeInTheDocument());
120+
121+
const chartParent = getByTestId('chartParent');
122+
123+
fireEvent.mouseEnter(chartParent);
124+
125+
act(() => {
126+
jest.advanceTimersByTime(3100);
127+
});
128+
129+
expect(Analytics.event).toHaveBeenCalledWith({
130+
category: 'Explainers',
131+
action: 'Chart Hover',
132+
label: 'Revenue - Sources of Federal Revenue',
133+
});
134+
135+
jest.useRealTimers();
136+
});
69137
});

0 commit comments

Comments
 (0)