194 lines
3.8 KiB
TypeScript
194 lines
3.8 KiB
TypeScript
import {
|
|
render as amisRender
|
|
} from '../../src/index';
|
|
import {wait, makeEnv} from '../helper';
|
|
import {render, fireEvent, cleanup} from 'react-testing-library';
|
|
import {
|
|
buildApi,
|
|
isApiOutdated
|
|
} from '../../src/utils/api';
|
|
|
|
test('api:buildApi', () => {
|
|
expect(buildApi('/api/xxx')).toMatchObject({
|
|
method: 'get',
|
|
url: '/api/xxx'
|
|
});
|
|
|
|
expect(buildApi('get:/api/xxx')).toMatchObject({
|
|
method: 'get',
|
|
url: '/api/xxx'
|
|
});
|
|
|
|
expect(buildApi('delete:/api/xxx')).toMatchObject({
|
|
method: 'delete',
|
|
url: '/api/xxx'
|
|
});
|
|
|
|
|
|
expect(buildApi('/api/xxx?a=${a}&b=${b}', {
|
|
a: 1,
|
|
b: 2
|
|
})).toMatchObject({
|
|
method: 'get',
|
|
url: '/api/xxx?a=1&b=2'
|
|
});
|
|
|
|
expect(buildApi({
|
|
method: 'get',
|
|
url: '/api/xxx?a=${a}&b=${b}'
|
|
}, {
|
|
a: 1,
|
|
b: 2
|
|
})).toMatchObject({
|
|
method: 'get',
|
|
url: '/api/xxx?a=1&b=2'
|
|
});
|
|
|
|
expect(buildApi('/api/xxx?a=${a}', {
|
|
a: '&'
|
|
})).toMatchObject({
|
|
method: 'get',
|
|
url: '/api/xxx?a=' + encodeURIComponent('&')
|
|
});
|
|
});
|
|
|
|
|
|
test('api:buildApi:dataMapping', () => {
|
|
expect(buildApi({
|
|
method: 'post',
|
|
url: '/api/xxx',
|
|
data: {
|
|
a: 1,
|
|
b: '${b}'
|
|
}
|
|
}, {
|
|
b: 2
|
|
})).toMatchObject({
|
|
method: 'post',
|
|
url: '/api/xxx',
|
|
data: {
|
|
a: 1,
|
|
b: 2
|
|
}
|
|
});
|
|
|
|
|
|
expect(buildApi({
|
|
method: 'post',
|
|
url: '/api/xxx',
|
|
headers: {
|
|
a: 1,
|
|
b: '${b}'
|
|
}
|
|
}, {
|
|
b: 2
|
|
})).toMatchObject({
|
|
method: 'post',
|
|
url: '/api/xxx',
|
|
headers: {
|
|
a: 1,
|
|
b: 2
|
|
}
|
|
});
|
|
});
|
|
|
|
test('api:buildApi:autoAppend', () => {
|
|
expect(buildApi({
|
|
method: 'get',
|
|
url: '/api/xxx',
|
|
}, {
|
|
a: 1,
|
|
b: 2
|
|
}, {
|
|
autoAppend: true
|
|
})).toMatchObject({
|
|
method: 'get',
|
|
url: '/api/xxx?a=1&b=2'
|
|
});
|
|
});
|
|
|
|
|
|
test('api:isApiOutdated', () => {
|
|
expect(isApiOutdated('/api/xxx?a=${a}', '/api/xxx?a=${a}', {
|
|
a: 1,
|
|
b: 0
|
|
}, {
|
|
a: 1,
|
|
b: 2,
|
|
})).toBeFalsy();
|
|
|
|
expect(isApiOutdated('/api/xxx?a=${a}', '/api/xxx?a=${a}', {
|
|
a: 1,
|
|
b: 0
|
|
}, {
|
|
a: 2,
|
|
b: 2,
|
|
})).toBeTruthy();
|
|
|
|
|
|
expect(isApiOutdated('/api/xxx', '/api/xxx', {
|
|
a: 1,
|
|
b: 0
|
|
}, {
|
|
a: 2,
|
|
b: 2,
|
|
})).toBeFalsy();
|
|
|
|
expect(isApiOutdated({
|
|
method: 'get',
|
|
url: '/api/xxx?a=${a}'
|
|
}, {
|
|
method: 'get',
|
|
url: '/api/xxx?a=${a}',
|
|
sendOn: 'this.b === 0'
|
|
}, {
|
|
a: 1,
|
|
b: 0
|
|
}, {
|
|
a: 2,
|
|
b: 2,
|
|
})).toBeFalsy();
|
|
});
|
|
|
|
test('api:cache', async () => {
|
|
let count = 1;
|
|
const fetcher = jest.fn().mockImplementation(() => Promise.resolve({
|
|
data: {
|
|
status: 0,
|
|
msg: 'ok',
|
|
data: {
|
|
a: count++
|
|
}
|
|
}
|
|
}));
|
|
const {
|
|
container,
|
|
getByText
|
|
} = render(amisRender({
|
|
type: 'page',
|
|
name: 'thepage',
|
|
initApi: {
|
|
method: 'get',
|
|
url: '/api/xxx?id=${id}',
|
|
cache: 2000
|
|
},
|
|
toolbar: {
|
|
type: 'button',
|
|
label: 'Reload',
|
|
actionType: 'reload',
|
|
target: 'thepage'
|
|
},
|
|
body: 'The variable value is ${a}'
|
|
}, {}, makeEnv({
|
|
fetcher
|
|
})));
|
|
|
|
await wait(100);
|
|
expect(container).toMatchSnapshot();
|
|
|
|
fireEvent.click(getByText(/Reload/));
|
|
|
|
await wait(100);
|
|
expect(fetcher).toHaveBeenCalledTimes(1); // 只请求一次,第二次请求从缓存中取
|
|
expect(container).toMatchSnapshot();
|
|
}); |