import React from 'react'; import { fireEvent } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import renderWithTheme from '../../../../testUtils/renderWithTheme'; import RowAction from '../index'; describe('RowAction', () => { describe('when menu has 1 action', () => { const clickHandler1 = jest.fn(); it('renders correctly', () => { const { getByText } = renderWithTheme( ); expect(getByText('View/Edit')).toBeInTheDocument(); }); it('triggers onClick when click View/Edit', () => { const { getByText } = renderWithTheme( ); fireEvent.click(getByText('View/Edit')); expect(clickHandler1).toHaveBeenCalledTimes(1); }); }); describe('when menu has more than 1 action', () => { const clickHandler = jest.fn(); it('renders correctly when menu has more than 2 actions', () => { const { getByText, getByTestId } = renderWithTheme( ); fireEvent.click(getByTestId('three-dot-button')); expect(getByText('Assign')).toBeInTheDocument(); expect(getByText('Edit')).toBeInTheDocument(); expect(getByText('View')).toBeInTheDocument(); }); it('triggers onClick when click View action', () => { const { getByText, getByTestId } = renderWithTheme( ); fireEvent.click(getByTestId('three-dot-button')); fireEvent.click(getByText('View')); expect(clickHandler).toHaveBeenCalledTimes(1); }); it('click outside the threedot to hide drop action menu', () => { const { getByTestId, queryAllByText } = renderWithTheme( ); fireEvent.click(getByTestId('three-dot-button')); userEvent.click(document.body); expect(queryAllByText('View')).toHaveLength(0); }); it('throws error when there is less than 1 action', () => { expect(() => renderWithTheme()).toThrow( `[RowAction] Need at least 1 action to render` ); }); }); });