import { mount, render } from 'enzyme'; import React from 'react'; import { act } from 'react-dom/test-utils'; import { SettingDrawer } from '@ant-design/pro-layout'; import defaultSettings from './defaultSettings'; import { waitForComponentToPaint } from '../util'; describe('settingDrawer.test', () => { beforeAll(() => { process.env.NODE_ENV = 'TEST'; process.env.USE_MEDIA = 'md'; Object.defineProperty(window, 'navigator', { value: { userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4437.0 Safari/537.36 Edg/91.0.831.1', clipboard: { writeText: async () => { return true; }, }, }, }); }); it('base user', () => { const html = render(); expect(html).toMatchSnapshot(); }); it('settings = undefined', () => { const html = render( , ); expect(html).toMatchSnapshot(); }); it('hideColors = true', () => { const html = render( , ); expect(html).toMatchSnapshot(); }); it('hideHintAlert = true', () => { const html = render( , ); expect(html).toMatchSnapshot(); }); it('hideLoading = true', () => { window.localStorage.removeItem('umi_locale'); const html = render( , ); expect(html).toMatchSnapshot(); window.localStorage.setItem('umi_locale', 'zh-CN'); }); it('initState form query', async () => { const fn = jest.fn(); const html = mount(
{ fn(setting); }} />
, ); await waitForComponentToPaint(html); act(() => { html.find('.ant-btn.ant-btn-block').simulate('click'); }); await waitForComponentToPaint(html); act(() => { html.find('div.ant-drawer-mask').simulate('click'); }); await waitForComponentToPaint(html, 1000); expect(fn).toBeCalled(); expect(fn).toBeCalledWith({ navTheme: 'realDark', layout: 'mix', contentWidth: 'Fluid', fixedHeader: true, fixSiderbar: false, headerHeight: 48, title: 'Ant Design Pro', iconfontUrl: '', primaryColor: 'daybreak', splitMenus: false, }); act(() => { html.unmount(); }); }); it('hideCopyButton = true', () => { const html = render( , ); expect(html).toMatchSnapshot(); }); it('clipboard throw error', async () => { Object.defineProperty(window, 'navigator', { value: { userAgent: 'Mozilla/5.0 (Macintosh; Intel Mac OS X 11_2_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4437.0 Safari/537.36 Edg/91.0.831.1', clipboard: { writeText: async () => { throw new Error('error'); }, }, }, }); const fn = jest.fn(); const html = mount( { fn(); }} />, ); await waitForComponentToPaint(html); act(() => { html.find('.ant-btn.ant-btn-block').simulate('click'); }); await waitForComponentToPaint(html); expect(fn).toBeCalled(); act(() => { html.unmount(); }); }); it('onCollapseChange', async () => { const onCollapseChange = jest.fn(); const wrapper = mount( , ); await waitForComponentToPaint(wrapper); const button = wrapper.find('.ant-pro-setting-drawer-handle'); button.simulate('click'); expect(onCollapseChange).toHaveBeenCalled(); }); it('onLayout Change', async () => { const onSettingChange = jest.fn(); const wrapper = mount( onSettingChange(setting.layout)} />, ); await waitForComponentToPaint(wrapper); act(() => { const button = wrapper.find('div.ant-pro-setting-drawer-block-checkbox-layout-item').at(2); button.simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith('mix'); act(() => { const button = wrapper.find('div.ant-pro-setting-drawer-block-checkbox-layout-item').at(1); button.simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith('top'); }); it('fix-siderbar Change', async () => { const onSettingChange = jest.fn(); const wrapper = mount( { onSettingChange(setting.fixSiderbar); }} />, ); await waitForComponentToPaint(wrapper); act(() => { wrapper.find('button.fix-siderbar').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith(true); act(() => { wrapper.find('button.fix-siderbar').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith(false); }); it('content-width change', async () => { const onSettingChange = jest.fn(); const wrapper = mount( { onSettingChange(setting.contentWidth); }} />, ); await waitForComponentToPaint(wrapper); act(() => { wrapper .find('div.ant-select.content-width') .find('.ant-select-selector') .simulate('mousedown'); }); await waitForComponentToPaint(wrapper); act(() => { wrapper.find('.ant-select-item').at(0).simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith('Fluid'); }); it('splitMenu change', async () => { const onSettingChange = jest.fn(); const wrapper = mount( { onSettingChange(setting.splitMenus); }} />, ); await waitForComponentToPaint(wrapper); act(() => { wrapper.find('button.split-menus').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith(true); }); it('fixed-header Change', async () => { const onSettingChange = jest.fn(); const wrapper = mount( { onSettingChange(setting.fixedHeader); }} />, ); await waitForComponentToPaint(wrapper); act(() => { wrapper.find('button.fixed-header').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith(true); act(() => { wrapper.find('button.fixed-header').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith(false); }); it('theme Change', async () => { const onSettingChange = jest.fn(); const wrapper = mount( onSettingChange(setting.navTheme)} />, ); await waitForComponentToPaint(wrapper); act(() => { const button = wrapper.find('div.ant-pro-setting-drawer-block-checkbox-theme-item').at(0); button.simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith('light'); act(() => { const button = wrapper.find('div.ant-pro-setting-drawer-block-checkbox-theme-item').at(1); button.simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith('dark'); }); it('colorWeak Change', async () => { const onSettingChange = jest.fn(); document.body.appendChild(document.createElement('div')); const wrapper = mount( { onSettingChange(setting.colorWeak); }} />, ); await waitForComponentToPaint(wrapper); act(() => { wrapper.find('button.color-weak').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith(true); act(() => { wrapper.setProps({ settings: { ...defaultSettings, colorWeak: true, }, }); }); await waitForComponentToPaint(wrapper, 200); act(() => { wrapper.find('button.color-weak').simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith(false); }); it('regional config change', async () => { const fn = jest.fn(); const html = mount( { const renderKeys = ['header', 'footer', 'menu', 'menuHeader'].filter((key) => { if (s[`${key}Render`] === false) { return true; } return false; }); fn(renderKeys); }} settings={defaultSettings} getContainer={false} collapse />, ); await waitForComponentToPaint(html, 200); act(() => { ['header', 'footer', 'menu', 'menuHeader'].forEach((key) => { if (html.find(`.regional-${key}`).exists()) { html.find(`button.regional-${key}`).simulate('click'); } }); }); expect(fn).toBeCalledWith(['header', 'footer', 'menu', 'menuHeader']); }); it('theme color Change', async () => { const onSettingChange = jest.fn(); (window as any).umi_plugin_ant_themeVar = [ { key: 'dark', fileName: 'dark.css', theme: 'dark' }, { key: 'dust', fileName: 'dust.css', modifyVars: { '@primary-color': '#F5222D' } }, { key: 'qixian', fileName: 'dark-qixian.css', modifyVars: { '@primary-color': '#F52225' }, }, { key: 'volcano', fileName: 'volcano.css', modifyVars: { '@primary-color': '#FA541C' } }, { key: 'sunset', fileName: 'sunset.css', modifyVars: { '@primary-color': '#FAAD14' } }, { key: 'cyan', fileName: 'cyan.css', modifyVars: { '@primary-color': '#13C2C2' } }, { key: 'green', fileName: 'green.css', modifyVars: { '@primary-color': '#52C41A' } }, { key: 'geekblue', fileName: 'geekblue.css', modifyVars: { '@primary-color': '#2F54EB' } }, { key: 'purple', fileName: 'purple.css', modifyVars: { '@primary-color': '#722ED1' } }, { key: 'qixian', theme: 'dark', fileName: 'dark-qixian.css', modifyVars: { '@primary-color': '#F52225' }, }, { key: 'dust', theme: 'dark', fileName: 'dark-dust.css', modifyVars: { '@primary-color': '#F5222D' }, }, { key: 'volcano', theme: 'dark', fileName: 'dark-volcano.css', modifyVars: { '@primary-color': '#FA541C' }, }, { key: 'sunset', theme: 'dark', fileName: 'dark-sunset.css', modifyVars: { '@primary-color': '#FAAD14' }, }, { key: 'cyan', theme: 'dark', fileName: 'dark-cyan.css', modifyVars: { '@primary-color': '#13C2C2' }, }, { key: 'green', theme: 'dark', fileName: 'dark-green.css', modifyVars: { '@primary-color': '#52C41A' }, }, { key: 'geekblue', theme: 'dark', fileName: 'dark-geekblue.css', modifyVars: { '@primary-color': '#2F54EB' }, }, { key: 'purple', theme: 'dark', fileName: 'dark-purple.css', modifyVars: { '@primary-color': '#722ED1' }, }, { key: 'test', theme: 'dark', fileName: 'dark-test.css', modifyVars: { '@primary-color': '#722ED1' }, }, ]; const wrapper = mount( onSettingChange(setting.primaryColor)} />, ); await waitForComponentToPaint(wrapper); act(() => { const button = wrapper.find('div.theme-color-content div.theme-color-block').at(0); button.simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith('daybreak'); act(() => { const button = wrapper.find('div.theme-color-content div.theme-color-block').at(1); button.simulate('click'); }); await waitForComponentToPaint(wrapper); expect(onSettingChange).toBeCalledWith('dust'); expect(wrapper.find('div.theme-color-content div.theme-color-block').length).toBe(9); act(() => { wrapper.unmount(); }); }); it('onLanguageChange support', async () => { const html = mount(); await waitForComponentToPaint(html, 200); act(() => { expect(html.find('.ant-pro-setting-drawer-title').at(0).text()).toMatchSnapshot(); }); window.localStorage.setItem('umi_locale', 'en-US'); global.window.dispatchEvent(new Event('languagechange')); act(() => { expect(html.find('.ant-pro-setting-drawer-title').at(0).text()).toMatchSnapshot(); }); await waitForComponentToPaint(html, 200); act(() => { html.unmount(); }); window.localStorage.setItem('umi_locale', 'zh-CN'); }); });