Skip to content
This repository was archived by the owner on Jun 2, 2024. It is now read-only.

Commit a3161a8

Browse files
committed
test(showasync): increased test coverage
1 parent 68773ea commit a3161a8

File tree

18 files changed

+148
-127
lines changed

18 files changed

+148
-127
lines changed

src/components/List/List.test.tsx renamed to src/components/List/index.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { shallow } from 'enzyme';
22
import * as React from 'react';
33

4-
import List from './List';
4+
import List from './';
55

66
describe('with render', () => {
77
const input = [1, 2, 3];

src/components/List/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from './List';

src/components/Show/Show.test.tsx renamed to src/components/Show/index.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { shallow } from 'enzyme';
22
import * as React from 'react';
33

4-
import Show from './Show';
4+
import Show from './';
55

66
const input = <div>render me</div>;
77
const output = '<div>render me</div>';

src/components/Show/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from './Show';

src/components/ShowAsync/ShowAsync.test.tsx

Lines changed: 0 additions & 66 deletions
This file was deleted.

src/components/ShowAsync/ShowAsync.tsx

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -74,28 +74,22 @@ export class ShowAsync extends React.Component<IShowAsyncProps, IShowAsyncState>
7474

7575
switch (status) {
7676
case statusTypes.pending:
77-
if (pending) {
78-
return pending();
79-
}
80-
break;
77+
return pending ? pending() : null;
78+
8179
case statusTypes.resolved:
8280
if (children && typeof children === 'function') {
8381
return children(value);
8482
}
8583
if (render) {
8684
return render(value);
8785
}
88-
break;
86+
return null;
87+
8988
case statusTypes.rejected:
90-
if (rejected) {
91-
return rejected(value);
92-
}
93-
break;
89+
return rejected ? rejected(value) : null;
9490
default:
95-
break;
91+
return null;
9692
}
97-
98-
return null;
9993
}
10094

10195
// Promise resolver function
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
import { mount } from 'enzyme';
2+
import * as React from 'react';
3+
4+
import ShowAsync from './';
5+
6+
const timeout = 100;
7+
8+
const resolvable = resolved =>
9+
new Promise(resolve => {
10+
setTimeout(() => {
11+
resolve(resolved);
12+
}, timeout);
13+
});
14+
15+
const rejectable = rejected =>
16+
new Promise((_, reject) => {
17+
setTimeout(() => {
18+
reject(rejected);
19+
}, timeout);
20+
});
21+
22+
const getPromiseStatus = wrapper => wrapper.state('status');
23+
24+
describe('resolve', () => {
25+
test('no pending, resolve, reject', () => {
26+
const wrapper = mount(<ShowAsync when={resolvable('resolved')} />);
27+
expect(wrapper.html()).toEqual(null);
28+
});
29+
30+
test('pending', () => {
31+
const pending = () => <p>horse</p>;
32+
const result = '<p>horse</p>';
33+
const wrapper = mount(<ShowAsync when={resolvable('resolved')} pending={pending} />);
34+
expect(wrapper.html()).toEqual(result);
35+
});
36+
37+
test('resolve with render', done => {
38+
const resolved = value => <p>{value}</p>;
39+
const result = '<p>resolved</p>';
40+
const wrapper = mount(<ShowAsync when={resolvable('resolved')} render={resolved} />);
41+
setTimeout(() => {
42+
expect(wrapper.html()).toEqual(result);
43+
done();
44+
}, timeout + 50);
45+
});
46+
47+
test('resolve with children', done => {
48+
const result = '<p>resolved</p>';
49+
const wrapper = mount(
50+
<ShowAsync when={resolvable('resolved')}>{value => <p>{value}</p>}</ShowAsync>,
51+
);
52+
setTimeout(() => {
53+
expect(wrapper.html()).toEqual(result);
54+
done();
55+
}, timeout + 50);
56+
});
57+
58+
test('resolve', done => {
59+
const rejected = value => <p>{value}</p>;
60+
const result = '<p>rejected</p>';
61+
const wrapper = mount(
62+
<ShowAsync when={rejectable('rejected')} rejected={rejected} />,
63+
);
64+
setTimeout(() => {
65+
expect(wrapper.html()).toEqual(result);
66+
done();
67+
}, timeout + 50);
68+
});
69+
70+
test('lifecycle', () => {
71+
const element = (
72+
<ShowAsync
73+
when={resolvable('result')}
74+
pending={() => <div>pending</div>}
75+
rejected={() => <div>rejected</div>}
76+
>
77+
{value => <div>{value}</div>}
78+
</ShowAsync>
79+
);
80+
const wrapper = mount(element);
81+
82+
if (getPromiseStatus(wrapper) === 'pending') {
83+
expect(wrapper.html()).toEqual('<div>pending</div>');
84+
}
85+
86+
if (getPromiseStatus(wrapper) === 'resolved') {
87+
expect(wrapper.html()).toEqual('<div>result</div>');
88+
}
89+
90+
wrapper.setProps({ when: rejectable('rejected') });
91+
92+
if (getPromiseStatus(wrapper) === 'pending') {
93+
expect(wrapper.html()).toEqual('<div>pending</div>');
94+
}
95+
96+
if (getPromiseStatus(wrapper) === 'rejected') {
97+
expect(wrapper.html()).toEqual('<div>rejected</div>');
98+
}
99+
100+
wrapper.unmount();
101+
102+
expect(wrapper.html()).toEqual(null);
103+
104+
wrapper.mount();
105+
106+
wrapper.setProps({ when: rejectable('rejected'), rejected: undefined });
107+
if (getPromiseStatus(wrapper) === 'rejected') {
108+
expect(wrapper.html()).toEqual(null);
109+
}
110+
111+
wrapper.setProps({
112+
when: resolvable('result'),
113+
render: undefined,
114+
children: undefined,
115+
});
116+
if (getPromiseStatus(wrapper) === 'resolved') {
117+
expect(wrapper.html()).toEqual(null);
118+
}
119+
120+
wrapper.unmount();
121+
wrapper.mount();
122+
wrapper.setProps({ pending: undefined });
123+
if (getPromiseStatus(wrapper) === 'pending') {
124+
expect(wrapper.html()).toEqual(null);
125+
}
126+
});
127+
});

src/components/ShowAsync/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default } from './ShowAsync';

src/components/Switch/SwitchCase.test.tsx

Lines changed: 0 additions & 19 deletions
This file was deleted.

src/components/Switch/Switch.test.tsx renamed to src/components/Switch/index.test.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { shallow } from 'enzyme';
22
import * as React from 'react';
33

4-
import Switch from './Switch';
4+
import Switch from './';
55

66
const createElement = (value, values, withDefault = true) => (
77
<Switch value={value}>

0 commit comments

Comments
 (0)