import React from 'react';
import {
fireEvent,
RenderResult,
act,
waitFor,
createEvent,
} from '@testing-library/react';
import { Point } from '@/components/shapes/Point';
import { Chart } from '@/components/Chart';
import { pointA } from 'eazychart-core/src/sample-data';
import { baseChartProps, renderSVG } from 'tests/common';
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('Point', () => {
afterAll(() => {
jest.resetAllMocks();
});
it('renders an svg circle with the right coordinates', 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(
);
const circleShape = await wrapper.findByTestId('ez-point');
expect(mockShowTooltip).not.toHaveBeenCalled();
expect(mockHideTooltip).not.toHaveBeenCalled();
// Shows tooltip on mouse over
const event = createEvent.mouseOver(circleShape, {
clientX: 100,
clientY: 200,
});
fireEvent(circleShape, event);
expect(mockShowTooltip).toBeCalledWith(pointA, expect.anything());
expect(mockHideTooltip).not.toBeCalled();
mockShowTooltip.mockReset();
mockHideTooltip.mockReset();
// Hides tooltip on mouse leave
fireEvent.mouseLeave(circleShape);
expect(mockShowTooltip).not.toBeCalled();
expect(mockHideTooltip).toBeCalled();
});
});