Skip to content

Commit

Permalink
test: add unit test, fixes #39
Browse files Browse the repository at this point in the history
  • Loading branch information
xz8la8 committed Jul 31, 2020
1 parent f19e836 commit f334515
Show file tree
Hide file tree
Showing 5 changed files with 574 additions and 39 deletions.
35 changes: 35 additions & 0 deletions packages/sula/src/action-plugin/__tests__/request.mock.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,15 @@ Mock.mock('/redirect.json', {
},
});

Mock.mock('/global/redirect.json', {
code: 300,
success: true,
message: 'success',
data: {
redirectUrl: 'http://www.github.com',
},
});

Mock.mock('/error.json', {
code: 200,
success: false,
Expand Down Expand Up @@ -74,3 +83,29 @@ Mock.mock('/matchers.json', {
a: 123,
},
});

Mock.mock('/global/errorAdapter.json', {
code: 404,
success: false,
errorMessage: 'error',
description: 'error description',
});

Mock.mock('/global/errorMessageAdapter.json', {
code: 100,
success: false,
errorMessage: 'error message',
});

Mock.mock('/global/successMessageAdapter.json', {
code: 200,
success: true,
message: 'success message',
description: 'memo',
});

Mock.mock('/global/dataAdapter.json', {
code: 200,
success: true,
list: [{ name: 'name' }],
});
165 changes: 128 additions & 37 deletions packages/sula/src/action-plugin/__tests__/request.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -130,41 +130,39 @@ describe('sula request', () => {
});

describe('global config matchers', () => {
request.use(
(reqConfig) => {
if (reqConfig.url === '/matchers.json') {
return true;
}
return false;
},
{
bizDataAdapter(res) {
return {
...res.data,
extra: true,
};
it('costom matchers', async () => {
await request.use(
(reqConfig) => {
if (reqConfig.url === '/matchers.json') {
return true;
}
return false;
},
},
);

request.use(true, {});
{
bizDataAdapter(res) {
return {
...res.data,
extra: true,
};
},
},
);

it('costom matchers', async () => {
request.use(true, {});
const res = await fetch({
url: '/matchers.json',
method: 'post',
});
expect(res).toEqual({ a: 123, extra: true });
});

request.use({
bizParamsAdapter(params) {
const { testParams, ...otherParams } = params || {};
return otherParams;
},
});

it('bizParamsAdapter', async () => {
await request.use({
bizParamsAdapter(params) {
const { testParams, ...otherParams } = params || {};
return otherParams;
},
});
const res = await fetch({
url: '/params.json',
method: 'post',
Expand All @@ -173,26 +171,119 @@ describe('sula request', () => {
expect(res.body).toEqual(JSON.stringify({ id: 1 }));
});

request.use({
bizRequestAdapter(requestConfig) {
const { method, params, data } = requestConfig;
const { requestParams, ...otherParams } = data || params || {};
let keys = 'params';
if (method === 'post') {
keys = 'data';
}
return { ...requestConfig, [keys]: otherParams };
},
});

it('bizRequestAdapter', async () => {
await request.use({
bizRequestAdapter(requestConfig) {
const { method, params, data } = requestConfig;
const { requestParams, ...otherParams } = data || params || {};
let keys = 'params';
if (method === 'post') {
keys = 'data';
}
return { ...requestConfig, [keys]: otherParams };
},
});
const res = await fetch({
url: '/params.json',
method: 'post',
params: { requestParams: 12, id: 1 },
});
expect(res.body).toEqual(JSON.stringify({ id: 1 }));
});

it('global bizRedirectHandler', async () => {
window.location.assign = jest.fn();
await request.use({
bizRedirectHandler(response) {
const { data, code } = response;
const codeNum = Number(code);
if (codeNum >= 300 && codeNum < 400 && data?.redirectUrl) {
window.location.assign(data.redirectUrl);
}
},
});
await fetch({ url: '/global/redirect.json' });
expect(window.location.assign).toHaveBeenCalledWith('http://www.github.com');
window.location.assign.mockClear();
});

it('global bizDevErrorAdapter', async () => {
await request.use({
bizDevErrorAdapter(response) {
const { code, success, errorMessage, description } = response;
const codeNum = Number(code);
if (success === false && codeNum >= 400) {
return {
message: errorMessage,
description: description,
};
}
return null;
},
});
return fetch({ url: '/global/errorAdapter.json' }).catch((error) => {
expect(error).toEqual({ message: 'error', description: 'error description' });
});
});

it('global bizErrorMessageAdapter', async () => {
await request.use({
bizErrorMessageAdapter(response) {
const { code, success, errorMessage } = response;
const codeNum = Number(code);
if (success === false && codeNum < 300) {
return errorMessage;
}
return null;
},
});

return fetch({ url: '/global/errorMessageAdapter.json' }).catch((error) => {
expect(error).toEqual('error message');
});
});

it('global bizSuccessMessageAdapter', async () => {
await request.use({
bizSuccessMessageAdapter(response, successMessage) {
const { success, message: successMes } = response;
if (successMessage === false) {
return null;
}
if (success !== false) {
if (successMessage === true) {
return successMes;
}
return successMessage;
}
},
});

await request.use({
bizNotifyHandler(notifyMessages) {
const { successMessage } = notifyMessages;
if (successMessage) {
expect(successMessage).toEqual('success message');
}
},
});

return fetch({ url: '/global/successMessageAdapter.json', successMessage: true });
});

it('global bizDataAdapter', async () => {
await request.use({
bizDataAdapter(response) {
if (response?.list) {
return response.list;
}
return response;
},
});
return fetch({ url: '/global/dataAdapter.json' }).then((response) => {
expect(response).toEqual([{ name: 'name' }]);
});
});
});

describe('getFormDataParams', () => {
Expand Down
127 changes: 127 additions & 0 deletions packages/sula/src/form/__test__/form.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -356,4 +356,131 @@ describe('form', () => {
expect(wrapper.find('.changedInput').length).toBeTruthy();
});
});

describe('dependency scenes', () => {
it('field_2 value clear while field_1 cleared', async () => {
let formRef;
const wrapper = mount(
<Form
ref={(ref) => {
formRef = ref;
}}
initialValues={{
a: {
x: 'customize',
},
b: '123',
}}
fields={[
{
name: ['a', 'x'],
label: 'field_1',
field: 'input',
},
{
name: 'b',
label: 'field_2',
field: 'input',
dependency: {
value: {
relates: [['a', 'x']],
inputs: ['*'],
output: 'abc',
ignores: [['', 'customize']],
defaultOutput: '',
},
disabled: {
relates: [['a', 'x']],
inputs: ['*'],
output: true,
ignores: [['', 'customize']],
defaultOutput: false,
},
},
},
]}
/>,
);

await delay(100);
expect(formRef.getFieldDisabled('b')).toBeFalsy();

wrapper
.find('input')
.first()
.simulate('change', { target: { value: 'a' } });
await delay(100);

expect(formRef.getFieldDisabled('b')).toBeTruthy();
expect(formRef.getFieldValue('b')).toEqual('abc');
expect(wrapper.find('input').last().props().value).toEqual('abc');

wrapper
.find('input')
.first()
.simulate('change', { target: { value: '' } });
await delay(100);
expect(formRef.getFieldDisabled('b')).toBeFalsy();
expect(formRef.getFieldValue('b')).toEqual('');
expect(wrapper.find('input').last().props().value).toEqual('');

wrapper
.find('input')
.first()
.simulate('change', { target: { value: 'customize' } });
await delay(100);
expect(formRef.getFieldDisabled('b')).toBeFalsy();
expect(formRef.getFieldValue('b')).toEqual('');
expect(wrapper.find('input').first().props().value).toEqual('customize');
expect(wrapper.find('input').last().props().value).toEqual('');
});

it('CNY and USD conversion', () => {
let formRef = null;
const onValuesChange = (values) => {
const changeKey = Object.keys(values)[0];
if (changeKey === 'usd') {
formRef.setFieldValue('cny', values[changeKey] * 7);
} else if (changeKey === 'cny') {
formRef.setFieldValue('usd', values[changeKey] / 7);
}
};
const wrapper = mount(
<Form
ref={(ref) => {
formRef = ref;
}}
fields={[
{
name: 'cny',
label: 'CNY',
field: 'input',
},
{
name: 'usd',
label: 'USD',
field: 'input',
},
]}
onValuesChange={onValuesChange}
/>,
);

wrapper
.find('input')
.at(0)
.simulate('change', { target: { value: 7 } });
expect(formRef?.getFieldsValue()).toEqual({ cny: 7, usd: 1 });
expect(wrapper.find('input').first().props().value).toEqual(7);
expect(wrapper.find('input').last().props().value).toEqual(1);

wrapper
.find('input')
.at(1)
.simulate('change', { target: { value: 2 } });
expect(formRef?.getFieldsValue()).toEqual({ cny: 14, usd: 2 });
expect(wrapper.find('input').first().props().value).toEqual(14);
expect(wrapper.find('input').last().props().value).toEqual(2);
});
});
});
Loading

0 comments on commit f334515

Please sign in to comment.