import React from 'react'; import type { DrawerProps } from '..'; import Drawer from '..'; import { resetWarned } from '../../_util/warning'; import mountTest from '../../../tests/shared/mountTest'; import rtlTest from '../../../tests/shared/rtlTest'; import { act, fireEvent, render } from '../../../tests/utils'; import ConfigProvider from '../../config-provider'; const DrawerTest: React.FC = ({ getContainer }) => (
Here is content of Drawer
); describe('Drawer', () => { mountTest(Drawer); rtlTest(Drawer); beforeEach(() => { jest.useFakeTimers(); }); afterEach(() => { jest.useRealTimers(); }); function triggerMotion() { act(() => { jest.runAllTimers(); }); const mask = document.querySelector('.ant-drawer-mask'); if (mask) { fireEvent.animationEnd(mask); } const panel = document.querySelector('.ant-drawer-content'); if (panel) { fireEvent.animationEnd(panel); } act(() => { jest.runAllTimers(); }); } it('render correctly', () => { const { container: wrapper } = render( Here is content of Drawer , ); triggerMotion(); expect(wrapper.firstChild).toMatchSnapshot(); }); it('getContainer return undefined', () => { const { container, rerender } = render( undefined as unknown as HTMLElement} />, ); triggerMotion(); expect(container.firstChild).toMatchSnapshot(); rerender(); triggerMotion(); expect(container.firstChild).toMatchSnapshot(); }); it('render top drawer', () => { const { container } = render( Here is content of Drawer , ); triggerMotion(); expect(container.firstChild).toMatchSnapshot(); }); it('have a title', () => { const { container } = render( Here is content of Drawer , ); triggerMotion(); expect(container.firstChild).toMatchSnapshot(); }); it('closable is false', () => { const { container: wrapper } = render( Here is content of Drawer , ); triggerMotion(); expect(wrapper.firstChild).toMatchSnapshot(); }); it('destroyOnClose is true', () => { const { container: wrapper } = render( Here is content of Drawer , ); triggerMotion(); expect(wrapper.firstChild).toMatchSnapshot(); }); it('className is test_drawer', () => { const { container: wrapper } = render( Here is content of Drawer , ); triggerMotion(); expect(wrapper.firstChild).toMatchSnapshot(); }); it('style/drawerStyle/headerStyle/bodyStyle should work', () => { const style: React.CSSProperties = { backgroundColor: '#08c', }; const { container: wrapper } = render( Here is content of Drawer , ); triggerMotion(); expect(wrapper.firstChild).toMatchSnapshot(); }); it('have a footer', () => { const { container: wrapper } = render( Here is content of Drawer , ); triggerMotion(); expect(wrapper.firstChild).toMatchSnapshot(); }); it('forceRender works', () => { const { baseElement, rerender } = render( , ); expect(baseElement.querySelectorAll('button.forceRender').length).toBe(0); rerender( , ); expect(baseElement.querySelectorAll('button.forceRender').length).toBe(1); }); describe('Drawer loading', () => { it('have a spinner', () => { const { container: wrapper } = render( Here is content of Drawer , ); triggerMotion(); expect(wrapper.firstChild).toMatchSnapshot(); }); it('have a custom loading', () => { const loadingContent = 'Custom Loading...'; const { container: wrapper } = render( {loadingContent}, spinning: true }} getContainer={false} > Here is content of Drawer , ); triggerMotion(); const [loadingWrapper] = wrapper.getElementsByClassName('ant-spin-dot'); expect(loadingWrapper).toHaveTextContent(loadingContent); }); }); it('support closeIcon', () => { const { container: wrapper } = render( close} width={400} getContainer={false}> Here is content of Drawer , ); triggerMotion(); expect(wrapper.firstChild).toMatchSnapshot(); }); it('ConfigProvider should not warning', () => { const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {}); render( Bamboo is Light , ); expect(errorSpy).not.toHaveBeenCalled(); errorSpy.mockRestore(); }); it('zIndex should work', () => { const { container } = render(); expect(container.querySelector('.ant-drawer')).toHaveStyle({ zIndex: 903, }); }); describe('style migrate', () => { it('not warning with getContainer', () => { const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {}); resetWarned(); render( document.body} />); expect(errorSpy).not.toHaveBeenCalled(); errorSpy.mockRestore(); }); it('not warning with getContainer false', () => { const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {}); resetWarned(); render(); expect(errorSpy).not.toHaveBeenCalled(); errorSpy.mockRestore(); }); it('warning with getContainer & style', () => { const errorSpy = jest.spyOn(console, 'error').mockImplementation(() => {}); resetWarned(); render(); expect(errorSpy).toHaveBeenCalledWith( 'Warning: [antd: Drawer] `style` is replaced by `rootStyle` in v5. Please check that `position: absolute` is necessary.', ); errorSpy.mockRestore(); }); it('should hide close button when closeIcon is null or false', () => { const { baseElement, rerender } = render( Here is content of Drawer , ); expect(baseElement.querySelector('.ant-drawer-close')).toBeNull(); rerender( Here is content of Drawer , ); expect(baseElement.querySelector('.ant-drawer-close')).toBeNull(); rerender( Close}> Here is content of Drawer , ); expect(baseElement.querySelector('.custom-close')).not.toBeNull(); rerender( Close}> Here is content of Drawer , ); expect(baseElement.querySelector('.custom-close2')).toBeNull(); rerender( Close}> Here is content of Drawer , ); expect(baseElement.querySelector('.custom-close3')).not.toBeNull(); rerender( Here is content of Drawer , ); expect(baseElement.querySelector('.custom-drawer1 .ant-drawer-close')).not.toBeNull(); expect(baseElement.querySelector('.custom-drawer1 .anticon-close')).toBeNull(); rerender( Here is content of Drawer , ); expect(baseElement.querySelector('.custom-drawer2 .ant-drawer-close')).not.toBeNull(); expect(baseElement.querySelector('.custom-drawer2 .anticon-close')).toBeNull(); rerender( Here is content of Drawer , ); expect(baseElement.querySelector('.custom-drawer3 .anticon-close')).not.toBeNull(); rerender( Here is content of Drawer , ); expect(baseElement.querySelector('.anticon-close')).not.toBeNull(); }); it('match between styles and deprecated style prop', () => { const initialFontSize = 10; let fontSize1 = initialFontSize; let fontSize2 = initialFontSize; const getStyle1 = () => ({ fontSize: fontSize1++ }); const getStyle2 = () => ({ fontSize: fontSize2++ }); const { container: container1 } = render(

Some contents...

, ); const { container: container2 } = render(

Some contents...

, ); expect(container1).toMatchSnapshot(); expect(container2).toMatchSnapshot(); for (let i = initialFontSize; i < fontSize1; i += 1) { expect(container1.outerHTML).toContain(`font-size: ${i}px`); } for (let j = initialFontSize; j < fontSize2; j += 1) { expect(container2.outerHTML).toContain(`font-size: ${j}px`); } expect(container1.outerHTML).toEqual(container2.outerHTML); }); }); it('should support aria-* and closeIcon by closable', () => { const { baseElement } = render( Close, }} > Here is content of Drawer , ); expect(baseElement.querySelector('.ant-drawer-close')).not.toBeNull(); expect(baseElement.querySelector('.custom-close')).not.toBeNull(); expect(baseElement.querySelector('*[aria-label="Close"]')).not.toBeNull(); }); });