mirror of
https://gitee.com/baidu/amis.git
synced 2024-12-05 13:38:56 +08:00
579 lines
16 KiB
TypeScript
579 lines
16 KiB
TypeScript
|
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();
|
|||
|
});
|