import React from 'react'; import userEvent from '@testing-library/user-event'; import { act } from 'react-dom/test-utils'; import { fireEvent } from '@testing-library/react'; import renderWithTheme from '../../../testUtils/renderWithTheme'; import Tooltip from '../index'; describe('Tooltip', () => { it('renders target and shows content while hovering', async () => { const { getByText, queryByText } = renderWithTheme( Tooltip target

} content="Tooltip content" /> ); expect(getByText('Tooltip target')).toBeInTheDocument(); expect(queryByText('Tooltip content')).not.toBeInTheDocument(); await act(async () => { userEvent.hover(getByText('Tooltip target')); }); expect(getByText('Tooltip content')).toBeInTheDocument(); }); it('renders target and shows content on touch start', async () => { const { getByText, queryByText } = renderWithTheme( Tooltip target

} content="Tooltip content" /> ); expect(getByText('Tooltip target')).toBeInTheDocument(); expect(queryByText('Tooltip content')).not.toBeInTheDocument(); await act(async () => { fireEvent.touchStart(getByText('Tooltip target')); }); expect(getByText('Tooltip content')).toBeInTheDocument(); }); it('renders target and do not shows content while hovering when visible is false', async () => { const { getByText, queryByText } = renderWithTheme( Tooltip target

} content="Tooltip content" visible={false} /> ); expect(getByText('Tooltip target')).toBeInTheDocument(); expect(queryByText('Tooltip content')).not.toBeInTheDocument(); await act(async () => { userEvent.hover(getByText('Tooltip target')); }); expect(queryByText('Tooltip content')).not.toBeInTheDocument(); }); it('allow interacting on tooltip content', async () => { const spiedOnClick = jest.fn(); const { getByText, queryByText } = renderWithTheme( Tooltip target

} content={
Tooltip with a
} interactive /> ); expect(getByText('Tooltip target')).toBeInTheDocument(); expect(queryByText('Tooltip content')).not.toBeInTheDocument(); await act(async () => { userEvent.hover(getByText('Tooltip target')); }); expect(getByText(/Tooltip with a/)).toBeInTheDocument(); await act(async () => { userEvent.unhover(getByText('Tooltip target')); userEvent.hover(getByText('button')); }); expect(getByText(/Tooltip with a/)).toBeInTheDocument(); userEvent.click(getByText('button')); expect(spiedOnClick).toHaveBeenCalledTimes(1); }); it('clears timeout on unmount', async () => { const clearTimeoutSpy = jest.spyOn(window, 'clearTimeout'); const { unmount } = renderWithTheme( Tooltip target

} content={
Tooltip content
} /> ); unmount(); expect(clearTimeoutSpy).toHaveBeenCalledTimes(1); }); });