import React = require('react'); import * as renderer from 'react-test-renderer'; import {fireEvent, render, waitFor} from '@testing-library/react'; import '../../../src'; import {render as amisRender} from '../../../src'; import {makeEnv} from '../../helper'; test('doAction:crud reload', async () => { const notify = jest.fn(); const fetcher = jest.fn().mockImplementation(() => Promise.resolve({ data: { status: 0, msg: 'ok', data: { count: 171, rows: [ { engine: 'Trident - pbz7l', browser: 'Internet Explorer 4.0', platform: 'Win 95+', version: '4', grade: 'X', badgeText: '默认', id: 1 }, { engine: 'Trident - tir4m8', browser: 'Internet Explorer 5.0', platform: 'Win 95+', version: '5', grade: 'C', badgeText: '危险', id: 2 }, { engine: 'Trident - wcn6f', browser: 'Internet Explorer 5.5', platform: 'Win 95+', version: '5.5', grade: 'A', id: 3 }, { engine: 'Trident - uwmcbf', browser: 'Internet Explorer 6', platform: 'Win 98+', version: '6', grade: 'A', id: 4 }, { engine: 'Trident - yjgst7', browser: 'Internet Explorer 7', platform: 'Win XP SP2+', version: '7', grade: 'A', id: 5 }, { engine: 'Trident - w9ee2k', browser: 'AOL browser (AOL desktop)', platform: 'Win XP', version: '6', grade: 'A', id: 6 }, { engine: 'Gecko - hi6cd', browser: 'Firefox 1.0', platform: 'Win 98+ / OSX.2+', version: '1.7', grade: 'A', id: 7 }, { engine: 'Gecko - 4kxz6', browser: 'Firefox 1.5', platform: 'Win 98+ / OSX.2+', version: '1.8', grade: 'A', id: 8 }, { engine: 'Gecko - x0u91o', browser: 'Firefox 2.0', platform: 'Win 98+ / OSX.2+', version: '1.8', grade: 'A', id: 9 }, { engine: 'Gecko - iou01', browser: 'Firefox 3.0', platform: 'Win 2k+ / OSX.3+', version: '1.9', grade: 'A', id: 10 } ] } } }) ); const {container, getByText} = render( amisRender( { type: 'page', data: { name: 'amis', age: 18, date: '2023-6-6' }, body: [ { type: 'button', label: '刷新CRUD数据加载请求', level: 'primary', className: 'mb-2', onEvent: { click: { actions: [ { componentId: 'crud_reload', actionType: 'reload' } ] } } }, { type: 'crud', api: '/api/mock2/sample', id: 'crud_reload', syncLocation: false, columns: [ { name: 'id', label: 'ID' }, { name: 'engine', label: 'Rendering engine' }, { name: 'browser', label: 'Browser' }, { name: 'platform', label: 'Platform(s)' }, { name: 'version', label: 'Engine version' }, { name: 'grade', label: 'CSS grade' }, { type: 'operation', label: '操作', buttons: [ { label: '详情', type: 'button', level: 'link', actionType: 'dialog', dialog: { title: '查看详情', body: { type: 'form', body: [ { type: 'input-text', name: 'engine', label: 'Engine' }, { type: 'input-text', name: 'browser', label: 'Browser' }, { type: 'input-text', name: 'platform', label: 'platform' }, { type: 'input-text', name: 'version', label: 'version' }, { type: 'control', label: 'grade', body: { type: 'tag', label: '${grade}', displayMode: 'normal', color: 'active' } } ] } } }, { label: '删除', type: 'button', level: 'link', className: 'text-danger', disabledOn: "this.grade === 'A'" } ] } ] } ] }, {}, makeEnv({ notify, fetcher }) ) ); await waitFor(() => { expect(getByText('刷新CRUD数据加载请求')).toBeInTheDocument(); }); fireEvent.click(getByText(/刷新CRUD数据加载请求/)); await waitFor(() => { expect(fetcher).toHaveBeenCalledTimes(2); expect(fetcher.mock.calls[0][0].url).toEqual( '/api/mock2/sample?page=1&perPage=10' ); expect(fetcher.mock.calls[1][0].url).toEqual( '/api/mock2/sample?page=1&perPage=10' ); }); expect(container).toMatchSnapshot(); }); test('doAction:crud reload with data1', async () => { const notify = jest.fn(); const fetcher = jest.fn().mockImplementation(() => Promise.resolve({ data: { status: 0, msg: 'ok', data: { name: 'Amis Renderer', author: 'fex', date: 1688714086 } } }) ); const {container, getByText} = render( amisRender( { type: 'page', data: { name: 'amis', age: 18, date: '2023-6-6' }, body: [ { type: 'button', label: '刷新CRUD数据加载请求,同时追加参数date', level: 'primary', className: 'mb-2', onEvent: { click: { actions: [ { componentId: 'crud_reload', actionType: 'reload', data: { date: '${date}' } } ] } } }, { type: 'crud', api: '/api/mock2/sample', id: 'crud_reload', syncLocation: false, columns: [ { name: 'id', label: 'ID' }, { name: 'engine', label: 'Rendering engine' }, { name: 'browser', label: 'Browser' }, { name: 'platform', label: 'Platform(s)' }, { name: 'version', label: 'Engine version' }, { name: 'grade', label: 'CSS grade' }, { type: 'operation', label: '操作', buttons: [ { label: '详情', type: 'button', level: 'link', actionType: 'dialog', dialog: { title: '查看详情', body: { type: 'form', body: [ { type: 'input-text', name: 'engine', label: 'Engine' }, { type: 'input-text', name: 'browser', label: 'Browser' }, { type: 'input-text', name: 'platform', label: 'platform' }, { type: 'input-text', name: 'version', label: 'version' }, { type: 'control', label: 'grade', body: { type: 'tag', label: '${grade}', displayMode: 'normal', color: 'active' } } ] } } }, { label: '删除', type: 'button', level: 'link', className: 'text-danger', disabledOn: "this.grade === 'A'" } ] } ] } ] }, {}, makeEnv({ notify, fetcher }) ) ); await waitFor(() => { expect( getByText('刷新CRUD数据加载请求,同时追加参数date') ).toBeInTheDocument(); }); fireEvent.click(getByText(/刷新CRUD数据加载请求,同时追加参数date/)); await waitFor(() => { expect(fetcher).toHaveBeenCalledTimes(2); expect(fetcher.mock.calls[0][0].url).toEqual( '/api/mock2/sample?page=1&perPage=10' ); expect(fetcher.mock.calls[1][0].url).toEqual( '/api/mock2/sample?page=1&date=2023-6-6&perPage=10' ); }); expect(container).toMatchSnapshot(); }); test('doAction:crud reload with data2', async () => { const notify = jest.fn(); const fetcher = jest.fn().mockImplementation(() => Promise.resolve({ data: { status: 0, msg: 'ok', data: { name: 'Amis Renderer', author: 'fex', date: 1688714086 } } }) ); const {container, getByText} = render( amisRender( { type: 'page', data: { name: 'amis', age: 18, date: '2023-6-6' }, body: [ { type: 'button', label: '刷新CRUD数据加载请求,同时追加按钮所在数据域的所有数据', level: 'primary', className: 'mb-2', onEvent: { click: { actions: [ { componentId: 'crud_reload', actionType: 'reload', data: { '&': '$$', 'author': 'fex' } } ] } } }, { type: 'crud', api: '/api/mock2/sample', id: 'crud_reload', syncLocation: false, columns: [ { name: 'id', label: 'ID' }, { name: 'engine', label: 'Rendering engine' }, { name: 'browser', label: 'Browser' }, { name: 'platform', label: 'Platform(s)' }, { name: 'version', label: 'Engine version' }, { name: 'grade', label: 'CSS grade' }, { type: 'operation', label: '操作', buttons: [ { label: '详情', type: 'button', level: 'link', actionType: 'dialog', dialog: { title: '查看详情', body: { type: 'form', body: [ { type: 'input-text', name: 'engine', label: 'Engine' }, { type: 'input-text', name: 'browser', label: 'Browser' }, { type: 'input-text', name: 'platform', label: 'platform' }, { type: 'input-text', name: 'version', label: 'version' }, { type: 'control', label: 'grade', body: { type: 'tag', label: '${grade}', displayMode: 'normal', color: 'active' } } ] } } }, { label: '删除', type: 'button', level: 'link', className: 'text-danger', disabledOn: "this.grade === 'A'" } ] } ] } ] }, {}, makeEnv({ notify, fetcher }) ) ); await waitFor(() => { expect( getByText('刷新CRUD数据加载请求,同时追加按钮所在数据域的所有数据') ).toBeInTheDocument(); }); fireEvent.click( getByText(/刷新CRUD数据加载请求,同时追加按钮所在数据域的所有数据/) ); await waitFor(() => { expect(fetcher).toHaveBeenCalledTimes(2); expect(fetcher.mock.calls[0][0].url).toEqual( '/api/mock2/sample?page=1&perPage=10' ); expect(fetcher.mock.calls[1][0].url).toEqual( '/api/mock2/sample?page=1&name=amis&age=18&date=2023-6-6&author=fex&perPage=10' ); }); expect(container).toMatchSnapshot(); });