import React from 'react'; import { screen, render, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { ModalTrigger } from './ModalTrigger'; describe('Modal', () => { it('Modal is closed by default', async () => { render(
{(onClose, titleProps) => (
Testing
)}
, ); expect(screen.queryByTestId('modal')).toBeFalsy(); expect(screen.queryAllByLabelText('Open testing modal')).toHaveLength(0); }); it('Modal should render label', async () => { render(
{(onClose, titleProps) => (
Testing
)}
, ); expect(screen.getByLabelText('Open testing modal')).toBeTruthy(); }); it('Modal opens when triggered', async () => { render(
{(onClose, titleProps) => (
Testing
)}
, ); const user = userEvent.setup(); user.click(screen.getByText('Open testing modal')); await waitFor(() => { expect(screen.queryByTestId('modal')).toBeTruthy(); }); }); it('Clicking outside the modal closes it', async () => { render(
{(onClose, titleProps) => (
Testing
)}
, ); const user = userEvent.setup(); user.click(screen.getByText('Open testing modal')); await waitFor(() => { expect(screen.queryByTestId('modal')).toBeTruthy(); }); user.click(screen.getByTestId('outside')); await waitFor(() => { expect(screen.queryByTestId('modal')).toBeFalsy(); }); }); it('ESC closes modal', async () => { render(
{(onClose, titleProps) => (
Testing
)}
, ); const user = userEvent.setup(); user.click(screen.getByText('Open testing modal')); await waitFor(() => { expect(screen.queryByTestId('modal')).toBeTruthy(); }); user.type(screen.getByTestId('modal'), '{escape}'); await waitFor(() => { expect(screen.queryByTestId('modal')).toBeFalsy(); }); }); it('Invoking onClose function closes modal', async () => { render(
{(onClose, titleProps) => (
Testing
)}
, ); const user = userEvent.setup(); user.click(screen.getByText('Open testing modal')); await waitFor(() => { expect(screen.queryByTestId('modal')).toBeTruthy(); }); user.click(screen.getByTestId('closeButton')); await waitFor(() => { expect(screen.queryByTestId('modal')).toBeFalsy(); }); }); it('Modal does not open if modal trigger button is disabled', async () => { render(
{(onClose, titleProps) => (
Testing
)}
, ); const user = userEvent.setup(); user.click(screen.getByText('Open testing modal')); await waitFor(() => { expect(screen.queryByTestId('modal')).not.toBeTruthy(); }); }); it('Focus is trapped within modal', async () => { render(
)}
)}
); }}