import React from 'react'; import { ProFormText, ModalForm } from '@ant-design/pro-form'; import { Button } from 'antd'; import { act } from 'react-dom/test-utils'; import { mount } from 'enzyme'; import { waitForComponentToPaint } from '../util'; describe('ModalForm', () => { it('📦 trigger will simulate onVisibleChange', async () => { const fn = jest.fn(); const wrapper = mount( 新建} onVisibleChange={(visible) => fn(visible)} > , ); await waitForComponentToPaint(wrapper); act(() => { wrapper.find('button#new').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(fn).toBeCalledWith(true); }); it('📦 ModalForm first no render items', async () => { const fn = jest.fn(); const wrapper = mount( 新建} onVisibleChange={(visible) => fn(visible)} > , ); await waitForComponentToPaint(wrapper); expect(wrapper.find('input#test').exists()).toBeFalsy(); act(() => { wrapper.find('button#new').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(wrapper.find('input#test').exists()).toBeTruthy(); }); it('📦 ModalForm first render items', async () => { const fn = jest.fn(); const wrapper = mount( fn(visible)} > , ); await waitForComponentToPaint(wrapper); expect(wrapper.find('input#test').exists()).toBeTruthy(); }); it('📦 ModalForm destroyOnClose', async () => { const fn = jest.fn(); const wrapper = mount( fn(visible)} > , ); await waitForComponentToPaint(wrapper); expect(wrapper.find('input#test').exists()).toBeFalsy(); act(() => { wrapper.setProps({ visible: true, }); }); await waitForComponentToPaint(wrapper); expect(wrapper.find('input#test').exists()).toBeTruthy(); act(() => { wrapper.setProps({ visible: false, }); }); await waitForComponentToPaint(wrapper); expect(wrapper.find('input#test').exists()).toBeFalsy(); }); it('📦 modal close button will simulate onVisibleChange', async () => { const fn = jest.fn(); const wrapper = mount( 新建} onVisibleChange={(visible) => fn(visible)} > , ); await waitForComponentToPaint(wrapper); act(() => { wrapper.find('button.ant-modal-close').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(fn).toBeCalledWith(false); }); it('📦 modal visible=true simulate onVisibleChange', async () => { const fn = jest.fn(); const wrapper = mount( 新建} onVisibleChange={(visible) => fn(visible)} > , ); await waitForComponentToPaint(wrapper); expect(fn).toBeCalledWith(true); }); it('📦 reset button will simulate onVisibleChange', async () => { const fn = jest.fn(); const wrapper = mount( 新建} onVisibleChange={(visible) => fn(visible)} > , ); await waitForComponentToPaint(wrapper); act(() => { wrapper.find('.ant-modal-footer button.ant-btn').at(0).simulate('click'); }); expect(fn).toBeCalledWith(false); }); it('📦 modal close button will simulate modalProps.onCancel', async () => { const fn = jest.fn(); const wrapper = mount( fn(false), }} trigger={} onVisibleChange={(visible) => fn(visible)} > , ); await waitForComponentToPaint(wrapper); act(() => { wrapper.find('button.ant-modal-close').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(fn).toBeCalledWith(false); }); it('📦 form onFinish return true should close modal', async () => { const fn = jest.fn(); const wrapper = mount( 新建} onVisibleChange={(visible) => fn(visible)} onFinish={async () => true} > , ); await waitForComponentToPaint(wrapper); act(() => { wrapper.find('button.ant-btn-primary').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(fn).toBeCalledWith(false); }); it('📦 form onFinish is null, no close modal', async () => { const fn = jest.fn(); const wrapper = mount( 新建} onVisibleChange={(visible) => fn(visible)} > , ); await waitForComponentToPaint(wrapper); act(() => { wrapper.find('button.ant-btn-primary').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(fn).toBeCalledTimes(1); }); it('📦 ModalForm support submitter is false', async () => { const wrapper = mount( 新建} submitter={false}> , ); await waitForComponentToPaint(wrapper); act(() => { wrapper.find('button#new').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(wrapper.find('.ant-modal-footer').length).toBe(0); }); });