import * as React from 'react' import { render, fireEvent, act } from '@testing-library/react' import '@testing-library/jest-dom' import { COffcanvas } from '../index' test('loads and displays COffcanvas component', async () => { const { container } = render() expect(container).toMatchSnapshot() }) test('COffcanvas customize one', async () => { const { container } = render( Test ) expect(container).toMatchSnapshot() expect(container.firstChild).toHaveClass('offcanvas') expect(container.firstChild).toHaveClass('offcanvas-start') expect(container.firstChild).toHaveClass('bazinga') expect(container.firstChild).toHaveTextContent('Test') }) test('COffcanvas customize and event on click backdrop', async () => { jest.useFakeTimers() const onHide = jest.fn() const { container } = render( Test ) expect(container).toMatchSnapshot() expect(container.firstChild).toHaveClass('offcanvas') expect(container.firstChild).toHaveClass('offcanvas-end') expect(container.firstChild).toHaveClass('bazinga') expect(container.firstChild).toHaveClass('show') expect(container.firstChild).toHaveTextContent('Test') expect(onHide).toHaveBeenCalledTimes(0) const backdrop = document.querySelector('.offcanvas-backdrop') if (backdrop !== null) { act(() => { fireEvent.click(backdrop) jest.runAllTimers() }) } expect(onHide).toHaveBeenCalledTimes(1) expect(container.firstChild).toHaveClass('show') expect(container.firstChild).toHaveClass('hiding') act(() => { jest.runAllTimers() }) expect(container.firstChild).not.toHaveClass('show') jest.useRealTimers() }) test('COffcanvas customize and event on keypress', async () => { jest.useFakeTimers() const onHide = jest.fn() const { container } = render( Test ) expect(container).toMatchSnapshot() expect(container.firstChild).toHaveClass('offcanvas') expect(container.firstChild).toHaveClass('offcanvas-end') expect(container.firstChild).toHaveClass('bazinga') expect(container.firstChild).toHaveClass('show') expect(onHide).toHaveBeenCalledTimes(0) const canvas = document.querySelector('.offcanvas') if (canvas !== null) { act(() => { fireEvent.keyDown(canvas, { key: 'Escape', code: 'Escape', keyCode: 27, charCode: 27, }) jest.runAllTimers() }) } expect(onHide).toHaveBeenCalledTimes(1) expect(container.firstChild).toHaveClass('show') expect(container.firstChild).toHaveClass('hiding') act(() => { jest.runAllTimers() }) expect(container.firstChild).not.toHaveClass('show') jest.useRealTimers() })