import React from 'react';
import {
createEvent,
fireEvent,
RenderResult,
waitFor,
} from '@testing-library/react';
import { Arc } from '@/components/shapes/Arc';
import { Chart } from '@/components/Chart';
import { arcDatum } from 'eazychart-core/src/sample-data';
import { baseChartProps, renderSVG } from 'tests/common';
import { act } from 'react-dom/test-utils';
import { TooltipContext } from 'eazychart-core/src/types';
import 'tests/mocks/ResizeObserver';
const mockShowTooltip = jest.fn();
const mockMoveTooltip = jest.fn();
const mockHideTooltip = jest.fn();
const mockTooltip: TooltipContext = {
showTooltip: mockShowTooltip,
moveTooltip: mockMoveTooltip,
hideTooltip: mockHideTooltip,
};
jest.mock('@/components/addons/tooltip/use-tooltip', () => ({
useTooltip: () => {
return mockTooltip;
},
}));
describe('Arc', () => {
afterAll(() => {
jest.resetAllMocks();
});
it('renders an svg arc with the right coordinates / dimensions', async () => {
let wrapper: RenderResult;
act(() => {
wrapper = renderSVG(
<>{null}>,
TooltipComponent: () => <>{null}>,
}}
>
);
});
await waitFor(() => {
expect(wrapper.container.innerHTML).toMatchSnapshot();
});
});
it('show/hide the tooltip on mouse over/out', async () => {
const wrapper = renderSVG(
<>{null}>,
TooltipComponent: () => <>{null}>,
}}
>
);
const pieArcShape = await wrapper.findByTestId('ez-arc');
expect(mockShowTooltip).not.toHaveBeenCalled();
expect(mockHideTooltip).not.toHaveBeenCalled();
// Shows tooltip on mouse over
const event = createEvent.mouseOver(pieArcShape, {
clientX: 100,
clientY: 200,
});
fireEvent(pieArcShape, event);
expect(mockShowTooltip).toBeCalledWith(arcDatum, expect.anything());
expect(mockHideTooltip).not.toBeCalled();
mockShowTooltip.mockReset();
mockHideTooltip.mockReset();
// Hides tooltip on mouse leave
fireEvent.mouseLeave(pieArcShape);
expect(mockShowTooltip).not.toBeCalled();
expect(mockHideTooltip).toBeCalled();
});
});