import React from 'react' import { render, fireEvent, waitForElementToBeRemoved, } from '@toptal/picasso-test-utils' import { Button } from '@toptal/picasso-button' import { Modal } from '@toptal/picasso-modal' import { useModal } from './use-modal' let modalRoot: HTMLElement describe('Modal', () => { beforeAll(() => { modalRoot = document.createElement('div') modalRoot.setAttribute('id', 'modal-root') document.body.appendChild(modalRoot) }) it('useModal opens and closes modal', async () => { const TestComponent = () => { const { showModal, hideModal, isOpen } = useModal() return ( <>

Modal content

) } const { getByText, queryByText, baseElement } = render() const showModalButton = getByText('Show') fireEvent.click(showModalButton) expect(queryByText('Modal content')).toBeTruthy() expect(baseElement).toMatchSnapshot() const hideModalButton = getByText('Hide') fireEvent.click(hideModalButton) await waitForElementToBeRemoved(() => getByText('Hide')) expect(queryByText('Modal content')).toBeFalsy() expect(baseElement).toMatchSnapshot() }) it('useModal shows multiple modals at the same time', () => { const TestComponent = () => { const { showModal: showModal1, isOpen: isOpen1 } = useModal() const { showModal: showModal2, isOpen: isOpen2 } = useModal() return ( <>

First modal content

Second modal content

) } const { getByText, queryByText, baseElement } = render() fireEvent.click(getByText('Show first')) fireEvent.click(getByText('Show second')) expect(queryByText('First modal content')).toBeTruthy() expect(queryByText('Second modal content')).toBeTruthy() expect(baseElement).toMatchSnapshot() }) })